ID 就是数据的唯一标识,在分布式系统中,我们该如何保证 ID 的唯一性呢?

什么是分布式 ID?

假设我们有多个数据库都存放了一些订单数据,如何保证这些订单的 ID 互不冲突呢?这时候就需要生成分布式 ID

分布式 ID 需要满足下面的基本要求:

  • 全局唯一
  • 高性能:分布式 ID 的生成的速度要快
  • 高可用:生成分布式 ID 的服务要保证高可用
  • 方便易用

一个好的分布式 ID 应该保证:

  • 安全:ID 中不包含敏感信息。
  • 有序递增:如果要把 ID 存放在数据库的话,ID 的有序性可以提升数据库写入速度。并且,很多时候 ,我们还很有可能会直接通过 ID 来进行排序。
  • 有具体的业务含义:生成的 ID 如果能有具体的业务含义,可以让定位问题以及开发更透明化(通过 ID 就能确定是哪个业务)。
  • 独立部署:也就是分布式系统单独有一个发号器服务,专门用来生成分布式 ID。这样就生成 ID 的服务可以和业务相关的服务解耦。不过,这样同样带来了网络调用消耗增加的问题。总的来说,如果需要用到分布式 ID 的场景比较多的话,独立部署的发号器服务还是很有必要的

实现方案

1. 数据库主键自增