snaper/cruftflake

此软件包最新版本(dev-master)没有可用的许可证信息。

此软件包提供了Twitter Snoflake ID生成算法的PHP实现

dev-master / 1.0.x-dev 2017-09-26 18:17 UTC

This package is not auto-updated.

Last update: 2024-09-29 04:46:32 UTC


README

Build Status ProjectStatus

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

提供了两个脚本用于实验。

  1. 生成器(服务器)

    ./examples/cruftflake.php

或指定一个手动配置的机器ID

./examples/cruftflake.php -m 1
  1. 一个客户端将生成N个ID并将其输出到STDOUT

    ./examples/client.php -n 100