[分布式id]:Leaf——美团点评分布式ID生成系统
文章目录
- 摘要
- 1 分布式id相关概念
- 1.1 为什么需要分布式id
- 1.1.1 BTree
- 1.1.2 B+Tree
- 1.1.3 B+Tree相比于BTree优势
- 1.2 什么是分布式id
- 1.3 常见分布式id生成策略
- 1.3.1 基于数据库自增id
- 1.3.2 基于UUID
- 1.3.3 Twitter的Snowflake算法
- 1.3.4 美团的Leaf-segment算法
- 1.3.5 ZooKeeper发号器
- 1.3.6 Redisson分布式锁
- 2 Leaf-segment 算法(美团——Leaf)
- 2.1 Leaf-segment算法是什么?
- 2.2 为什么需要 Leaf-segment算法
- 2.3 Leaf-segment算法解决的问题
- 2.4 Leaf-segment算法架构图
- 2.5 美团——Leaf(基于docker)
- 2.6 Leaf-segment算法入门
摘要
摘要:分布式id;全局唯一性;Leaf-segment 算法;美团——Leaf;BTree;B+Tree
1 分布式id相关概念
1.1 为什么需要分布式id
为什么需要分布式id?
- ①
全局唯一性问题
:在分布式环境中,存在多节点共同完成一个功能,这些节点会被放在不同物理机上,每个节点都运行一个或多个进程,当某一时刻出现,多个进程同时请求生成id情况,会出现id重复问题。- ②
性能问题
:解决全局唯一性问题关键,就是让id唯一,然而,在分布式系统中,每个节点都需要单独维护自己id,这时候有两种解决方案,第一种,全局使用序列号生成器生成id
(虽然可以保证全局唯一性),但若只有一个节点运行,那么序列号生成器势必会成为性能瓶颈;第二种,使用分布式id思想,让多个节点在同一id空间内生成唯一id,且id唯一,从而保证整个系统的正确与可靠。- ③
趋势递增
:在MySQL InnoDB引擎中使用聚集索引,由于多数RDBMS使用B-tree的数据结构(每个节点都会索引节点和数据节点)存储索引数据,因此,在主键选择上应当选择有序(B-tree是有顺序的,Tree是有顺序的
)主键保证写入性能。- ④
单调递增
:保证下一个id > 上一个id,例如:事务版本号(乐观锁)、排序等特殊要求。- ⑤
信息安全
:若id连续,会造成恶意用户爬取数据工作简单,例如:按照指定URL顺序下载网站数据;若id为订单号,则竞对只需间隔一天时间下单,便可知道平台一天单量,因而,在特定场景下,需要id无规则。
1.1.1 BTree
针对数据节点:
- 在BTree中,每个节点即可是索引节点又可是数据节点,即索引节点与数据节点是一体,节点既存索引,又存储数据。
针对索引节点:
- 在BTree中,索引节点中存储的是索引关键字和指向子节点的指针,每个节点存储的子节点数是固定的,且与键值的个数相同。
1.1.2 B+Tree
针对数据节点:
- 只有叶子节点存储数据,且同一层叶子节点间形成一个有序链表,便于区间查找,而非叶子节点只存储索引关键字和指向孩子节点的指针,不存储数据。
针对索引节点:
- 索引节点中存储的是索引关键字和指向子节点的指针,每个节点可以存储多个子节点的索引关键字和指针,这样可以减少索引节点的数量,提高树的高度和查询效率。
1.1.3 B+Tree相比于BTree优势
- 基于上述对于B+Tree和BTree的论述,B+Tree有更好的磁盘读写性能、更快的查询速度和更高的查询效率,在MySQL和Oracle中都采用B+Tree索引结构优化查询效率。
1.2 什么是分布式id
分布式id:指在分布式环境下,为保证
id全局唯一性
而设计的一种分布式id生成方式。
- 全局唯一:不同机器在不同时间生成id必须唯一,确保整个分布式系统内id唯一性。
- 有序递增:生成id需要具有有序性,便于排序和查询,也方便数据库索引,提高效率。
1.3 常见分布式id生成策略
1.3.1 基于数据库自增id
基于数据库自增id:使用数据库自增id主键生成全局唯一id,适用于单机场景和数据量较小的分布式场景。
1.3.2 基于UUID
基于UUID:使用UUID生成全局唯一id,这种方法适用于分布式环境,但是,有以下缺点
- ① UUID生成id较长,占用存储空间较大,索引不够高效。
1.3.3 Twitter的Snowflake算法
Snowflake算法:Twitter开发的算法,使用64位二进制生成全局唯一id,该算法的核心是将64位的整数分成多个区域,分别代表时间戳、机器id、序列号等信息,具体用位运算实现,在保证全局唯一性同时,保证id的排序和高效索引。
1.3.4 美团的Leaf-segment算法
Leaf-segment算法:美团开发的算法,使用一个一个数据库记录保存当前的id区间,然后将id的生成请求发送给多个服务节点,每个服务节点拿到id区间后,可以在本地生成一定量的id,然后以缓存的方式使用,使用该算法将高并发下的单点性能问题分散到多个节点,通过id生成效率。
1.3.5 ZooKeeper发号器
ZooKeeper发号器:使用ZooKeeper实现分布式锁,使得在多个服务节点同时生成id时,只有一个节点可以进行生成,确保id的唯一性。(但是会造成线程阻塞,影响性能)
1.3.6 Redisson分布式锁
Redisson分布式锁:使用Redisson实现分布式锁,使得在多个服务节点同时生成id时,只有一个节点可以进行生成,确保id唯一性。(但是会造成线程阻塞,影响性能;依赖其他库,为我们带来许多额外工作量)
2 Leaf-segment 算法(美团——Leaf)
2.1 Leaf-segment算法是什么?
2.2 为什么需要 Leaf-segment算法
2.3 Leaf-segment算法解决的问题
2.4 Leaf-segment算法架构图
2.5 美团——Leaf(基于docker)
2.6 Leaf-segment算法入门
[分布式id]:Leaf——美团点评分布式ID生成系统相关推荐
- 【阅读】Leaf——美团点评分布式ID生成系统
文章目录 背景 常见实现方案 UUID 优势 缺点 应用 类SnowFlake方案 优点 缺点 应用 数据库生成 优点 缺点 MySQL 增强版 优点 缺点 Leaf -segment方案 优点 缺点 ...
- Leaf——美团点评分布式ID生成系统
背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数 ...
- 基于.NET Standard的分布式自增ID算法--美团点评LeafSegment
概述 前一篇文章讲述了最流行的分布式ID生成算法snowflake,本篇文章根据美团点评分布式ID生成系统文章,介绍另一种相对更容易理解和编写的分布式ID生成方式. 实现原理 Leaf这个名字是来自德 ...
- 带你了解「美团、百度和滴滴」的分布式 ID 生成系统
文章目录 美团 背景 常见方法介绍 UUID 类snowflake方案 数据库生成 Leaf 方案实现 Leaf-segment 数据库方案 双 buffer 优化 Leaf 高可用容灾 Leaf-s ...
- 美团技术分享:深度解密美团的分布式ID生成算法
本文来自美团技术团队"照东"的分享,原题<Leaf--美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息I ...
- 分布式「唯一ID生成器」的几种生成方案
前言 在互联网的业务系统中,涉及到各种各样的ID,如在支付系统中就会有支付ID.退款ID等.那一般生成ID都有哪些解决方案呢?特别是在复杂的分布式系统业务场景中,我们应该采用哪种适合自己的解决方案是十 ...
- 在 .NET6.0 中实现 Leaf-segment 分布式 ID 生成系统
背景 分布式 ID (Distributed ID)是指在分布式系统中,为了保证全局唯一性而生成的一类 ID.在分布式系统中,由于存在多个节点同时生成 ID 的情况,因此需要采用一定的算法来保证生成的 ...
- MTDDL——美团点评分布式数据访问层中间件
https://tech.meituan.com/mtddl.html 背景 2016年Q3季度初,在美团外卖上单2.0项目上线后,商家和商品数量急速增长,预估商品库的容量和写峰值QPS会很快遇到巨大 ...
- 美团点评容器平台HULK的调度系统
本文是美团点评基础架构系列文章之一.这个系列将全面介绍支撑数亿用户.超千万日订单的美团点评平台诸多业务的公共基础架构相关技术.系列已经发布的文章包括: - <分布式会话跟踪系统架构设计与实践&g ...
最新文章
- 概率图模型PGM——D map, I map, perfect map
- 如何解决Android 5.0中出现的警告:Service Intent must be explicit
- Docker 修改运行中的容器端口映射
- 查询所有的存储过程哪些中包含某个字符串
- php use include区别,php use和include区别总结
- android 多个复选框,Android UI控件之CheckBox(复选框、多选框)
- 【Java】如何较好地将int转化成String
- 不写程序,整体就泡 土豆网电视剧
- Java-使用反射获取类型信息
- VMware虚拟机安装RHEL6.5系统
- 华为交换机虚拟局域网(VLAN)的配置
- 广义线性模型解读必看文章
- 工业交换机的管理方式有哪些?
- 启动Nginx时报错:error while loading shared libraries: librdkafka.so.1: cannot open shared object file: No
- 关于web项目播放AMR格式音频的问题
- 靴子落地,火山引擎官宣进军云市场
- Set是如何不能加入重复值
- 最新千锋3G学院Android游戏开发教程之数独游戏
- 考研英语 - word-list-46
- Flutter 底部弹窗详解
热门文章
- [Verilog学习笔记] always@(*)语句是什么意思
- matlab 密度热力图,使用matplotlib绘制热力图
- postgre+timescaledb笔记
- 年货都买些什么?年货清单列表用便签记下来
- Redis详解(六)渐进式rehash机制
- ROS学习:URDF语法详解一link篇
- Java模拟一个简单的双向链表
- [状压DP][BFS][哈希]JZOJ 3243 Cube
- 儿童节,却有超过6000万的儿童无人陪伴
- VC++函数ATOM MyregisterClass(HINSTANCE hInstance)