2.2.3 分布式时间戳方式

本方式提供一个基于Zookeeper(也可以本地配置)的分布式ID生成器,可以生成全局唯一的63位二进制ID。
PS:63位的原因是Java没有无符号整数类型,所以最高位恒为0,保证全局序列是个正数

2.2.3.1 位模式

序列值是63bits的整数。整数的位模式如下:

a.9bits b.9bits c.6bits d.39bits

其中:

  • a - e为从高位到低位。

  • a为线程id的低9位值。

  • b为9位实例 id值(根据配置, 此值为bootstrap.cnf的instanceId值或者从zookeeper服务器获取的值, 参见1.7.3 分布式time序列)。

  • c为6位自增长值

  • d为系统当前时间戳的低39位值(可以使用17年)。

2.2.3.2 退化的分布式时间序列

如果cluster.cnf中的sequenceInstanceByZk值不为true, 序列的维护仅依赖于单实例(bootstrap.cnf的instanceId值的维护),此时序列类似于时间戳方式(参见2.2.2 时间戳方式)。

2.2.3.3 分布式时间序列

如果cluster.cnf中的sequenceInstanceByZk值为true,序列的维护用zookeeper的临时自增节点来维持。每次生成全局序列时,向zk申请一个临时自增节点,通过计算自增节点数 % 32 获取INSTANCEID.

results matching ""

    No results matching ""