分布式ID的设计

前言

这个讲解的比较多,很多文章都有提到,主要参考这两篇博客吧。回头总结一下这两篇文章。

Snowflake算法(雪花算法)

大概就是给每一个机器分配一个标识位,然后取时间戳、标识位、全局自增ID拼接成一起,比如时间戳是1000,机器标识位 2000,全局自增ID是1111,那我们得到的ID就是

100020001111

上述仅仅是,正常它是64位,第1位用来符号位,2–42是毫秒时间戳,43-52 位是 机器标识位,53-64位是全局自增ID,这样就实现了分布式ID,那有多大的数据呢?10位机器标识位可以最多1024台机器,12位全局自增ID最多4096个ID,每毫秒可以得到:1024*4096=4194304个ID,通俗一点就是每毫秒420万左右的ID。
优点:

  • 高并发场景下生成速度快
  • 无序,不可被猜测

缺点:

  • 时钟回拨,这样时间造成的ID重复,也补救方法,跟上一个时间进行比较,抛异常或者其他方法补救。

电商场景中用户下单订单号这种可以使用此方法。当然如果你感觉64位还挺大的,你可以适当缩小一点,比如用秒来作为时间戳单位,机器位少一些,自增ID少一些,这样就很好了。

额外讲解

可以不用二进制吗?用十进制或十六进制,这样表示的范围就很大了,就非常可观了。我觉得可以,位数也可以不用这么多,提高进制可以达到一样的效果。

参考博客

Leaf——美团点评分布式ID生成系统
如果再有人问你分布式 ID,这篇文章丢给他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值