snaper / cruftflake
此软件包最新版本(dev-master)没有可用的许可证信息。
此软件包提供了Twitter Snoflake ID生成算法的PHP实现
dev-master / 1.0.x-dev
2017-09-26 18:17 UTC
Requires
- php: >=5.3.3
Requires (Dev)
- phpunit/phpunit: ~4.5
This package is not auto-updated.
Last update: 2024-09-29 04:46:32 UTC
README
Twitter Snowflake的一个版本,但在PHP中使用简单的ZeroMQ接口(而不是Thrift)。
实现
这个项目是出于个人好奇,也因为我的无法构建Twitter的项目。
此实现复制了Twitter - 生成64位ID。
- 时间 - 41位
- 配置的机器ID - 10位
- 序列号 - 12位
有一个自定义的纪元,这意味着它可以在2081-09-06之前生成ID(与Snowflake的纪元不同)。
使用ZooKeeper进行配置协调(可选)
每台机器必须有一个唯一的10位机器ID。ZooKeeper可以用来保存所有注册的机器ID列表,允许新机器自动分配一个唯一的机器ID。
当使用ZooKeeper时,当新节点首次启动时,它必须能够联系ZooKeeper集群并创建一个新节点。它将查看所有现有节点,然后(如果找不到其自己的Mac地址)尝试占用一个空闲的地址。
我之前使用的是Ephemeral节点 - 类似(类似)于锁模式,但这个问题是节点需要在ZK的生命周期内保持连接 - 这样就不需要了。
缺点是,可能的1024个可能的机器ID可能会“填满”并需要手动修剪。
运行
使用git克隆然后执行composer update来安装依赖项。你应该运行测试来验证一切正常
vendor/bin/phpunit
提供了两个脚本用于实验。
-
生成器(服务器)
./examples/cruftflake.php
或指定一个手动配置的机器ID
./examples/cruftflake.php -m 1
-
一个客户端将生成N个ID并将其输出到STDOUT
./examples/client.php -n 100