Understanding and Implementing Twitter's Snowflake Distributed ID Generation Algorithm in Java
This article explains the need for compact, time‑ordered unique IDs in distributed systems, describes Twitter's Snowflake 64‑bit ID structure, provides a full Java implementation with bit‑allocation details, and demonstrates its high‑performance generation of millions of IDs.
In distributed systems a globally unique identifier is often required, but UUIDs are long and unordered, prompting the need for a simpler, time‑ordered solution.
Twitter's Snowflake algorithm generates 64‑bit IDs composed of a sign bit, a 41‑bit timestamp (relative to a custom epoch), 5‑bit datacenter ID, 5‑bit machine ID, and a 12‑bit sequence number, allowing up to 1024 nodes and 4096 IDs per millisecond.
The Java implementation defines constants for bit lengths, maximum values, and left‑shift offsets, validates datacenter and machine IDs, and provides synchronized nextId() logic that handles clock rollback, sequence overflow, and timestamp progression.
Utility methods getNewstmp() , getNextMill() and the constructor initialize the generator; a main method demonstrates generating one million IDs in about five seconds, printing sample IDs such as 170916032679263329‑170916032679263342.
The source code is available on GitHub ( https://github.com/souyunku/SnowFlake ) and can be adapted by adjusting the bit allocation for datacenter and machine portions to suit specific deployment needs.
Architect's Tech Stack
Java backend, microservices, distributed systems, containerized programming, and more.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.