yyh-gl's icon

yyh-gl's Tech Blog

技術ネタ中心のブログです。主な扱いはバックエンド技術と設計です。

yyh-gl

1 分で読めます

featured

はじめに

分散システムにおけるID採番方法について気になったので調べたときのメモ。
(UUIDおよびULIDはスキップ)
調査の中で興味を持ったのがSnowflakeだったので、ほぼSnowflakeの話。

Snowflake

分散システムにおけるID採番方式として有名なもののひとつ。
https://en.wikipedia.org/wiki/Snowflake_ID

64bitで構成されている。

(参照: https://en.wikipedia.org/wiki/Snowflake_ID

基本的に、上記のフォーマットで生成されたバイナリは10進数の数値に変換される。
timestampを含むので、時刻情報に基づいたソートが可能。
高い衝突体制を持つ。

timestampを含んでいることからも分かるとおり、SnowflakeはSystem Clockに依存している。
よって、時間が巻き戻ったりするとIDが重複する可能性がある。
ただし、時刻が巻き戻った場合にはID生成をストップする機構が組み込まれている。
(最後に生成したIDが示す時刻を超えるまで生成ストップ)
https://github.com/twitter-archive/snowflake/tree/snowflake-2010?tab=readme-ov-file#system-clock-dependency

Xでも使われている(参考 )。
現行のコードではないもののコードはこちら
今使われているのはSnowflakeの進化系?

The Snowflake we’re using internally is a full rewrite and heavily relies on existing infrastructure at Twitter to run.

Snowflakeとよく比較される対象

  • UUID
  • ULID

最近の投稿

About

東京で働くソフトウェアエンジニアです。バックエンドがメインですが、フロントエンドやインフラもさわっています。