分布式全局ID生成策略

传统应用中,ID生成策略使用mysql自增序列auto_increment,过度依赖数据库,有一定性能瓶颈;在分库分表的数据库中、之前一张数据庞大想要拆分的表,自增策略就会出现问题。分布式全局ID由此而生

  1. Reids:
    我们知道redis是单线程的,通过Incr可以实现自增。在分布式系统中也可以使用redis来实现自增序列,且每条数据的id均不一样。
  2. UUID:
    UUID是通用唯一识别码(Universally Unique Identifier)的缩写,用它可以产生一个号称全球唯一的ID,来保证每条数据ID唯一。
    优点:本地生成性能比较高,没有网络消耗。
    缺点:mysql索引的存储使用的是B+树,主键索引是有顺序的,而UUID是无序的,插入数据会导致索引树频繁调整
  3. 雪花算法:
    雪花算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛。
    优点:时间在高位,自增在低位,保证了id递增的顺序。且每部分都有自己的生成规则,这样在一定的大前提下,能保证全局唯一。
    缺点:如果服务器时间向前调整,序号可能重复
  4. Mysql auto_increment_offset、auto_increment_increment

auto_increment_offset表示自增长字段从那个数开始,他的取值范围是1 … 65535
auto_increment_increment表示自增长字段每次递增的量,其默认值是1,取值范围是1 … 65535

通过设置不同步长生成不同段的唯一id
优点:简单,现有数据库就可以实现
缺点:数据扩容困难,两个节点增加到三个节点,原来的id不好处理,通过一台mysql处理,性能不好。如果数据库宕机则整个系统不可用
5. Leaf-segment
在上面mysql生成的基础上,通过分段的概念,一次生成一堆id,每次取id时不通过数据库拿。
优点:相比上面的提升了性能,可以支持更高的并发场景。使用缓存存储。如果数据库宕机一定场合不影响业务
缺点:和上面一样,不容易扩展
Leaf-snowflake
在雪花算法的基础上解决了时间回拨的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值