面试刷题31:分布式ID设计方案
面试中关于分布式的问题很多。(分布式事务,基本理论CAP,BASE,分布式锁)先来一个简单的。
简单说一下分布式ID的设计方案?
首先要明确在分布式环境下,分布式id的基本要求。
1, 全局唯一,在分布式集群下,不同的节点并发生成的分布式id要唯一;
2, 顺序性,分布式id是有序生成
然后给出分布式id的设计方案。
1, 基于数据的自增id生成分布式ID,使用比较简单,缺点是扩展性和可靠性有限;基于数据库表的自增id
2,基于snowflake 算法生成;
snowflake生成的分布式id是一个64位整数;位数标识如下:
1 标识正负
41位,一般使用System.currentTimeMilles()得到;
5 数据中心标识
5 机器ip标识
12 单位毫秒内可以生成的序数极限
snowflake的生成跟时间相关的使用的是System.currentTimeMilles(),跟冬令时没有关系。
分布式id的进一步要求
可靠性: 即高可用
紧凑性: 64位的整数比较长,不太紧凑,作为索引,存储不占优势。
有意义: 可以放入业务标识或者时间
snowflake的缺点
受时间影响:需要保证分布式集群的时间同步,即NTP ;
可以预测到:容易按照时间规律预测到,进而影响安全性;
小结
回答了分布式id的基本要求,已经常用方案。
原创不易,点赞关注支持一下吧!转载请注明出处,让我们互通有无,共同进步,欢迎沟通交流。
我会持续分享Java软件编程知识和程序员发展职业之路,欢迎关注,我整理了这些年编程学习的各种资源,关注公众号‘李福春持续输出’,发送'学习资料'分享给你!
no pays,no gains!
标签:
Java技术 技术管理
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架