高并发下分布式ID生成方案

方案1:UUID机制

  算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成UUID

  • 优点: 本地生成,生成简单,性能好,没有高可用风险。
  • 缺点: 长度过长,无序不可读,对于MySQL的查询不方便(因为UUID是字符串,比对是否相等时需要将字符串解析成一个个字符,再转成ASCII码进行比对),且容易造成叶子节点裂变(导致大量数据的拷贝,对性能有影响)。
  • 适用场景: 业务场景简单,没有高并发量,只是简单的分散存储,而且不考虑后期可维护性的场景。

方案2:Redis自增ID

  Redis的所有命令操作都是单线程的,本身提供像incrincreby这样的自增原子命令,所以能保证生成的ID肯定是唯一有序的。

  • 优点: 不依赖于数据库,灵活方便,且性能优于数据库,数字ID天然排序,对分页或者需要排序的结果时很有帮助。
  • 缺点: 存放在Redis当中,如果内存淘汰策略选择不当,会导致丢失,不支持非连续性ID生成。

方案3:数据库自增ID

  使用数据库的ID自增策略,如MySQL的auto_increment。并且可以使用两台数据库分别设置不同步长,生成不重复id的策略来实现高可用。

  • 优点: 数据库生成的ID绝对有序,高可用且实现方式简单。
  • 缺点: 需要独立部署数据库实例,成本高,有性能瓶颈。

方案4:Twitter的雪花算法

  Twitter利用ZooKeeper实现了一个全局ID生成的服务Snowflake,不同的位代表了不同的含义。
在这里插入图片描述
优点: 高性能,低延迟,按时间有序,一般不会造成ID碰撞。
缺点: 需要独立的开发和部署,依赖于机器的时钟。


方案5:百度的UidGenerator

  底层是基于雪花算法去实现的,但是目前该项目的社群活跃度不高


方案6:美团的Leaf

  Leaf是美团开源的分布式ID生成器,能保证全局唯一性、趋势递增、单调递增、信息安全,里面也提到了几种分布式方案的对比,但也需要依赖关系数据库、ZooKeeper等中间件。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值