dvomedia / cruftflake
CruftFlake - 尝试实现Twitter Snowflake版本,但在PHP中使用简单的ZeroMQ接口。
此包的官方仓库似乎已不存在,因此该包已被冻结。
1.0.0
2013-03-20 19:33 UTC
This package is not auto-updated.
Last update: 2024-05-08 10:07:18 UTC
README
尝试实现Twitter Snowflake版本,但在PHP中使用简单的ZeroMQ接口(而不是Thrift)。
实现
该项目是由个人好奇心和我无法构建Twitter的项目的挫败感所激发。
实现复制的Twitter - 生成64位ID。
- 时间 - 41位
- 配置的机器ID - 10位
- 序列号 - 12位
具有自定义纪元,这意味着它可以在2081-09-06之前生成ID(不同于Snowflake的纪元)。
使用ZooKeeper进行配置协调
我们使用ZooKeeper来存储正在使用的机器ID。当新节点首次启动时,它必须能够连接到ZooKeeper集群并创建一个新节点。它将查看所有现有节点,然后(如果它找不到自己的Mac地址)尝试申请新的空闲地址。
我之前使用的是临时节点 - 类似于锁模式,但这个问题是节点需要在整个生命周期中保持与ZK的连接 -- 这就避免了。
缺点是,可能1024个可能的机器ID将“填满”,需要手动修剪。
运行
通过composer安装
{
"minimum-stability": "dev",
"require": {
"posmena/cruftflake": "*"
}
}
您应该运行测试以验证一切正常
./vendor/bin/phpunit vendor/posmena/cruftflake/test/
提供了两个脚本用于试验。
-
生成器(服务器端)
./scripts/cruftflake.php
-
一个客户端,将生成N个ID并输出到STDOUT
./scripts/client.php -n 100
依赖项*
- ZeroMQ
- ZooKeeper
*遗憾的是,这些目前还不能添加到composer中!