听说:分布式ID不能全局递增?

本文探讨了分布式ID实现的三种方式:号段模式、Snowflake算法和Redis Incr。号段模式虽高效但难以实现全局递增,而Snowflake能保证递增但依赖时间可能导致重复。Redis Incr可通过Incr命令实现递增,但面临持久化和性能瓶颈。文章讨论了如何在号段模式下实现局部递增,包括固定路由和处理服务故障的挑战,并强调选择合适方案的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是【架构摆渡人】,一只十年的程序猿。这是实践经验系列的第十一篇文章,这个系列会给大家分享很多在实际工作中有用的经验,如果有收获,还请分享给更多的朋友。

前面有篇文章我们讲到用时间来代替自增ID进行分页排序,原因是因为接入了分布式ID,但是分布式ID不能够保证有序,只能保证全局唯一。

那么今天我们一起来探讨下,究竟能不能实现有序的分布式ID呢?

分布式ID的实现方式

号段模式

号段模式是目前用的比较多的实现分布式ID的方式,号段模式通过预先获取一段范围,然后全部在内存中进行ID的分发,性能极高。

采用号段模式实现的开源框架也有很多,比如美团的Leaf,滴滴的Tinyid。对号段模式实现原理不了解的小伙伴可以查看下面的地址进行深入学习。号段模式想要实现递增比较难,文章后面我们一起聊聊有没有什么方式能够实现。

Leaf: https://github.com/Meituan-Dianping/Leaf

Tinyid: https://github.com/didi/tinyid

Snowflake

Snowflake 是 Twitter 开源的分布式ID生成算法,在国内用的也比较多。比如百度开源的uid-generator就是基于Snowflake算法进行改进。

uid-generator:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值