gendoria/cruftflake

基于Twitter Snowflake的唯一ID生成器,但采用PHP编写,并具有简单的ZeroMQ接口。

安装: 29

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 3

分支: 24

类型:应用程序

2.2.2 2016-05-31 14:20 UTC

This package is auto-updated.

Last update: 2024-09-24 19:37:15 UTC


README

Build Status Scrutinizer Code Quality Code Coverage Downloads Latest Stable Version

基于 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。

  1. 生成器(服务器)

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

    ./examples/client.php -n 100
  3. 一个客户端,将向服务器请求生成器状态

    ./examples/status.php

为了使客户端示例工作,必须运行服务器示例。

依赖项

  • ZeroMQ
  • ZooKeeper(如果您想使用ZooKeeper集中式配置)
  • Doctrine DBAL >= 2.3.0(如果您想使用Doctrine DBAL集中式配置)

Composer需要安装php-zmq模块。