原文:https://www.toutiao.com/i6761360621301662222
开篇
做过分布式项目的同学都知道,大型互联网项目的ID要保证全局唯一,一般不在用数据库自带的id自增了,一般都会用分布式id生成器。之前分享过一篇文章是介绍滴滴、美团、还有百度的ID生成器的,今天来实战调试一下美团的ID生成器Leaf。实战调试,如果觉得有用,关注、转发、收藏吧!
核心调试
1、把开源的leaf导入,美团开源的分布式IDgithub地址是https://github.com/Meituan-Dianping/Leaf,直接用idea导入。项目分为核心模块和一个spring boot的demo。
2、注意这里有坑,项目可能会报错:如果你用的是高版本的mysql,注意修改mysql驱动,和druid的相关版本的jar包,改成高版本的。默认是5.1.38的mysql驱动。可以修改成高版本的。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.17</version>
</dependency>
3、创建数据库,并修改配置文件如下:
CREATE DATABASE leaf
CREATE TABLE `leaf_alloc` (
`biz_tag` varchar(128) NOT NULL DEFAULT '', -- your biz unique name
`max_id` bigint(20) NOT NULL DEFAULT '1',
`step` int(11) NOT NULL,
`description` varchar(256) DEFAULT NULL,
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`biz_tag`)
) ENGINE=InnoDB;
insert into leaf_alloc(biz_tag, max_id, step, description) values('leaf-segment-test', 1, 2000, 'Test leaf Segment Mode Get Id')
4、启动项目,此时你就可以用其他项目调用该项目获得分布式id了。当然,这里的业务只是测试,如果真实项目中使用,还是要到开源地址仔细看看。
5、调用测试,注意这里的业务ID和你在mysql中插入的一致,当然可以插入多个
6、此外你还可以查看缓存。如下图:
Leaf 最早期需求是各个业务线的订单ID生成需求。在美团早期,有的业务直接通过DB自增的方式生成ID,有的业务通过redis缓存来生成ID,也有的业务直接用UUID这种方式来生成ID。以上的方式各自有各自的问题,因此我们决定实现一套分布式ID生成服务来满足需求。目前Leaf覆盖了美团点评公司内部金融、餐饮、外卖、酒店旅游、猫眼电影等众多业务线。在4C8G VM基础上,通过公司RPC方式调用,QPS压测结果近5w/s,TP999 1ms。就问你值不值得收藏!觉得有用就给个关注吧。
注意:本文归作者所有,未经作者允许,不得转载