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