分布式ID生成算法——leaf算法
leaf是美团在雪花算法的基础上提出的一种分布式ID生成算法,它具有全局唯一、高可用、高并发、低延迟、接入简单(http或公司内rpc)的优点。
Twitter:世界上不存在两片一样的雪花。
美团:世界上不存在两片一样的树叶。
╮(╯_╰)╭
leaf算法一共有两种分布式ID生成模式,分别是号段模式、雪花ID模式。这也是目前主流的两种生成分布式ID的方式。
leaf算法——号段模式
号段模式下,ID从低位增长,较少的号段浪费,能够容忍MySQL短时不可用。leaf的号段模式也不断的在优化,一共经历了预分发号段、双Buffer优化、动态步长三个阶段。
- 预分发号段
采用预分发方式生成ID,一个DB上挂N个server。每个server启动时,从DB取固定长度的ID list,数据库只持久化一批ID中最大的一个。用户通过轮训方式调用各个leaf server的服务,因此一个client获取到的ID序列可能是1,1001,1002,2…。某个server的号段用完后,下一次请求就会从DB加载新的号段,保证每次加载的号段是递增的。但是如果更新DB号段时,DB宕机或者发生主从切换,会导致一段时间的服务不可用;且系统的最大耗时取决于更新DB号段的时间。
- 双buffer优化
为了解决上面问题,leaf采用异步更新。一个server分为两个buffer,并轮流对外提供服务。双buffe优化可以保证无论何时DB出现问题,都有一个buffer可以正常向外提供服务。只要DB在一个buffer的下发周期内恢复,就不会影响整个leaf的可用性。但是,在这个版本中号段长度是固定的,如果本来leaf在DB不可用的情况下能够支持10min,若流量增加10倍就只能支持1min。
- 动态步长
根据上一次的更新周期T和号段长度step来决定这一次更新的号段长度,T<15分钟则step=step*2,15<T<30,step不变,t>30则step=step/2。
至此,满足了号段消耗稳定趋于某个时间区间的需求。当然,面对瞬时流量几十、几百倍的暴增,该种方案仍不能满足可以容忍数据库在一段时间不可用、系统仍能稳定运行的需求。因为本质上来讲,Leaf虽然在DB层做了些容错方案,但是号段方式的ID下发,最终还是强依赖DB的。
leaf算法——雪花ID模式
雪花ID模式和雪花算法大差不差,详细的可以看链接中的雪花ID。
此外,Leaf提供了Java版本的实现,同时对Zookeeper生成机器号做了弱依赖处理,即使Zookeeper有问题,也不会影响服务。Leaf在第一次从Zookeeper拿取workerID后,会在本机文件系统上缓存一个workerID文件。即使ZooKeeper出现问题,同时恰好机器也在重启,也能保证服务的正常运行,做到了对第三方组件的弱依赖。
相关链接:
☞美团技术团队对于leaf算法的介绍
☞分布式ID生成算法——雪花算法
分布式ID生成算法——leaf算法相关推荐
- 分布式 ID 生成系统 Leaf 的设计思路,源码解读
什么是分布式ID? ID 最大的特点是 唯一 而分布式 ID,就是指分布式系统下的 ID,它是 全局唯一 的. 为啥需要分布式ID呢? 这就和 唯一 息息相关了. 比如我们用 MySQL 存储数据,一 ...
- 美团开源分布式ID生成系统——Leaf源码阅读笔记(Leaf的号段模式)
Leaf 最早期需求是各个业务线的订单ID生成需求.在美团早期,有的业务直接通过DB自增的方式生成ID,有的业务通过redis缓存来生成ID,也有的业务直接用UUID这种方式来生成ID.以上的方式各自 ...
- 分布式ID生成方案(二):SnowFlake雪花算法
雪花算法(SnowFlake) 是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器. SnowFlake算法生成id ...
- 美团技术分享:深度解密美团的分布式ID生成算法
本文来自美团技术团队"照东"的分享,原题<Leaf--美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息I ...
- 常见分布式ID生成方案
文章目录 一.为什么要用分布式ID 1.什么是分布式ID 2.那么分布式ID需要满足哪些条件 二. 分布式ID有哪些生成方式 1.基于UUID 2.基于数据库自增ID 3.基于数据库集群模式 4.基于 ...
- 图解各路分布式ID生成算法
在分布式系统中,通常会用到分布式ID来标注数据的唯一性,而分布式ID的生成方式又多种多样,今天我们就来讨论一下主流的分布式ID生成策略. 分布式ID基本需求 全局唯一 趋势递增 信息安全 全局唯一 这 ...
- 雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论
文章目录 一.前言 二.雪花算法snowflake 1.基本定义 2.snowflake的优缺点 三.Java代码实现snowflake 1.组装生成id 2.计算最大值的几种方式 3.反解析ID 4 ...
- 理解分布式id生成算法--雪花算法(SnowFlake)
分布式ID生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 注: 1B就是1个字节. Byte.KB.B.MB.GB之间的关系是: Bit--比特 : B --字节:KB-- ...
- python雪花算法生成id_理解分布式id生成算法SnowFlake
分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 概述 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位 ...
最新文章
- 机器学习理论与实战(十四)概率图模型02
- mysql eval,mysql中是否有类似于eval的写法的,答案在这里
- 给echarts添加筛选时间控件时,控件不显示,并设置数据库无数据时echarts模块显示暂无数据
- django 1.8 官方文档翻译: 3-4-2 内建显示视图
- Mongodb查询分析器解析
- STM32 TIMER DIAGRAM
- 【clickhouse】clickhouse 表引擎 之 SummIngMergeTree
- Java Web ServletResponse
- 改bug过程中的新发现,重新认识String trim方法
- 122 Python程序中的进程池和线程池
- 在.net中使用鼠标手势的讲述
- 象棋游戏显示服务器断开,天天象棋黑屏闪退怎么办 游戏玩不了解决方法
- 附合导线坐标计算例题_闭合附合导线计算(建筑工程测量课本习题)
- 小米笔记本重装系统BOOT启动菜单识别不了硬盘无法启动进入系统
- 传RIM将黑莓BBM效力推行至Android和iOS
- ones刻录软件怎么用
- LimeSDR外壳安装及基本测试
- 基于Go语言Iris+Xorm的OA办公系统
- 宽容那些与我们不同的人
- 19、弱电工程综合布线报价多少钱一个点位?弱电入门学习