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算法相关推荐

  1. 分布式 ID 生成系统 Leaf 的设计思路,源码解读

    什么是分布式ID? ID 最大的特点是 唯一 而分布式 ID,就是指分布式系统下的 ID,它是 全局唯一 的. 为啥需要分布式ID呢? 这就和 唯一 息息相关了. 比如我们用 MySQL 存储数据,一 ...

  2. 美团开源分布式ID生成系统——Leaf源码阅读笔记(Leaf的号段模式)

    Leaf 最早期需求是各个业务线的订单ID生成需求.在美团早期,有的业务直接通过DB自增的方式生成ID,有的业务通过redis缓存来生成ID,也有的业务直接用UUID这种方式来生成ID.以上的方式各自 ...

  3. 分布式ID生成方案(二):SnowFlake雪花算法

    雪花算法(SnowFlake) 是twitter公司内部分布式项目采用的ID生成算法,开源后广受国内大厂的好评,在该算法影响下各大公司相继开发出各具特色的分布式生成器. SnowFlake算法生成id ...

  4. 美团技术分享:深度解密美团的分布式ID生成算法

    本文来自美团技术团队"照东"的分享,原题<Leaf--美团点评分布式ID生成系统>,收录时有勘误.修订并重新排版,感谢原作者的分享. 1.引言 鉴于IM系统中聊天消息I ...

  5. 常见分布式ID生成方案

    文章目录 一.为什么要用分布式ID 1.什么是分布式ID 2.那么分布式ID需要满足哪些条件 二. 分布式ID有哪些生成方式 1.基于UUID 2.基于数据库自增ID 3.基于数据库集群模式 4.基于 ...

  6. 图解各路分布式ID生成算法

    在分布式系统中,通常会用到分布式ID来标注数据的唯一性,而分布式ID的生成方式又多种多样,今天我们就来讨论一下主流的分布式ID生成策略. 分布式ID基本需求 全局唯一 趋势递增 信息安全 全局唯一 这 ...

  7. 雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

    文章目录 一.前言 二.雪花算法snowflake 1.基本定义 2.snowflake的优缺点 三.Java代码实现snowflake 1.组装生成id 2.计算最大值的几种方式 3.反解析ID 4 ...

  8. 理解分布式id生成算法--雪花算法(SnowFlake)

    分布式ID生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 注: 1B就是1个字节. Byte.KB.B.MB.GB之间的关系是: Bit--比特 : B --字节:KB-- ...

  9. python雪花算法生成id_理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. 概述 SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位 ...

最新文章

  1. 机器学习理论与实战(十四)概率图模型02
  2. mysql eval,mysql中是否有类似于eval的写法的,答案在这里
  3. 给echarts添加筛选时间控件时,控件不显示,并设置数据库无数据时echarts模块显示暂无数据
  4. django 1.8 官方文档翻译: 3-4-2 内建显示视图
  5. Mongodb查询分析器解析
  6. STM32 TIMER DIAGRAM
  7. 【clickhouse】clickhouse 表引擎 之 SummIngMergeTree
  8. Java Web ServletResponse
  9. 改bug过程中的新发现,重新认识String trim方法
  10. 122 Python程序中的进程池和线程池
  11. 在.net中使用鼠标手势的讲述
  12. 象棋游戏显示服务器断开,天天象棋黑屏闪退怎么办 游戏玩不了解决方法
  13. 附合导线坐标计算例题_闭合附合导线计算(建筑工程测量课本习题)
  14. 小米笔记本重装系统BOOT启动菜单识别不了硬盘无法启动进入系统
  15. 传RIM将黑莓BBM效力推行至Android和iOS
  16. ones刻录软件怎么用
  17. LimeSDR外壳安装及基本测试
  18. 基于Go语言Iris+Xorm的OA办公系统
  19. 宽容那些与我们不同的人
  20. 19、弱电工程综合布线报价多少钱一个点位?弱电入门学习

热门文章

  1. WEB前端课程设计——田径队管理系统
  2. 100+个图像数据集
  3. Visual Studio Code安装中文插件
  4. Axure如何制作文字的链接
  5. python 小说 云_用python实现自己的小说阅读器
  6. 给WinXP和Vista增加启动专杀功能
  7. 2023年全国最新安全员精选真题及答案50
  8. 黑龙江测绘局---职工取暖补贴报销暂行办法
  9. java实现QQ互联登录
  10. Baumer工业相机堡盟相机彩色相机如何实现白平衡