分布式系统唯一ID生成器

像传统数据库中有自增 auto increment 属性的主键,但是自增属性在分布式 环境中不好用,因为单数据库服务器不够大,而在多个数据库之间生成唯一ID且 只容忍极低延时是很具挑战性的。

多主复制

图7-2

利用数据库的自增特性,并不是把下一个ID加1,而是加k,k是正在使用的服务器数量。

UUID

UUID 是一个 128 位的数字,用于标识计算机系统中的信息。

UUID 重复的概率非常低,每秒产生10亿个UUID且持续约100年,产生一个重复UUID的概率才达到50%。

UUID 方法的优点:

  1. 生成 ID 很简 单。服务器之间不需要任何协调,所以不会有任何同步问题
  2. 系统易于扩展,因为每个 Web 服务器只负责生成它们自己使用的 ID 。 ID 生成器可以很容易地随 Web 服务器一起扩展。

缺点:

  1. ID 长 128 位,但是我们要求的是 64 位。
  2. ID 并不随时 间增加。
  3. ID 可能是 非数字的。

工单服务器

这个方法的思想是利用中心化的单数据库服务器的自增特性

图7-4

工单服务器方法的优点是:

缺点:存在单点故障,为了避免单点故障,可以设置多个工单服务器,但又会引入新的挑战 如 数据同步问题。

推特的雪花算法

推特的唯一ID生成系统叫 Snowflake

把ID分成不同的部分,组成一个唯一ID

图7-5