2.2.3 分布式时间戳方式

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

2.2.3.1 位模式

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

a.9bits b.5bits c.4bits d.6bits e.39bits

其中:

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

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

  • b为5位实例 id值(根据配置, 此值为配置文件中的INSTANCEID值或者从zookeeper服务器获取的值, 参见1.7.3 分布式time序列)。

  • c为4位数据中心id值(即配置文件中的CLUSTERID的值,参见1.7.3 分布式time序列)。

  • d为6位自增长值

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

2.2.3.2 退化的分布式时间序列

如果配置文件中的INSTANCEID值不为'ZK', 序列的维护仅依赖于单实例(主要是INSTANCEID值的维护),此时序列类似于时间戳方式(参见2.2.2 时间戳方式)。

2.2.3.3 分布式时间序列

如果配置文件中的INSTANCEID值为'ZK',序列的维护(主要是INSTANCEID值的维护)用zookeeper的临时自增节点来维持。每次生成全局序列时,向zk申请一个临时自增节点,通过计算自增节点数 % 32 获取INSTANCEID.

results matching ""

    No results matching ""