「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Snowflake ID ジェネレーターの実装

Snowflake ID ジェネレーターの実装

2024 年 11 月 7 日に公開
ブラウズ:669

Implementing Snowflake Id generator

スノーフレークIDとは何ですか?

Snowflake ID は分散環境で使用され、衝突のない、短い一意の ID を生成します。データベースに依存した ID 生成や長い 128 ビット UUID の使用などの従来の方法とは異なり、Snowflake ID は時間と単純なビット単位の操作を使用します。この賢い手法により、衝突を避けるために中央システムを必要とせずに、各マイクロサービスが個別に一意の ID を生成できるようになります。

生成方法

Snowflake ID の生成は、3 つの主要なピースでパズルを構築するようなものです。細かく見てみましょう:

  1. n ビット長のビット文字列を取得します:

    まず、長さ n のビット文字列から始めます。これには、一意の ID を生成するために必要なすべての情報が含まれます。

  2. i、j、k の 3 つのセクションに分割します:

    ビット文字列は、i j k = n.

  3. のように 3 つの部分に分割されます。
  • i - 時間コンポーネント:

    最初の部分 i は現在の時刻を表します。固定の開始時間 (エポックとも呼ばれる) を選択すると、現在の時間をナノ秒単位で取得し、開始時間を減算することで i のビットが計算されます。これにより、新しい ID が常に古い ID よりも大きくなります。

  • j - マシン ID:

    2 番目の部分 j はマシン識別子です。マイクロサービスが開始されると、一意の ID (マシン ID) が割り当てられ、これが j 部分になります。これにより、異なるマシンで生成された ID が、たとえまったく同じ瞬間に作成されたとしても、衝突することがなくなります。

  • k - シーケンス番号:

    最後の部分 k はシーケンス番号です。これは、同じ時間単位内に複数の ID が生成されるたびに増加するカウンターのように機能します。これにより、ID が連続して生成された場合でも、ID が一意に保たれます。

  1. ピースを組み合わせる: i、j、k の値を取得したら、それらを連結して単一のビット文字列を形成します。次に、このビット文字列を基数 10 に変換して、最終的な Snowflake ID を取得します。

簡単な例え

Snowflake ID を忙しいキッチンの特別な食器タグとして考えてください:

  • 時間 (i): これはキッチンで時を刻む時計のようなもので、後で作った料理が先に作った料理よりも大きな数字になるようにします。
  • マシン ID (j): 各シェフ (またはマイクロサービス) には独自の署名があり、料理タグが他のものと衝突しないようにします。
  • シーケンス番号 (k): シェフが一度に複数の料理を作る場合、タグに少しずつ追加するため、各料理には固有のラベルが付けられます。

Go で実装されたスノーフレーク

Snowflake ID 生成の Go 実装については、この GitHub リポジトリを確認してください

情報源

  1. https://blog.x.com/engineering/en_us/a/2010/payment-snowflake
  2. https://en.wikipedia.org/wiki/Snowflake_ID
リリースステートメント この記事は次の場所に転載されています: https://dev.to/alquama/implementing-snowflake-id-generator-3f8k?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3