【277期】面试官:说几种常用的分布式 ID 解决方案

在复杂的分布式系统中,ID就是大量的数据和消息的唯一标识。

举个例子,数据库的ID字段在单体的情况下可以使用自增来作为ID,但是对数据分库分表后一定需要一个唯一的ID来标识一条数据,这个ID就是分布式ID。对于分布式ID而言,也需要具备分布式系统的特点:高并发,高可用,高性能等特点。

分布式ID实现方案

常用方案对比:

【277期】面试官:说几种常用的分布式 ID 解决方案

目前流行的分布式ID解决方案有两种:「号段模式」和「雪花算法」。

「号段模式」依赖于数据库,但是区别于数据库主键自增的模式。假设100为一个号段100,200,300,每取一次可以获得100个ID,性能显著提高。

「雪花算法」是由符号位+时间戳+工作机器id+序列号组成的,如图所示:

【277期】面试官:说几种常用的分布式 ID 解决方案

符号位为0,0表示正数,ID为正数。

时间戳位用来存放时间戳,单位是ms。

工作机器id位用来存放机器的id,通常分为5个区域位+5个服务器标识位。

序号位是自增。

雪花算法能存放多少数据?时间范围:2^41 / (3652460601000) = 69年 工作进程范围:2^10 = 1024 序列号范围:2^12 = 4096,表示1ms可以生成4096个ID。

根据这个算法的逻辑,只需要将这个算法用Java语言实现出来,封装为一个工具方法,那么各个业务应用可以直接使用该工具方法来获取分布式ID,只需保证每个业务应用有自己的工作机器id即可,而不需要单独去搭建一个获取分布式ID的应用。

分布式ID开源组件

如何选择开源组件

选择开源组件首先需要看软件特性是否满足需求,主要包括兼容性和扩展性。

其次需要看目前的技术能力,根据目前自己或者团队的技术栈和技术能力,能否可以平滑的使用。

第三,要看开源组件的社区,主要关注更新是否频繁、项目是否有人维护、遇到坑的时候可以取得联系寻求帮助、是否在业内被广泛使用等。

美团Leaf

Leaf是美团基础研发平台推出的一个分布式ID生成服务。

目前已经广泛应用于美团金融、美团外卖、美团酒旅等多个部门。

Leaf特性如下:

  • 全局唯一,绝对不会出现重复的ID,且ID整体趋势递增。
  • 高可用,服务完全基于分布式架构,即使MySQL宕机,也能容忍一段时间的数据库不可用。
  • 高并发低延时,在CentOS 4C8G的虚拟机上,远程调用QPS可达5W+,TP99在1ms内。
  • 接入简单,直接通过公司RPC服务或者HTTP调用即可接入。

百度UidGenerator

 

上一篇:【DB笔试面试277】对于Oracle数据库,使用裸设备的好处有哪些?


下一篇:【深度学习】【论文笔记】【RCNN】Rich feature hierarchies for accurate object detection and semantic segmentation