A decentralized, k-ordered UUID generator in PHP
Snowflakes is a PHP and Composer package that provides: * A simple 128-bit id generator. * Methods to convert snowflakes ID into string, (*1)
Snowflakes produces 128-bit and time-ordered ids. They run one on each node in infrastructure and will generate conflict-free ids on-demand without coordination., (*2)
The project is inspired by Twitter's Snowflake and Go implementation of Discord but extended to 128-bit and not compatible with Twitter's Snowflake. This library provides a basis for id generation but not a service for handing out ids nor node id coordination., (*3)
composer require progamesigner/snowflakes
use ProGameSigner\Snowflakes\Node; $node = new Node($worker_id); $some_id = $node->next()->toString();
If you are using Laravel, you can use SnowflakesServiceProvider
shipped with this package. Configure worker id
with config('services.snowflakes.id', $worker_id)
and get snowflake with resolve('snowflakes')->next()
., (*4)
Snowflakes ids are 128-bits wide described here from most significant to least significant bits: * timestamp (64-bit) - milliseconds since the epoch (Jan 1 1970) * node id(48-bit) - a configurable node id * sequence (16-bit) - usually 0, increasing when more than one request in the same millisecond and reset to 0 when clock ticks forward, (*5)
You should use NTP to keep your system clock accurate. Snowflakes holds requests when non-monotonic clock detected. To run in a mode where NTP not move the clock backwards, see http://wiki.dovecot.org/TimeMovedBackwards#Time_synchronization for tips on how to do this., (*6)
@progamesigner., (*7)
MIT © Yang Sheng Han, (*8)