全局唯一ID生成方式之twitter/snowflake(雪花算法)
博客专区 > Raymond 的博客 > 博客详情
全局唯一ID生成方式之twitter/snowflake(雪花算法)
Raymond 发表于6个月前
全局唯一ID生成方式之twitter/snowflake(雪花算法)
  • 发表于 6个月前
  • 阅读 25
  • 收藏 1
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 雪花算法

          为了解决分布式 ID 唯一不重复性,twitter 开源了 snowflake 算法,并被众多的企业作为参照,实现自己的一套 ID 生成器。SnowFlake的优点是,整体上按照时间自增排序,并且整个分布式系统内不会产生ID碰撞(由数据中心ID和工作机器ID作区分)

          先来一张 twitter 的一张算法图。

       接下来大概讲一下雪花算法,主要有以下几部分组成

        1,  首位代表符号位。0 为正,1位负,而在生成的 ID 中, 要求基本都是正数, 所以首位基本是0.

        2,41位的时间戳。用来记录当前时间与标记时间twepoch的毫秒数的差值,JAVA 应用中是长度13的 Long 型时间戳, 一共41位。计算下来大可以使用69年(T = (1L << 41) / (1000L * 60 * 60 * 24 * 365) = 69。在这里设置twepoch=1485882061743L ,(时间为2017-01-01 01:01:01)。

        3,5位数据中心 ID, 及5位工作机器 ID。 这里可以解决分布式 标志性问题。支持2的10次方台机器。数据中心和工作机器 ID 取值均为(0~31)

        4,  12位序列号。每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号(1L << 12)

      

      代码连接 > https://gitee.com/nforgo/moth-sequence

 

共有 人打赏支持
粉丝 0
博文 11
码字总数 3228
×
Raymond
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: