dvomedia/cruftflake

CruftFlake - 尝试实现Twitter Snowflake版本,但在PHP中使用简单的ZeroMQ接口。

此包的官方仓库似乎已不存在,因此该包已被冻结。

安装次数: 1,075

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分叉: 25

类型:应用程序

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/

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

  1. 生成器(服务器端)

    ./scripts/cruftflake.php

  2. 一个客户端,将生成N个ID并输出到STDOUT

    ./scripts/client.php -n 100

依赖项*

  • ZeroMQ
  • ZooKeeper

*遗憾的是,这些目前还不能添加到composer中!