分布式id
2021-08-25 本文已影响0人
张某某xyz
20210825
首先介绍下代理主键和业务主键
- 代理主键:表中单独建个id字段作为主键
- 业务主键:使用有业务含义的字段作为主键,如身份证号码
分布式ID的难点
保证多个节点生成的id不重复,如订单服务有3个节点,这3个节点在创建订单时订单id不能重复
解决方法有:
UUID, 雪花算法
UUID
最简单的方式
优点:生成方式简单 UUID.randomUUID().toString()
缺点:长度太长了,是16字节
雪花算法
总长度1+41+12+10=64bit=8字节(比UUID短一半)
- 41bit的事件戳和10bit的机器id:将出现重复id的范围缩小到同一台机器的同一毫秒内
- 最后12bit的序列号:就是解决同一台机器的同一毫秒内出现重复id
缺点:当调整服务器的时间时可能造成 41bit的事件戳 出现重复
readis、mysql集群这些利用外部服务提供id的做法不要去用,因为成本大