不能错过的分布式ID生成器(Leaf-,Java面试问项目

本文介绍了美团的Leaf分布式ID生成器,它结合了号段模式和Snowflake算法,适用于不同的业务场景。Leaf通过号段模式降低数据库操作频率,采用预加载策略减少因DB延迟带来的风险。文章详细解析了Leaf的号段模式,包括号段的获取和更新策略,并探讨了其设计考虑。最后,强调了持续学习技术的重要性。
摘要由CSDN通过智能技术生成

Leaf的优势:高可靠低延迟全局唯一等特点。

目前主流的分布式ID生成方式,大致都是基于数据库号段模式雪花算法(snowflake),而美团(Leaf)刚好同时兼具了这两种方式,可以根据不同业务场景灵活切换。

接下来结合实战,详细的介绍一下LeafLeaf-segment号段模式Leaf-snowflake模式

一、 Leaf-segment号段模式

Leaf-segment号段模式是对直接用数据库自增ID充当分布式ID的一种优化,减少对数据库的频率操作。相当于从数据库批量的获取自增ID,每次从数据库取出一个号段范围,例如 (1,1000] 代表1000个ID,业务服务将号段在本地生成1~1000的自增ID并加载到内存.。

大致的流程入下图所示:

号段耗尽之后再去数据库获取新的号段,可以大大的减轻数据库的压力。对max_id字段做一次update操作,update max_id= max_id + step,update成功则说明新号段获取成功,新的号段范围是(max_id ,max_id +step]。

由于依赖数据库,我们先设计一下表结构:

CREATE TABLE `leaf_alloc` ( 
`biz_tag` varchar(128) NOT NULL DEFAULT '' COMMENT '业务key', 
 `max_id` bigint(20) NOT NULL DEFAULT '1' COMMENT '当前已经分配了的最大id',
  `step` int(11) NOT NULL COMMENT '初始步长,也是动态调整的最小步长',  
`description` varchar(256) DEFAULT NULL COMMENT '业务key的描述',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE C
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值