首页 > 其他分享 >分布式ID实现方案

分布式ID实现方案

时间:2024-11-13 13:18:22浏览次数:3  
标签:方案 Tinyid ID 号段 生成 id 分布式

ID:数据的唯一标识。

并发流量大采用Mysql分库分表(Sharding-JDBC)

分布式ID满足要求:

  1. 全局唯一
  2. 生成Id速度快,对本地资源消耗少
  3. 生成Id服务需高可用(不能出错)
  4. id有序递增(提升DataBase写入速度)
  5. 有具体业务含义(通过id定位问题更加透明)
  6. 分布式Id场景多,需要独立部署发号器服务

解决方案

一、数据库

在主键自增(auto_inc)的场景下

使用replace into代替 insert into

步骤:

  1. 尝试将数据插入表中
  2. 判断主键/唯一索引是否重复出现,如果出现重复,则删除该重复行,再尝试判将数据插入表中

数据插入流程图

优点:简单、id、有序递增、存储空间消耗少

缺点:并发不高,Id没有具体业务含义,存在安全问题(通过订单id的递增规律,可以推断出每天的订单数,商业机密不可随意泄露),每次获取数据,都要向数据库发送请求(数据库压力上升,获取速度变慢)

数据库号字段

存在内存中

问题:单点问题

开源项目:Tinyid

NoSQL

redis Cluster / Codis(redis集群方案)

RDB 和 AOF

缺点:与自增类似

MongoDB

ObjectId --> 分布式id解决方案

缺点:重复id问题、安全(id有规律)

二、算法

UUID算法(通用唯一标识符)
// 生成ID
UUID.randomUUID();

注:5种不同version的值对应的含义不一致。

优点:生成快、简单、UUID可保证唯一性,因为其生成规则包含MAC地址、时间戳、名字空间(NameSpace)、随机/伪随机数、时序等元素。

缺点:存储消耗空间大(32个字符,128位),不安全(基于MAC地址生成的UUID,会导致MAC地址泄露),无具体业务含义,重复ID(机器时间错误的情况下)

雪花算法(Snowflake)

Snowflake 是 Twitter 开源的分布式 ID 生成算法。Snowflake 由 64 bit 的二进制数字组成,这 64bit 的二进制被分成了几部分,每一部分存储的数据都有特定的含义:

生成id组成如下:

signtimestampdatacenter idworker idsequence
占用空间(bit)1415512
含义符号位,始终为0,代表id为正数时间戳(毫秒)机房id机器id序列号(自增),单台机器每毫秒能产出的最大id数(2^12 = 4096个)

优点:速度快、Id有序

缺点:

  1. id重复问题(依赖时间、存在时间回拨问题)
  2. 依赖机器id问题
Seata

改良版雪花算法,改进原版雪花算法的时间回拨问题,大幅提高QPS

内置分布式UUID生成器,用于辅助生成全局事务ID和分支事务ID

Seata官网介绍

Uid Generator(百度)

UidGenerator 是百度开源的基于Snowflake(雪花算法)的进行改进的唯一ID生成器。

生成id组成如下:

signdelta secondsWorker idsequence
占用空间(bit)1282213
含义符号位,始终为0,代表id为正数当前时间,相对于时间基点"2016-05-20"的增量值,单位:秒,最多可支持约 8.7 年机器 id,最多可支持约 420w 次机器启动。内置实现为在启动时由数据库分配,默认分配策略为用后即弃,后续可提供复用策略每秒下的并发序列,13 bits 可支持每秒 8192 个并发。

Uid Generator官方介绍

Leaf(美团)

Leaf 提供了 号段模式Snowflake(雪花算法) 这两种模式来生成分布式 ID。并且支持双号段,还解决了雪花 ID 系统时钟回拨问题。不过,时钟问题的解决需要弱依赖于 Zookeeper(使用 Zookeeper 作为注册中心,通过在特定路径下读取和创建子节点来管理 workId) 。

Leaf 对原有的号段模式进行改进,比如这里增加了双号段避免获取 DB 在获取号段的时候阻塞请求获取 ID 的线程。简单来说,就是一个号段还没用完之前,系统就主动提前去获取下一个号段(图片来自于美团官方文章:《Leaf——美团点评分布式 ID 生成系统》)。

img

根据项目 README 介绍,在 4C8G VM 基础上,通过公司 RPC 方式调用,QPS 压测结果近 5w/s,TP999 1ms。

Leaf官方介绍

Tinyid(滴滴)

Tinyid 是滴滴开源的一款基于数据库号段模式的唯一 ID 生成器。

数据库号段模式的原理我们在上面已经介绍过了。Tinyid 有哪些亮点呢?

基于数据库号段模式的简单架构方案:

img

通过 HTTP 请求向发号器服务申请唯一 ID。负载均衡 router 会把我们的请求送往其中的一台 tinyid-server。

上述架构主要存在问题:

  • 获取新号段的情况下,程序获取唯一 ID 的速度比较慢。
  • 需要保证 DB 高可用,这个是比较麻烦且耗费资源的。
  • HTTP 调用存在网络开销。

Tinyid 的原理比较简单,其架构如下图所示

img

相比于基于数据库号段模式的简单架构方案,Tinyid 的优化方案:

  • 双号段缓存:为了避免在获取新号段的情况下,程序获取唯一 ID 的速度比较慢。 Tinyid 中的号段在用到一定程度的时候,就会去异步加载下一个号段,保证内存中始终有可用号段。
  • 增加多 db 支持:支持多个 DB,并且,每个 DB 都能生成唯一 ID,提高了可用性。
  • 增加 tinyid-client:纯本地操作,无 HTTP 请求消耗,性能和可用性都有很大提升。

Tinyid官方介绍

总结:

本文主要介绍的是分布式 ID 的理论知识。在实际的面试中,面试官可能会结合具体的业务场景来考察面试者对分布式 ID 的设计。

标签:方案,Tinyid,ID,号段,生成,id,分布式
From: https://blog.csdn.net/m0_74119287/article/details/143723730

相关文章

  • Android SIM 解锁:如何轻松解锁 Android 上的 SIM 卡
    您的Android手机SIM卡是否已锁定?许多人购买Android手机时并不知道手机是否已锁定SIM卡。您可能想要更改网络服务提供商,但后来发现新的SIM卡无法在Android手机上使用。这会带来不便,因为您无法通过其他线路使用购买的电话。人们可能会问自己,如果遇到此问题,如何在An......
  • 高手技巧:如何在 Android 上绕过人脸识别
    人脸识别是Android引入的一项重要安全功能,可帮助用户保护其设备免遭未经授权的访问。如果您想保证文件安全,它非常有用。通常,面部识别的工作原理是使用您的面部作为生物识别标识符来验证某些操作。但是,有时会由于各种原因而失败。可能是相机坏了,或者设备有问题。发生这种情况......
  • 如何解锁碎屏手机(Android 指南)
    一般来说,电子设备很脆弱,除非它们是为大量使用而设计的。Android智能手机、平板电脑和智能手表也存在这种脆弱性。Android智能手机或平板电脑的触摸屏是您访问和使用手机的最重要部件之一。如果屏幕在锁定时破裂或破裂,肯定会令人不安。您将陷入如何解锁屏幕破损的手机的困......
  • 【JetBrains Rider 2024软件下载与安装教程】
    1、安装包Rider2024:链接:https://pan.quark.cn/s/f3b3360dccc0提取码:Z8gARider-2023.3.2:链接:https://pan.quark.cn/s/82b63a1e0df3提取码:XdA82、安装教程(建议关闭杀毒软件)1)       双击下载安装包exe文件安装,弹窗安装对话框  2)       点击下一步......
  • Spring Boot框架:电商解决方案的构建
    摘要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本网上商城系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,......
  • App WebView白屏检测及解决总结,包括Android 和 iOS
    App上WebView白屏在移动端上场景的H5页面白屏问题,根据平台分为Android和ios端上H5白屏问题(相关解决和优化基于移动端侧)之前在自己博客发布过,最近有做朋友问就再发出来下,希望能帮助更多人,重要的是了解白屏问题的原理和解决思路。Android的的白屏问题表现现对比较多些,按问题......
  • ComfyUI-CogVideoX_图片生成视频、文字生成视频工作流,相关软件包及工作流均已打包好,一
    「文末提供获取方式」▼本期带来图片生成视频模型工作流,此工作流操作简单,相关ComfyUI软件包、模型、节点、工作流均已打包在内,一键启动即可。开源地址(源码):https://github.com/THUDM/CogVideo开源地址(节点):https://github.com/kijai/ComfyUI-CogVideoXWrapper#配置要......
  • 基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)
    摘要:基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集,使用Pysdie6库来搭建前端页面展示......
  • 智慧园区建设项目可行性研究报告立项报告,智慧园区可行性研究报告,智慧园区综合信息管理
      一、智慧园区管理系统方案介绍二、智慧园区管理系统方案优点三、智慧园区管理系统方案功能四、智慧园区管理系统APP开发五、智慧园区管理系统方案特点六、智慧园区管理系统建设目标七、智慧园区管理系统总体建设方案八、智慧园区管......
  • 【固定资产系统】资产管理平台建设方案,RFID,资产盘点,资产折旧,耗材管理(Word原件)
    固定资产管理系统旨在实现全方位、数字化的资产管理。首先,我们希望通过这一系统,对全公司的日常办公用品、标准物质及常用物品等固定资产进行精细化的申购、入库和领用管理。从资产采购到报废维修,每一个环节都应被纳入数字化流程,以减少人工操作的繁琐,提升管理效率。其次,系统应......