分布式 ID 解决方案之美团 Leaf
分布式 ID 在庞大复杂的分布式系统中,通常需要对海量数据进行唯一标识,随着数据日渐增长,对数据分库分表以后需要有一个唯一 ID 来标识一条数据,而数据库的自增 ID 显然不能满足需求,此时就需要有一个能够生成全局唯一 ID 的系统,需要满足以下条件: 全局唯一性:最基本的要求就是不能出现重复的 ID。 递增:保证下一个 ID 一定大于上一个 ID。 信息安全:如果 ID 是连续的,用户就可以按照顺序进行恶意爬取数据,所以 ID 生成无规则。 上述的 2 和 3 点需求是互斥的,无法使用同一个方案满足。 解决方案 数据库生成 以 MySQL 为例,利用给字段设置 auto_increment_increment 和 auto_increment_offset 来实现 ID 自增。每次业务可以使用下列 SQL 进行读写得到 ID: begin; REPLACE INTO Tickets64 (stub) VALUES ('a'); SELECT LAST_INSERT_ID(); commit; 优点:使用非常简单,ID 单调递增。 缺点:非常依赖数据库,当数据库异常时则整个系统不可用。 UUID 优点:本地生成,没有网络消耗,性能高。 缺点:过长不易于存储;造成信息不安全,基于 MAC 地址生成可能会造成 MAC 地址泄露。 Snowflake Snowflake (雪花算法)是由