分布式唯一ID的生成
背景:
在分布式架构下,唯一序列号生成是我们在设计一个尤其是数据库使用分库分表的时候会常见的一个问题
特性:
- 全局唯一,这是基本要求,不能出现重复
- 数字类型,趋势递增,后面的ID必须比前面的大
- 长度短,能够提高查询效率,这也是从MySQL数据库规范出发的,尤其是ID作为主键时
- **信息安全,**如果ID连续生成,势必会泄露业务信息,所以需要无规则不规则
- 高可用低延时,ID生成快,能够扛住高并发,延时足够低不至于成为业务瓶颈.
雪花算法:
snowflake是推特开源的分布式ID生成算法
-
结果: long 型的ID号(64位的ID号)
-
核心思想(生成的ID号是64位那么就对64位进行划分赋予特别的含义):

41bit-时间戳决定了该算法生成ID号的可用年限.
10bit-工作机器编号决定了该分布式系统的扩容性即机器数量.
12bit-序列号决定了每毫秒单机系统可以生成的序列号
-
拓展:什么是时间戳?

本文详细介绍了Twitter的雪花算法,一种用于生成全局唯一ID的分布式算法。该算法将64位ID划分为时间戳、工作机器ID和序列号三部分,确保ID的全局唯一性和趋势递增性。同时,文章提到了算法的优缺点,如高并发下高效生成ID,但面临时钟回拨问题可能导致重复ID。解决方案包括等待时钟同步或采用回滚策略。此外,还展示了在单机上生成400万个ID仅需803ms的实验结果,证明了其高性能。
最低0.47元/天 解锁文章
564

被折叠的 条评论
为什么被折叠?



