分布式Unique ID的生成方法一览

2016/4/3 posted in  others

发号器

Oracle的自增ID

特点是准连续的自增数字,为什么说是准连续?因为性能考虑,每个Client一次会领20个ID回去慢慢用,用完了再来拿。另一个Client过来,拿的就是另外20个ID。

如果有多个数据中心,那就拿高位的几个bit来区分。

UUID

  • 时间戳 + UUID版本号,分三段占16个字符
  • Clock Sequence号与保留字段,占4个字符
  • 节点标识,占12个字符

UUID有多种算法,能用于TraceID的是:

  • version1:基于时间的算法
  • version4:基于随机数的算法

version 4

最暴力的做法,也是JDK里的算法,除了少数几个位必须按规范填,其余全部用随机数表示。

version 1

严格守着原来各个位的规矩:

以100纳秒为1,从1582年10月15日算起

节点标识也有48bit,一般用MAC地址表示,如果有多快网卡就随便用一块。如果没有网卡,就用随机数凑数,或者拿一堆尽量多的其他信息,比如主机名什么的,拼在一起再hash

顺序号这16bit则仅用于避免前面的节点标识改变(网卡改了),时钟系统出问题,让它随机一下避免重复。


Reference

http://calvin1978.blogcn.com/articles/uuid.html