分布式ID学习
2025-02-15 22:37:32 0 举报
分布式ID
作者其他创作
大纲/内容
九大分布式ID生成策略
1:UUID
通用的唯一识别码,Universally Unique Indentifier,基于当前时间、计数器、硬件标识(通常为无线网卡的MAC地址)等数据计算而成
如下介绍
优缺点:
使用场景:
2:自增ID
如下所示:
优缺点:单体数据库可以,分布式场景不行,如分库分表场景,可能多张表的自增id是相同的,解决思路:可以单独创建一张主键维护表(将分布式ID独立出来,脱离业务数据库),每次插入数据时都从该表查询主键,进而保证主键的唯一性,问题:如果主键维护表这个单体数据库挂了,获取不到分布式主键id,所以高可用是其需要解决的问题
表数据演示,test_order_id表,主键为id,自增,每次查询主键id时,都去查询最新插入的id
示意图
3:数据库多主模式
实际上是对第二种解决方案进行高可用优化,针对主键维护表数据库,构建多主集群模式,这样自增ID可以有多个mysql实例生成
问题:高并发情况下无法很好的扩展机器
4:号段模式
详解
5:redis(用的也比较少)
既然实现分布式ID可以用独立于业务数据库的形式,那么Redis则是更好的选择,因为它本身就是一个基于内存的数据库,而且还可以持久化,并且最重要的是基于单线程模型,性能还非常高,也可以做全局性的唯一ID
基于INCR自增命令实现全局性的唯一ID:单线程,原子性保证
思路
具体实现:
使用redis生成的分布式ID设计格式格式
代码演示
1:
2:
6:雪花算法
解释:注意是1毫秒产生4096个自增ID,1秒钟则可以产生4096*1000= 4096000个订单
雪花算法高可用、高并发、高扩展设计
如下所示
常见问题:时钟回拨问题,就是服务器的时间可能会快或者会变
源码中是直接抛异常的
企业中如何解决时钟的回拨问题?
7:百度
8:美团
9:滴滴
0 条评论
下一页