面试官 你知道哪些散布式ID生成打算

  • 电脑网络维修
  • 2024-11-15

近两年的技术面试,散布式系列是面试官经常会问到的一个高频方向,比如:散布式事务、散布式锁、散布式调度、散布式存储、散布式ID等。

当天咱们就来聊聊,这外面相对便捷的散布式ID,首先说下,咱们为什么须要散布式ID?

当系统数据量过大,曾经启动分库分表后,咱们须要对扩散在各个库表中的数据记载启动惟一标识,而散布式ID恰恰用来处置这个疑问。

接上去,咱们看看八大散布式ID的生成打算,以及各自的优缺陷是什么。

UUID是 Universally Unique Identifier 的缩写,翻译成中文为“通用惟一识别码”,由32个16进制数字 + 4个“-”造成,全体长度为36,其可以保障惟一性,出现碰撞的概率极低。

UUID目前有5个版本,每个版本都有不同的生成方式。目前最罕用的是版本4,经过随机数的方式生成。

UUID的生成成功方式十分便捷,可以经过java.util包,一行代码即可成功。

 javautilUUID class Test { static void mainString args {Systemprintln“本次生成的UUID为”  UUIDrandomUUID}}

好处:

(1)技术成功便捷,一行代码即可。(2)本地即可生成,出错率低。(3)ID生成性能高。

缺陷:

(1)无序,影响数据库的数据写入性能。(2)存储老本高,就算去掉4个“-”,长度也是32。(3)可读性差。

2、数据库自增ID

选用一个数据库作为中央数据库,应用该库中某表的自增主键机制生成散布式ID。

对应SQL语句如下:

  id_table stub  ’a‘  LAST_INSERT_ID

该SQL语句可以使 id_table 表中在坚持一条数据记载的状况下,主键ID继续递增。

好处:

(1)干燥递增,不会影响数据库的数据写入性能。(2)可读性高。

缺陷:

(1)ID生成触及到数据库操作,性能不高。(2)须要额外引上天方数据库,链路变长造成出错概率参与。(3)开发老本相对较高。(4)数据库压力大。

3、Redis自增命令

经过Redis的INCR自增命令来生成散布式ID。

如下所示:

:  distributed_id OK: incr distributed_id 

好处:

(1)干燥递增,不会影响数据库的数据写入性能。(2)ID生成性能高。(3)可读性高。

缺陷:

(1)须要额外引入Redis,链路变长造成出错概率参与。(2)Redis宕机后,RDB + AOF数据复原较慢,须要Plan B优化复原速度。(3)开发老本相对较高。

4、雪花算法

雪花算法(SnowFlake),是Twitter公司开源的散布式ID生成算法,在本地引入hutool jar包即可成功。

雪花算法生成的散布式ID共64位,由4个局部组成。

好处:

(1)技术成功便捷,开发老本低。(2)趋向递增,不会影响数据库的数据写入性能。(3)本地即可生成,出错率低。(4)ID生成性能高。

缺陷:

(1)强依赖机器时钟,假设机器上时钟回拨,会造成ID重复。(2)可读性差。

5、数据库号段

数据库号段,是在“数据库自增ID”打算上做的优化,成功方式如下:

(1)从中央数据库中失掉出一批散布式ID,并缓存到散布式ID服务本地,业务系统失掉散布式ID的时刻,可间接在这个批次内递增取值。(2)若该批次散布式ID的号段用完,则须要降级数据库中的初始值,再次失掉新批次的散布式ID,并从新缓存到散布式ID服务本地,以供经常使用。

  id_generator id   max_id     step     biz_type     version     '版本号,是一个失望锁,每次都降级version,保障并发时数据的正确性'  

好处:

(1)趋向递增,不会影响数据库的数据写入性能。(2)ID生成性能高。(3)数据库压力小。(4)可读性高。

缺陷:

(1)开发老本很高。(2)须要额外引入散布式ID服务和中央数据库,链路变长造成出错概率参与。

6、美团 Leaf

Leaf,是美团技术团队成功的散布式ID生成打算,成功了数据库号段形式(Leaf-segment)和雪花算法形式(Leaf-snowflake),咱们这里着重说Leaf-snowflake。

Leaf-snowflake打算齐全沿用snowflake算法打算的bit位设计,即:以“1+41+10+12”的方式组装ID号,改变点为:将SnowFlake从本地jar包变成了独立服务,并引入了Zookeeper来处置时钟回拨疑问。

好处:

(1)趋向递增,不会影响数据库的数据写入性能。(2)处置了原有的机器上时钟回拨,会出现的ID重复疑问。(3)ID生成性能高。

缺陷:

(1)第三方开源软件,有必定的相熟和试错老本。(2)须要额外引入散布式ID服务和Zookeeper,链路变长造成出错概率参与。(3)可读性差。

7、滴滴 Tinyid

Tinyid,是滴滴技术团队成功的散布式ID生成算法,基于上文引见的号段形式成功,在此基础上允许数据库多主节点形式,还提供了tinyid-client客户端的接入方式。

除此之外,Tinyid做的另一个优化点是号段预加载。

举个例子:可用号段(1——1000)被加载到内存,失掉id时会从1开局递增失掉,当经常使用到20%(自动)时,会异步加载下一可用号段(1——5000)到内存,此时内存中可用号段为(201——1000)和(1——5000)。

当id递增到1000时,号段经常使用终了,下一号段会交流为号段,以此类推。

好处:

(1)趋向递增,不会影响数据库的数据写入性能。(2)ID生成性能高。(3)数据库压力小。(4)可读性高。

缺陷:

(1)第三方开源软件,有必定的相熟和试错老本。(2)须要额外引入散布式ID服务和中央数据库,链路变长造成出错概率参与。

8、百度 UidGenerator

UidGenerator是Java成功的,基于Snowflake算法的惟一ID生成器。

UidGenerator以组件方式上班在运行名目中, 允许自定义workerId位数和初始化战略。

在成功上,UidGenerator经过借用未来期间,来处置sequence自然存在的并发限度,驳回RingBuffer来缓存已生成的UID,并行化UID的消费和消费,同时对CacheLine补齐,防止了由RingBuffer带来的配件级“伪共享”疑问,最终单机QPS可达600万。

咱们从这里可以看到,相比拟于SnowFlake,UidGenerator的期间bit变少了,而机器ID的bit变多了。

好处:

(1)趋向递增,不会影响数据库的数据写入性能。(2)本地即可生成,出错率低。(3)ID生成性能极高。

缺陷:

(1)第三方开源软件,有必定的相熟和试错老本。(2)强依赖机器时钟,假设机器上时钟回拨,会造成ID重复。(3)可读性差。

结语

这八大散布式ID生成打算,目前最罕用的打算为雪花算法和数据库号段方式。

当然,最罕用的未必是最适宜你所担任的系统的,大家还是须要依据各自的个性来启动选用。

  • 关注微信

本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载联系作者并注明出处:https://duobeib.com/diannaowangluoweixiu/8581.html

猜你喜欢

热门标签

洗手盆如何疏浚梗塞 洗手盆为何梗塞 iPhone提价霸占4G市场等于原价8折 明码箱怎样设置明码锁 苏泊尔电饭锅保修多久 长城画龙G8253YN彩电输入指令画面变暗疑问检修 彩星彩电解除童锁方法大全 三星笔记本培修点上海 液晶显示器花屏培修视频 燃气热水器不热水要素 热水器不上班经常出现3种处置方法 无氟空调跟有氟空调有什么区别 norltz燃气热水器售后电话 大连站和大连北站哪个离周水子机场近 热水器显示屏亮显示温度不加热 铁猫牌保险箱高效开锁技巧 科技助力安保无忧 创维8R80 汽修 a1265和c3182是什么管 为什么电热水器不能即热 标致空调为什么不冷 神舟培修笔记本培修 dell1420内存更新 青岛自来水公司培修热线电话 包头美的洗衣机全国各市售后服务预定热线号码2024年修缮点降级 创维42k08rd更新 空调为什么运转异响 热水器为何会漏水 该如何处置 什么是可以自己处置的 重庆华帝售后电话 波轮洗衣机荡涤价格 鼎新热水器 留意了!不是水平疑问! 马桶产生了这5个现象 方便 极速 邢台空调移机电话上门服务 扬子空调缺点代码e4是什么疑问 宏基4736zG可以装置W11吗 奥克斯空调培修官方 为什么突然空调滴水很多 乐视s40air刷机包 未联络视的提高方向 官网培修 格力空调售后电话 皇明太阳能电话 看尚X55液晶电视进入工厂形式和软件更新方法 燃气热水器缺点代码

热门资讯

关注我们

微信公众号