Leaf的源码阅读

本文介绍了美团开源的Leaf项目,一个高可用、高性能、可伸缩的唯一ID生成器。Leaf提供了基于DB分段模型和雪花模型的ID生成方式,确保全局唯一且趋势递增。在Segment模型中,通过双段机制提高性能,避免DB访问毛刺。而在Snowflake模型中,详细解释了时间戳、工作机器位和序列号的分配逻辑,以及如何处理时钟回拨问题。此外,Leaf通过Zookeeper维护workid的唯一性,并在本地持久化备份。
摘要由CSDN通过智能技术生成

Leaf

Leaf是美团开源的一款的唯一ID生成器,具体可以参考https://github.com/Meituan-Dianping/Leaf的介绍,文档写的很好,大家一定能够明白软件背后想要解决的问题。我们还是来简单总结下唯一ID系统的目标,帮助大家更好的了解接下来的内容介绍。


系统方面

  1. 高可用。系统能保障99.999%的可用时长
  2. 高性能。支持高并发、低延迟
  3. 可伸缩。可以通过水平扩容来生成更多的ID

功能方面

  1. ID是全局唯一的
  2. ID满足趋势递增(非严格递增)
  3. ID生成能够满足不规则的需求,以防止数据安全问题的产生,比如竞争对手根据两个ID号来推算出一天的订单量

服务的启动

deploy/run.sh中可以查阅到服务的启动的main class。

MAIN_CLASS="com.sankuai.inf.leaf.server.LeafServerApplication"`

那么,我们接下来就从这个类的启动开始说起,系统全面的介绍下整个Leaf框架。

 

 

@SpringBootApplication
public class LeafServerApplication {

    public static void main(String[] args) {
                //启动spring boot服务
        SpringApplication.run(LeafServerApplication.class, args);
    }
}

Controller层对外提供了两种类型的ID的接口:

  1. 基于DB的分段模型ID生成
  2. 基于雪花模型的ID生成

@RestController
public class LeafController {
    private Logger logger = LoggerFactory.getLogger(LeafController.class);
    @Autowired
    SegmentService segmentService;
    @Autowired
    SnowflakeService snowflakeService;

    @RequestMapping(value = "/api/segment/get/{key}")
    public String getSegmentID(@PathVariable("key") String key) {
        return get(key, segmentService.getId(key));
    }

    @RequestMapping(value = "/api/snowflake/get/{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值