SnowFlake分布式ID生成器

此篇内容参考《亿级流量Java高并发与网络编程实战》

在分布式系统中,为了解决在不同的服务器上产生唯一的ID值的问题,通常有以下三种方法:

  1. 使用数据库的自增特性,不同节点直接使用相同数据库的自增ID值。
  2. 使用UUID算法产生ID值。
  3. 使用SnowFlake算法产生ID值。

这里讨论由Twitter提出的生成ID的SnowFlake算法,又称为雪花算法,该算法会生成一个64bit的整数,其中只使用了63bit,一共可以表示2^{63}个ID值,或者说是922 3372 0368 5477 5808个ID值。

其结构如下所示:

63 62~22 21~12 11~0
未使用 41bit的时间戳 10bit的机器码 12bit的序列号(递增)

其中,41bit的时间戳,若采用1ms作为时间单位,则可以表示69年左右的时间范围。

10bit的机器码可以分解为5bit地理位置+5bit机器编号的形式,也可以将机器的MAC或IP地址等唯一标识符转换为10bit机器码。

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据