分布式ID生成框架Leaf

Leaf是美团开源的分布式ID生成服务,支持号段模式雪花算法模式,具有高可靠、低延迟、全局唯一等特点。以下是Leaf的详细介绍及使用示例。


1. Leaf的核心特性

  • 全局唯一性:生成的ID在分布式系统中全局唯一,避免冲突。
  • 高可用性:支持双Buffer机制,即使数据库宕机,也能保证服务正常运行。
  • 低延迟:在高并发场景下,QPS可达5W+,TP99在1ms内。
  • 灵活切换:支持号段模式和雪花算法模式,可根据业务需求灵活选择。

2. Leaf的两种模式

2.1 号段模式(Segment Mode)
  • 原理:从数据库批量获取ID号段,缓存在内存中,减少对数据库的频繁访问。
  • 优点
    • 减少数据库压力,适合高并发场景。
    • 支持动态调整号段长度,适应流量变化。
  • 缺点
    • ID不够随机,可能泄露发号数量信息。
    • 依赖数据库,数据库宕机会影响服务。
使用步骤
  1. 创建数据库表
    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 '描述',
      `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
      PRIMARY KEY (`biz_tag`)
    ) ENGINE=InnoDB;
    
  2. 配置Leaf
    leaf.properties中配置数据库信息:
    leaf.segment.enable=true
    leaf.jdbc.url=jdbc:mysql://localhost:3306/leaf?useUnicode=true&characterEncoding=utf8
    leaf.jdbc.username=root
    leaf.jdbc.password=123456
    
  3. 启动Leaf服务
    访问http://localhost:8080/api/segment/get/{biz_tag}获取ID。

2.2 雪花算法模式(Snowflake Mode)
  • 原理:基于Twitter的Snowflake算法,生成64位的ID,包含时间戳、机器ID和序列号。
  • 优点
    • 完全分布式,不依赖数据库。
    • ID具有时间顺序,适合排序场景。
  • 缺点
    • 依赖Zookeeper生成机器ID,Zookeeper故障可能影响服务。
使用步骤
  1. 配置Zookeeper
    leaf.properties中配置Zookeeper信息:
    leaf.snowflake.enable=true
    leaf.snowflake.zk.address=127.0.0.1
    leaf.snowflake.port=2181
    
  2. 启动Leaf服务
    访问http://localhost:8080/api/snowflake/get/{key}获取ID。

3. Leaf的使用示例

3.1 号段模式示例
  1. 初始化数据库
    INSERT INTO `leaf_alloc` (`biz_tag`, `max_id`, `step`, `description`) 
    VALUES ('leaf-segment-test', 1, 1000, '测试号段模式');
    
  2. 启动Leaf服务
    mvn spring-boot:run
    
  3. 获取ID
    访问http://localhost:8080/api/segment/get/leaf-segment-test,返回生成的ID。
3.2 雪花算法模式示例
  1. 启动Zookeeper
    确保Zookeeper服务已启动。
  2. 启动Leaf服务
    mvn spring-boot:run
    
  3. 获取ID
    访问http://localhost:8080/api/snowflake/get/test,返回生成的ID。

4. Leaf的优化与扩展

  • 双Buffer机制:在号段模式中,Leaf采用双Buffer缓存号段,确保在高并发场景下服务的稳定性。
  • 动态调整号段长度:根据流量变化动态调整号段长度,避免频繁访问数据库。
  • 支持RPC调用:可以通过改造Leaf,支持Dubbo等RPC协议,提高ID获取性能。

5. 总结

Leaf是一款功能强大、易于使用的分布式ID生成框架,支持号段模式和雪花算法模式,适用于高并发、高可用的业务场景。通过合理的配置和优化,Leaf可以满足大多数分布式系统的ID生成需求。

如果需要更详细的配置或源码,可以参考Leaf的GitHub仓库:Leaf GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

研创通之逍遥峰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值