Leaf:美团分布式 ID 生成服务

Tags
webserver
Created
Apr 18, 2019 2:49 AM
全局唯一性
确保每个ID在整个系统中都是独一无二的
每笔订单都有一个全局唯一的订单号,确保从美国到亚洲的每笔交易都能被准确识别和处理
可用性
高并发请求ID时,系统能够快速响应,不会出现瓶颈或崩溃
在年度大促销期间,系统能够处理数百万用户同时抢购限量商品,每个用户的订单请求都能迅速获得唯一的订单号
可扩展性
系统随业务需要进行扩展,依旧能高速生成不发生冲突的ID
随着电商平台进入新市场和新增用户,订单号生成系统能够通过增加资源和优化分布策略来适应不断增长的需求
时序控制
(非必须)生成的ID可以体现时间顺序,便于排序和索引
订单号中包含时间信息,帮助物流系统优化包裹的配送顺序,确保最早下单的顾客最先收到商品
安全性
ID避免泄露敏感信息,且难以被预测和复制
防止恶意用户通过推测订单号来获取或篡改他人订单信息

雪花算法(Snowflake)是Twitter开发的一种用于生成分布式唯一ID的算法

https://tech.meituan.com/2019/03/07/open-source-project-leaf.html

Leaf第一个版本采用了预分发的方式生成 ID,即可以在 DB 之上挂N个Server,每个Server启动时,都会去DB拿固定长度的ID List。这样就做到了完全基于分布式的架构,同时因为ID是由内存分发,所以也可以做到很高效。接下来是数据持久化问题,Leaf每次去DB拿固定长度的ID List,然后把最大的ID持久化下来,也就是并非每个ID都做持久化,仅仅持久化一批ID中最大的那一个。这个方式有点像游戏里的定期存档功能,只不过存档的是未来某个时间下发给用户的ID,这样极大地减轻了DB持久化的压力。

通过双Buffer的方式,保证无论何时DB出现问题,都能有一个Buffer的号段可以正常对外提供服务

动态调整 Step 以便号段更新周期固定

SuperMade with Super