gendoria / cruftflake
基于Twitter Snowflake的唯一ID生成器,但采用PHP编写,并具有简单的ZeroMQ接口。
2.2.2
2016-05-31 14:20 UTC
Requires
- php: >=5.3.9
- ext-zmq: *
- psr/log: ~1.0
- symfony/console: >=2.5
Requires (Dev)
- doctrine/dbal: =2.3.0
- phpunit/dbunit: ~1.4.0
- symfony/console: =2.5
Suggests
- doctrine/dbal: Allows configuration using database through doctrine DBAL.
README
基于 Twitter Snowflake 的唯一ID生成器,但用PHP编写,具有简单的ZeroMQ接口(而非Thrift)。
这是对 dvomedia/cruftflake 的重写。它将代码组织成模块,并添加了几个接口,使得扩展其他服务器和配置机制更加容易。
实现
实现部分复制了Twitter - 生成64位ID。
- 时间 - 41位
- 配置的机器ID - 10位
- 序列号 - 12位
具有自定义的纪元,这意味着它可以将ID生成到2081-09-06(与Snowflake的纪元不同)。
ZooKeeper用于配置协调
我们使用ZooKeeper来存储正在使用的机器ID。当新节点首次启动时,它必须能够联系ZooKeeper集群并创建一个新节点。它将查看所有现有节点,然后(如果它找不到自己的MAC地址)尝试申请新的空闲地址。
我之前使用的是临时节点 - 类似(类似)于锁模式,但这个问题是节点需要在整个生命周期内始终连接到ZK -- 这样就不需要了。
缺点是,潜在的1024个可能的机器ID可能会“填满”并需要手动修剪。
运行
通过composer安装
{ "require": { "gendoria/cruftflake": "*" } }
提供了几个示例脚本,用于进行操作。两者都需要先进行composer update。
-
生成器(服务器)
./examples/server.php
-
一个客户端,将生成N个ID并输出到STDOUT
./examples/client.php -n 100
-
一个客户端,将向服务器请求生成器状态
./examples/status.php
为了使客户端示例工作,必须运行服务器示例。
依赖项
- ZeroMQ
- ZooKeeper(如果您想使用ZooKeeper集中式配置)
- Doctrine DBAL >= 2.3.0(如果您想使用Doctrine DBAL集中式配置)
Composer需要安装php-zmq模块。