Snowflake ID は分散環境で使用され、衝突のない、短い一意の ID を生成します。データベースに依存した ID 生成や長い 128 ビット UUID の使用などの従来の方法とは異なり、Snowflake ID は時間と単純なビット単位の操作を使用します。この賢い手法により、衝突を避けるために中央システムを必要とせずに、各マイクロサービスが個別に一意の ID を生成できるようになります。
Snowflake ID の生成は、3 つの主要なピースでパズルを構築するようなものです。細かく見てみましょう:
n ビット長のビット文字列を取得します:
まず、長さ n のビット文字列から始めます。これには、一意の ID を生成するために必要なすべての情報が含まれます。
i、j、k の 3 つのセクションに分割します:
ビット文字列は、i j k = n.
i - 時間コンポーネント:
最初の部分 i は現在の時刻を表します。固定の開始時間 (エポックとも呼ばれる) を選択すると、現在の時間をナノ秒単位で取得し、開始時間を減算することで i のビットが計算されます。これにより、新しい ID が常に古い ID よりも大きくなります。
j - マシン ID:
2 番目の部分 j はマシン識別子です。マイクロサービスが開始されると、一意の ID (マシン ID) が割り当てられ、これが j 部分になります。これにより、異なるマシンで生成された ID が、たとえまったく同じ瞬間に作成されたとしても、衝突することがなくなります。
k - シーケンス番号:
最後の部分 k はシーケンス番号です。これは、同じ時間単位内に複数の ID が生成されるたびに増加するカウンターのように機能します。これにより、ID が連続して生成された場合でも、ID が一意に保たれます。
Snowflake ID を忙しいキッチンの特別な食器タグとして考えてください:
Snowflake ID 生成の Go 実装については、この GitHub リポジトリを確認してください
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3