美团分布式 ID 框架 Leaf 介绍和使用_美团 leaf

下面一起来实践下Leaf的使用。

首先拉取 Leaf SpringBoot 封装依赖源码:

git clone -b feature/spring-boot-starter https://github.com/Meituan-Dianping/Leaf.git

cd leaf

使用 MavenLeaf 打到本地仓库中

mvn clean install -Dmaven.test.skip=true

在这里插入图片描述

打包成功后,可以创建一个 SpringBoot 项目,在 pom 中加入下面依赖:

leaf-boot-starter com.sankuai.inf.leaf 1.0.1-RELEASE com.alibaba druid mysql mysql-connector-java com.alibaba druid 1.1.6 mysql mysql-connector-java

二、Leaf-segment 方式使用

首先创建leaf使用的数据库:

CREATE DATABASE leaf

创建ID规则表:

CREATE TABLE leaf\_alloc (
biz\_tag varchar(128) NOT NULL DEFAULT ‘’,
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;

写入两个 biz_tag

insert into leaf_alloc(biz_tag, max_id, step, description) values(‘test1’, 1, 2000, ‘测试1’);
insert into leaf_alloc(biz_tag, max_id, step, description) values(‘test2’, 1, 2000, ‘测试2’);

项目中加入leaf 和数据库配置:

leaf:
name: test1
segment:
enable: true
url: jdbc:mysql://localhost:3306/leaf?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
username: root
password: root

生成ID测试:

@Slf4j
@SpringBootTest
class LeafIdApplicationTests {

@Resource
private SegmentService segmentService;

@Test
void contextLoads() {
// 生成 1000 个ID
StopWatch sw = new StopWatch();
sw.start();
for (int i = 0; i < 1000; i++) {
long id1 = segmentService.getId(“test1”).getId();
long id2 = segmentService.getId(“test2”).getId();
log.info(“id1: {}, id2: {}”, id1, id2);
}
sw.stop();
log.info(sw.prettyPrint());
}

}

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-UmTrlXDP-1712588550133)]

  • 10
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
美团的 leaf(全局唯一ID生成服务)是一种分布式ID生成算法,旨在解决分布式系统中生成全局唯一ID的需求。它的设计目标是高效、高可用、趋势递增且趋势递增性能好。 leaf算法的核心思想是将全局ID空间划分为不同的区域,每个区域内包含多个段(Segment),每个段都有一个起始值和一个结束值。每次需要生成ID时,从对应的段中取出一个ID,然后将段的当前值加上一个步长,作为下一个段的起始值。 具体来说,leaf算法的实现有以下几个关键步骤: 1. 初始化:在启动时,leaf服务会加载配置信息,并初始化每个区域内的段。每个段都有一个起始值和一个结束值,初始时起始值为0,结束值为步长(默认为10000)。 2. 生成ID:当需要生成一个新的ID时,leaf服务会根据请求中指定的区域号选择对应的区域,然后从该区域内的段中获取一个ID。获取ID的过程如下: - 如果当前段的可用ID已用尽,则需要从下一个段中获取新的起始值,并将当前段的结束值更新为新的起始值加上步长。 - 如果下一个段不存在,或者获取下一个段出现异常,则需要重新初始化该区域内的所有段。 - 返回当前段的起始值作为生成的ID。 3. 高可用性:leaf服务采用多节点部署,通过一个中心化的配置中心来协调各个节点之间的状态和配置信息。当某个节点发生故障或者需要扩容时,其他节点能够接管该节点的工作,确保服务的高可用性。 总体而言,leaf算法通过将全局ID空间划分为多个段,每个段都有一个起始值和一个结束值,通过段之间的切换来实现高效地生成全局唯一ID。它具有高可用性、趋势递增且趋势递增性能好等特点,适用于大规模分布式系统中需要生成全局唯一ID的场景。 这是对leaf算法的简要介绍。如果您对leaf算法还有其他问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值