5种分布式ID生成方案 分布式ID详解( 二 )


5.snowflake雪花算法生成ID这种方案大致来说是一种以划分命名空间(UUID也算,由于比较常见,所以单独分析)来生成ID的一种算法,这种方案把64-bit分别划分成多段,分开来标示机器、时间等,比如在snowflake中的64-bit分别表示如下图(图片来自网络)所示:

5种分布式ID生成方案 分布式ID详解

文章插图
41-bit的时间可以表示(1L<<41)/(1000L*3600*24*365)=69年的时间,10-bit机器可以分别表示1024台机器 。如果我们对IDC划分有需求,还可以将10-bit分5-bit给IDC , 分5-bit给工作机器 。这样就可以表示32个IDC,每个IDC下可以有32台机器,可以根据自身需求定义 。12个自增序列号可以表示2^12个ID,理论上snowflake方案的QPS约为409.6w/s,这种分配方式可以保证在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的 。
雪花算法ID优点:
  • 毫秒数在高位,自增序列在低位,整个ID都是趋势递增的 。
  • 不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的 。
  • 可以根据自身业务特性分配bit位,非常灵活 。
雪花算法ID缺点:
  • 强依赖机器时钟,如果机器上时钟回拨,会导致发号重复或者服务会处于不可用状态 。
以上
作者简介陈睿|mikechen,10年+大厂架构经验,《BAT架构技术500期》系列文章作者,专注于互联网架构技术 。
阅读mikechen的互联网架构更多技术文章合集
Java并发|JVM|MySQL|Spring|Redis|分布式|高并发
【5种分布式ID生成方案 分布式ID详解】

推荐阅读