24|UUID:如何高效生成全局的唯一ID?
黄清昊
该思维导图由 AI 生成,仅供参考
你好,我是微扰君。
今天我们来聊一聊在生产环境中非常常用的一个算法——全局唯一 ID 生成算法,也就是我们通常说的 UUID。
就和我们在社会中都有自己的身份证号作为自己的唯一标示一样,在互联网的应用中,很多时候,我们需要能生成一个全局唯一的 ID,去区别不同业务场景下的不同数据,比如消息 ID、用户 ID、微博内容 ID 等等。
因为我们往往需要通过这个 ID 去索引某个业务数据,所以一定要保证生成的 ID 在全局范围内是唯一的,这也是 identifier 的本意,在部分情况下,冲突概率很小可能也是可以接受的。另外,这个 ID 通常需要按照某种规则有序排列,最常用的就是基于时间进行排序。
所以全局唯一 ID 的两个核心需求就是:
全局唯一性
粗略有序性
那业界是如何生成满足这两大需求的 ID,又有哪些方案呢?我们开始今天的学习。
单体环境
在单体的应用中,保证 ID 的全局唯一,其实不是一个很大的问题,我们只需要提供一个在内存中的计数器,就可以完成对 ID 的颁发。
当然这样的 ID 可能会带有明确的含义,并被暴露出去了,比如在票务系统中,如果这样设计,我们能根据电子票 ID 判断出自己买的是第几张票。这对安全性要求更高的业务来说,是不可接受的,但通过一些简单的加密算法混淆,我们就能解决这个问题。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
分布式唯一ID生成算法是在生产环境中广泛使用的重要技术。本文介绍了两种主流的分布式ID生成方案:引入单点ID生成器和基于数据库的实现,以及在业务侧本地生成ID的方案,其中包括UUID和Snowflake算法。UUID是一种常见的全局唯一ID生成算法和协议,通过本地产生ID,不需要远程调用独立服务。Snowflake算法则是一种引入了机器编号和时间信息的分布式ID生成算法,由业务方本地执行。这些方案都旨在满足全局唯一性和粗略有序性的需求,但需要根据具体业务场景和性能要求选择合适的实现方式。总结来看,备份节点来提高可用性、批量读写来提高系统性能、本地计算来避免性能瓶颈是关键思想。读者可以从中学习到如何解决分布式系统中的ID生成问题,以及在引入外部组件时需要考虑的问题和性能瓶颈。文章内容简洁明了,适合技术人员快速了解分布式ID生成算法的实现原理和应用场景。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《业务开发算法 50 讲》,新⼈⾸单¥59
《业务开发算法 50 讲》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(2)
- 最新
- 精选
- 雨落~紫竹有问题。人家就10毫秒来10万个 你这不都有问题了2022-07-1811
- peter请教老师四个问题: Q1:重试幂等使用的ID用什么方法生成? Q2:个人电脑,比如我使用的笔记本,我并没有对它进行过时间同步操作, 请问这个笔记本会自动进行时间同步吗? Q3:Snowflake算法的bit0为什么不用?maxNodeId为什么要1024减去1? maxSequence为什么要4096减去1? Q4:能否举几个分布式ID在互联网的典型应用? 比如XX场景下用XX方法?2022-02-151
收起评论