乐趣区

分布式ID系列1为什么需要分布式ID以及分布式ID的业务需求

分布式 id 主要用到哪些地方

在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识。如在美团点评的金融、支付、餐饮、酒店、猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一 ID 来标识一条数据或消息,数据库的自增 ID 显然不能满足需求;特别一点的如订单、骑手、优惠券也都需要有唯一 ID 做标识。此时一个能够生成全局唯一 ID 的系统是非常必要的。

分布式 id 创建的业务需求

要求如下所示

1. 全局唯一性:不能出现重复的 ID 号,既然是唯一标识,这是最基本的要求。
2. 趋势递增:在 MySQL InnoDB 引擎中使用的是聚集索引,由于多数 RDBMS 使用 B -tree 的数据结构来存储索引数据,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。
3. 单调递增:保证下一个 ID 一定大于上一个 ID,例如事务版本号、IM 增量消息、排序等特殊需求。
4. 信息安全:如果 ID 是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定 URL 即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要 ID 无规则、不规则。
5. 分布式 id 里面最好包含时间戳,这样就能够在开发中快速了解这个分布式 id 的生成时间

上述 123 对应三类不同的场景,3 和 4 需求还是互斥的,所以无法使用同一个方案满足。

同时除了对 ID 号码自身的要求,业务还对 ID 号生成系统的可用性要求极高,想象一下,如果 ID 生成系统瘫痪,整个美团点评支付、优惠券发券、骑手派单等关键动作都无法执行,这就会带来一场灾难。由此我总结下一个 ID 生成系统应该做到如下几点:

可用性高:就是我用户发了一个获取分布式 id 的请求,那么你服务器就要保证 99.999% 的情况下给我创建一个分布式 id
延迟低:就是我用户给你一个获取分布式 id 的请求,那么你服务器给我创建一个分布式 id 的速度就要快
高 QPS:这个就是用户一下子有 10 万个创建分布式 id 请求同时过去了,那么你服务器要顶的住,你要一下子给我成功创建 10 万个分布式 id

原文链接

其他分布式 ID 系列快捷键:
分布式 ID 系列(1)——为什么需要分布式 ID 以及分布式 ID 的业务需求
分布式 ID 系列(2)——UUID 适合做分布式 ID 吗
分布式 ID 系列(3)——数据库自增 ID 机制适合做分布式 ID 吗
分布式 ID 系列(4)——Redis 集群实现的分布式 ID 适合做分布式 ID 吗

大佬网址
https://www.itqiankun.com/art…
https://blog.csdn.net/hengyun…
https://tech.meituan.com/2017…
https://segmentfault.com/a/11…
https://www.jianshu.com/p/9d7…

退出移动版