9种分布式ID生成之 美团(Leaf)实战 (3)

启动Leaf-snowflake模式也比较简单,起动本地ZooKeeper,修改一下项目中的leaf.properties文件,关闭leaf.segment模式,启用leaf.snowflake模式即可。

leaf.segment.enable=false #leaf.jdbc.url=jdbc:mysql://127.0.0.1:3306/xin-master?useUnicode=true&characterEncoding=utf8 #leaf.jdbc.username=junkang #leaf.jdbc.password=junkang leaf.snowflake.enable=true leaf.snowflake.zk.address=127.0.0.1 leaf.snowflake.port=2181 /** * 雪花算法模式 * @param key * @return */ @RequestMapping(value = "/api/snowflake/get/{key}") public String getSnowflakeId(@PathVariable("key") String key) { return get(key, snowflakeService.getId(key)); }

测试一下,访问::8080/api/snowflake/get/leaf-segment-test

在这里插入图片描述


优点:

ID号码是趋势递增的8byte的64位数字,满足上述数据库存储的主键要求。

缺点:

依赖ZooKeeper,存在服务不可用风险(实在不知道有啥缺点了)

三、Leaf监控

请求地址::8080/cache

针对服务自身的监控,Leaf提供了Web层的内存数据映射界面,可以实时看到所有号段的下发状态。比如每个号段双buffer的使用情况,当前ID下发到了哪个位置等信息都可以在Web界面上查看。

在这里插入图片描述

总结

对于Leaf具体使用哪种模式,还是根据具体的业务场景使用,本文并没有对Leaf源码做过多的分析,因为Leaf 代码量简洁很好阅读。后续还会把其他几种分布式ID生成器,依次结合实战介绍给大家,欢迎大家关注。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwpds.html