什么是分布式ID?

ID 最大的特点是 唯一

而分布式 ID,就是指分布式系统下的 ID,它是 全局唯一 的。

为啥需要分布式ID呢?

这就和 唯一 息息相关了。

比如我们用 MySQL 存储数据,一开始数据量不大,但是业务经过一段时间的发展,单表数据每日剧增,最终突破 1000w,2000w …… 系统开始变慢了,此时我们已经尝试了 优化索引读写分离升级硬件升级网络 等操作,但是 单表瓶颈 还是来了,我们只能去 分库分表 了。

而问题也随着而来了,分库分表后,如果还用 数据库自增ID 的方式的话,那么在用户表中,就会出现 两个不同的用户有相同的ID 的情况,这个是不能接受的。

分布式ID全局唯一 的特点,正是我们所需要的。

分布式ID的生成方式

  • UUID
  • 数据库自增ID (MySQL,Redis)
  • 雪花算法

基本就上面几种了,UUID 的最大缺点就是太长,36个字符长度,而且无序,不适合。

而其他两种的缺点还有办法补救,可能这也是 Leaf 提供这两种生成 ID 方式的原因。

项目简介

Leaf ,分布式 ID 生成系统,有两种生成 ID 的方式:

  1. 号段模式
  2. Snowflake模式

号段模式

数据库自增ID 的基础上进行优化

  1. 增加一个 segement ,减少访问数据库的次数。
  2. 双 Buffer 优化,提前缓存下一个 Segement,降低网络请求的耗时(降低系统的TP999指标)

biz_tag用来区分业务,max_id表示该biz_tag目前所被分配的ID号段的最大值,step表示每次分配的号段长度

没优化前,每次都从 db 获取,现在获取的频率和 step 字段相关。

双 Buffer 优化思路

分布式 ID 生成系统 Leaf 的设计思路,源码解读相关推荐

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

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

  2. 在 .NET6.0 中实现 Leaf-segment 分布式 ID 生成系统

    背景 分布式 ID (Distributed ID)是指在分布式系统中,为了保证全局唯一性而生成的一类 ID.在分布式系统中,由于存在多个节点同时生成 ID 的情况,因此需要采用一定的算法来保证生成的 ...

  3. 滴滴开源的分布式id生成系统

    ID Generator id生成器 分布式id生成系统,简单易用.高性能.高可用的id生成系统 简介 Tinyid是用Java开发的一款分布式id生成系统,基于数据库号段算法实现,关于这个算法可以参 ...

  4. 带你了解「美团、百度和滴滴」的分布式 ID 生成系统

    文章目录 美团 背景 常见方法介绍 UUID 类snowflake方案 数据库生成 Leaf 方案实现 Leaf-segment 数据库方案 双 buffer 优化 Leaf 高可用容灾 Leaf-s ...

  5. Leaf-美团分布式id生成系统

    概述 分布式id生成已经有业界较为成熟的方案.现在公司使用的是美团的Leaf的号码段模式.之所以不用雪花算法模式还是因为雪花算法的自身缺陷,即时间回拨问题.本文就从源码角度剖析leaf项目的两种id生 ...

  6. Java生鲜电商平台-促销系统的架构设计与源码解析

    Java生鲜电商平台-促销系统的架构设计与源码解析 说明:本文重点讲解现在流行的促销方案以及源码解析,让大家对促销,纳新有一个深入的了解与学习过程. 促销系统是电商系统另外一个比较大,也是比较复杂的系 ...

  7. Java生鲜电商平台-电商会员体系系统的架构设计与源码解析

    Java生鲜电商平台-电商会员体系系统的架构设计与源码解析 说明:Java生鲜电商平台中会员体系作为电商平台的基础设施,重要性不容忽视.我去年整理过生鲜电商中的会员系统,但是比较粗,现在做一个最好的整 ...

  8. 【阅读】Leaf——美团点评分布式ID生成系统

    文章目录 背景 常见实现方案 UUID 优势 缺点 应用 类SnowFlake方案 优点 缺点 应用 数据库生成 优点 缺点 MySQL 增强版 优点 缺点 Leaf -segment方案 优点 缺点 ...

  9. Leaf——美团点评分布式ID生成系统

    背景 在复杂分布式系统中,往往需要对大量的数据和消息进行唯一标识.如在美团点评的金融.支付.餐饮.酒店.猫眼电影等产品的系统中,数据日渐增长,对数据分库分表后需要有一个唯一ID来标识一条数据或消息,数 ...

最新文章

  1. 【OpenCV 4开发详解】图像修复
  2. VirtualBox 安装Centos 之访问虚拟机里面的服务受阻解决方案
  3. Handler消息机制(十):HandlerThread源码解析
  4. http 直接显示目录下文件_Linux文件管理(下)
  5. php环境informix,在Nginx + php-fpm(fastcgi)环境下配置informix的连接
  6. halcon裁剪图像_Halcon学习之七:改变图像的现实方式和大小
  7. (转帖)無號數及有號數的乘加運算電路設計(Verilog)
  8. python数据处理太慢_使用Python将数据写入LMDB非常慢
  9. 高斯公式积分matlab,数值分析 高斯—勒让德积分公式
  10. FPGA电梯控制系统
  11. 图形化开发(五)011-Three.js之Geometry几何体——立方体、圆形、圆锥
  12. 第四周问题:Tu Hao's Problem
  13. 矩阵最简行阶梯型计算器_商人懂技术,谁也挡不住——首位将机械计算器推向全世界的人...
  14. WEB-QTP随想录—李密的猜想
  15. 水溶性量子点CdSe/ZnS
  16. 为什么单线程的Redis如此的快(Why is single-threaded Redis so fast)
  17. 《全基因组测序WGS数据分析——1.DNA测序技术》学习笔记
  18. 域名防劫持 稳定快速。
  19. 互联网晚报 | 4月21日 星期四 | A股三大指数集体跌超2%;以岭药业已成功注册多个连花商标;天津市房协召集多家房企开会...
  20. Python中用于判断两个集合的交集是否为空集isdisjoint()方法

热门文章

  1. Labview发布web service时出现错误 Error LabVIEW: (Hex 0xFFFEFA29)
  2. 谈windows开发学习过程
  3. vscode设置获得管理员权限
  4. win10 | Cortana搜索显示空白 | 最简单解决方法 | 亲测有效
  5. PointPainting
  6. Arduino学习笔记—Arduino编程基础
  7. tableau desktop(三)--构建数据视图(一)
  8. 关于hexo博客valine评论遭到恶意数据刷入紧急防御及快速解决办法
  9. java String 最长长度和占用内存大小
  10. C语言实现生成二维码的单色位图