分布式ID生成方案

UUID

  • UUID由本地生成,没有网络消耗,但它太长,而且是无序的,现阶段主流数据库主键索引都是采用的B+树索引,无序而且过长的UUID不适合作为主键。

数据库自增ID

  • 通过 auto_increment_offset 设置起始值,auto_increment_increment 设置自增步长,以此来生成自增的ID,优点是用现有的数据库系统来实现,成本小,实现简单;缺点是业务系统每次需要一个ID时,都要请求数据库,性能较低,而且由于强依赖于数据库,那么数据库发生异常将会影响很多业务系统。

数据库多主模式

  • 指的是两个或多个主库都能单独生产自增ID,给他们配置不同的起始值和自增步长,比如有两个主库的话,一个设置起始值为1,步长为2,一个设置起始值为2,步长为2,这样他们的自增id分别为奇数和偶数,不会重复,即使某一个主库挂掉了,也不会影响另外一个主库来生成id。缺点是扩展性不好,比如想再添加一个主库来提高性能的话,那么之前主库的自增规则都需要修改,避免和新主库产生的id重复。

雪花算法

分布式ID生成方案