【业务功能篇73】分布式ID解决方案

企业级技术交付的五位一体方法论:开发、架构、管理、培训与解决方案的深度耦合 企业级技术交付不是单一功能实现,而是覆盖开发、架构、管理、培训与解决方案的系统性工程。其核心原理在于能力闭环——开发验证架构合理性,架构支撑管理可观测性,管理反哺培训真实场景,培训保障解决方案可持续演进。这种深度耦合显著提升系统稳定性(如MTTR<18分钟)、知识可传承性(三阶文档法)与业务适应力(自主演进路线图)。广泛应用于制造业MES升级、金融核心系统重构、能源IoT平台建设等强可靠性、长生命周期、高协同要求的数字化转型场景。本文即基于真实14个月MES项目,拆解如何将抽象方法论转化为可执行的12项开发 阅读详情

业界实现方案

1. 基于UUID
2. 基于DB数据库多种模式(自增主键、segment)
3. 基于Redis
4. 基于ZK、ETCD
5. 基于SnowFlake
6. 美团Leaf(DB-Segment、zk+SnowFlake)
7. 百度uid-generator()

1.基于UUID生成唯一ID

UUID:
UUID长度128bit,32个16进制字符,占用存储空间多,且生成的ID是无序的;

对于InnoDB这种聚集主键类型的引擎来说,数据会按照主键进行排序,由于UUID的无序性,InnoDB会产生巨大的IO压力,此时不适合使用UUID做物理主键,可以把它作为逻辑主键,物理主键依然使用自增ID。

组成部分:

为了保证UUID的唯一性,规范定义了包括网卡MAC地址,时间戳,名字空间,随机或伪随机数,时序等元素.

优点:

性能非常高:本地生成,没有网络消耗。

缺点:

不易于存储:UUID太长,16字节128位,通常以36长度的字符串表示,很多场景不适用

信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置

ID作为主键时在特定的环境会存在一些问题,比如做DB主键的场景下,UUID就非常不适用:

UUID生成策略 

UUID Version 1:基于时间的UUID

基于时间的UUID通过计算当前时间戳、随机数和机器MAC地址得到。由于在算法中使用了MAC地址,这个版本的UUID可以保证在全球范围的唯一性。但与此同时,使用MAC地址会带来安全性问题,这就是这个版本UUID受到批评的地方。如果应用只是在局域网中使用,也可以使用退化的算法,以IP地址来代替MAC地址--Java的UUID往往是这样实现的(当然也考虑了获取MAC的难度)

UUID Version 2:DCE安全的UUID

DCE(Distributed Computing Environment)安全的UUID和基于时间的UUID算法相同,但会把时间戳的前4位置换为POSIX的UID或GID。这个版本的UUID在实际中较少用到。

UUID Version 3:基于名字的UUID(MD5)

基于名字的UUID通过计算名字和名字空间的MD5散列值得到。这个版本的UUID保证了:相同名字空间中不同名字生成的UUID的唯一性;不同名字空间中的UUID的唯一性;相同名字空间中相同名字的UUID重复生成是相同的。

UUID Version 4:随机UUID

根据随机数,或者伪随机数生成UUID。这种UUID产生重复的概率是可以计算出来的,但随机的东西就像是买彩票:你指望它发财是不可能的,但狗屎运通常会在不经意中到来。

UUID Version 5:基于名字的UUID(SHA1)

和版本3的UUID算法类似,只是散列值计算使用SHA1(Secure Hash Algorithm 1)算法

 

UUID应用

UUID Version 1:基于时间的UUID

从UUID的不同版本可以看出

•Version 1/2适合应用于分布式计算环境下,具有高度的唯一性
•
•Version 3/5适合于一定范围内名字唯一,且需要或可能会重复生成UUID的环境下
•
•至于Version 4,建议是最好不用(虽然它是最简单最方便的)
•
•通常我们建议使用UUID来标识对象或持久化数据,但以下情况最好不使用UUID:
•映射类型的对象。比如只有代码及名称的代码表。
•人工维护的非系统生成对象。比如系统中的部分基础数据。
•对于具有名称不可重复的自然特性的对象,最好使用Version 3/5的UUID。比如系统中的用户。如果用户的UUID是Version 1的,如果你不小心删除了再重建用户,你会发现人还是那个人,用户已经不是那个用户了。(虽然标记为删除状态也是一种解决方案,但会带来实现上的复杂性。

 

 

2.基于DB数据库多种模式(自增主键、segment)

基于DB的自增主键方案 

实现原理:

基于MySQL,最简单的方法是使用auto_increment 来生成全局唯一递增ID,但最致命的问题是在高并发情况下,数据库压力大,DB单点存在宕机风险

优点:

实现简单、基于数据库底层机制

缺点:

高并发情况下,数据库压力大,DB单点存在宕机风险

 

 

基于DB多主模式方案

在分布式系统中我们可以多部署几台机器,

每台机器设置不同的初始值,且步长和机器数相等。

比如有两台机器。设置步长step为2,

TicketServer1的初始值为1(1,3,5,7,9,11…)、

TicketServer2的初始值为2(2,4,6,8,10…)。

这是Flickr团队在2010年撰文介绍的一种主键生成策略

(Ticket Servers: Distributed Unique Primary Keys on the Cheap )

如下所示,为了实现上述方案分别设置两台机器对应的参数,

TicketServer1从1开始发号,

TicketServer2从2开始发号,

两台机器每次发号之后都递增2

 

基于DB号段实现方案

实现原理:

每次向db申请一个号段,加载到内存中,然后采用自增的方式来生成id,这个号段用完后,再次向db申请一个新的号段,这样对db的压力就减轻了很多,同时内存中直接生成id。向数据库申请新号段,对max_id字段做一次update操作,update max_id= max_id + step,update成功则说明新号段获取成功,新的号段范围是(max_id ,max_id +step]。

优点:

利用了缓存,减轻DB压力,性能提升

缺点:

依然存在DB模式下的性能瓶颈,ID最大值的限制

 

3.基于Redis实现分布式ID 

  • 因为Redis是单线程的,所以天然没有资源争用问题,可以采用 incr 指令,实现ID的原子性自增。
  • 但是因为Redis的数据备份-RDB,会存在漏掉数据的可能,所以理论上存在已使用的ID再次被使用,所以备份方式可以加上AOF方式,这样的话性能会有所损耗。

 

4.基于Zookeeper实现分布式ID

原理:
利用zookeeper中的顺序节点的特性,制作分布式的序列号生成器(ID生成器)

5.基于ETCD实现分布式ID 

原理:
每个tx事务有唯一事务ID,在etcd中叫做main ID,全局递增不重复。

一个tx可以包含多个修改操作(put和delete),每一个操作叫做一个revision(修订),共享同一个main ID。

一个tx内连续的多个修改操作会被从0递增编号,这个编号叫做sub ID。

每个revision由(main ID,sub ID)唯一标识。

6.美团Leaf-基于ZK的SnowFlake算法 

Leaf-snowflake方案完全沿用snowflake方案的bit位设计.

即是“1+41+10+12”的方式组装ID号。

对于workerID的分配,当服务集群数量较小的情况下,完全可以手动配置。

Leaf服务规模较大,动手配置成本太高。所以使用Zookeeper持久顺序节点的特性

自动对snowflake节点配置wokerID

 

7.百度uid-generator分布式ID生成器

UidGenerator是Java实现的, 基于Snowflake算法的唯一ID生成器。

UidGenerator以组件形式工作在应用项目中, 支持自定义workerId位数和初始化策略,

从而适用于docker等虚拟化环境下实例自动重启、漂移等场景。

 在实现上, UidGenerator通过借用未来时间来解决sequence天然存在的并发限制;

采用RingBuffer来缓存已生成的UID, 并行化UID的生产和消费, 同时对CacheLine补齐,

避免了由RingBuffer带来的硬件级「伪共享」问题. 最终单机QPS可达600万。

其实现原理和雪花算法并无二致,自定义号段,并且采用RingBuffer作为缓冲

从而提升性能。详见官网地址:

https://github.com/baidu/uidgenerator/blob/master/README.zh_cn.md

 

AI SaaS安全实战:四层纵深防御阻断Prompt Injection与恶意用户 大模型应用安全的核心挑战在于语义层攻击,而非传统代码注入。Prompt Injection通过自然语言劫持模型意图,绕过关键词过滤与WAF规则;Bad Users则以分布式、多阶段方式协同试探系统边界。其本质是模型指令覆盖能力与业务逻辑信任链断裂的双重风险。技术价值体现在构建可量化、低延迟、不牺牲AI能力的工程化防护体系。典型应用场景包括智能客服、合同审查、营销文案生成等AI原生SaaS服务。本文聚焦生产级落地,详解输入语义沙箱、输出契约校验、用户行为图谱风控与业务逻辑熔断四层异构防线的设计原理与协同机制。 阅读详情

相关推荐

技术博客人格化:从.NET开发者视角重构内容生产逻辑

技术博客的本质不是知识搬运,而是构建可信赖的技术对话场域。理解‘人格化技术传播’需先厘清其底层原理:它将抽象API、语法特性与真实开发者的认知路径、调试行为、决策压力深度耦合;其技术价值在于弥合官方文档与工程实践之间的鸿沟,显著提升经验留存率与问题解决效率;典型应用场景包括技术选型决策、性能优化归因、调试异常诊断等高痛点多发领域;而‘老赵点滴’的实践表明,真正有效的技术内容必须锚定在开发者的人格轨迹(如调试截图、版本踩坑、环境元信息)与工程上下文(如Kubernetes资源限制、Azure DevOps流水

as2886089的博客 469

分布式id

随着系统越来越复杂,数据越来越多后,势必会引入分库分表。此时db本身的自增id将无法满足需求,这时将引入分布式id来满足需求。以下是几种生成分布式id的方案。 数据库自增id 思路 引入一个数据库(称呼为id数据库),创建一个id表 每次插入数据前,先来id数据库插入一条获取,获取一个自增id作为数据的id 优点 实现简单 缺点 不是高可用。一旦数据库挂掉,分布式id将无法使用 性能损耗大。 整个交互过程设计了网络开销 数据库硬盘IO开销

aazzss55的博客 227

MongoDB灾难恢复计划:RTO/RPO目标下的应急响应完整方案

MongoDB灾难恢复的关键策略 企业IT中断可能导致严重损失,73%的企业难以在一周内恢复运营。MongoDB的分布式架构(复制集、分片集群)增加了恢复复杂性。核心指标RTO(恢复时间)和RPO(数据丢失量)需根据业务需求设定,金融交易等关键系统通常要求RTO<15分钟、RPO=0。MongoDB恢复体系包含三种模式:实时复制(RPO=0)、增量备份(RPO=5-30分钟)和点时间恢复(精确回滚)。针对单节点或多节点故障,需建立自动化响应流程,优化选举超时和网络配置。灾难恢复成本随RTO/RP

数据知道的博客 1556

分布式键值存储系统ETCD介绍

ETCD作为分布式键值存储系统,使用场景上和Zookeeper有很多相似之处,但在设计理念以及架构稳定性和性能上有了提升,本文将对其中的架构流程、一致性Raft算法以及存储模型作简要介绍。

牧羊人的方向 4346

【信息科学与工程学】【数据中心】 第二十三篇 DDC网络-满足大规模训练、推理、存储区网络(Roce2组网)

特征维度具体特征网络影响设计考虑通信模式​集体通信为主(All-Reduce/All-Gather)多对多通信模式需要高带宽、低延迟的All-to-All连接流量模式​同步、周期性、模式可预测突发带宽需求高需要高效的拥塞控制和流量调度延迟敏感性​端到端延迟敏感(μs级)尾延迟影响训练时间需要无损网络、确定性延迟带宽需求​持续高带宽(100-400Gbps/节点)网络容量压力大需要高带宽、无阻塞网络扩展规模​数千到数万GPU节点可扩展性挑战需要层次化、模块化设计存储访问​大块顺序读写为主存储带宽需求高需要高带

weixin_49199313的博客 1881

美团点评分布式id项目 Leaf jar包依赖

美团点评分布式id项目 Leaf jar包依赖

分布式自增 id 的高阶

1. 雪花算法的致命问题是什么 时间倒退 2. docker 中无法配置硬件 id 3.同一秒并发太多. 解决方案: 2. work 值每次重启的时候增加. %2^xxx 1. 如果时间倒退那么就增加 worker值.[ phil 自创 ] 或者 记录上一次时间,时间倒退直接抛错. 传统解决方案,百度也是. 3

fei33423的专栏 1751

Leaf——美团点评分布式ID生成系统中Leaf-segment数据库方案的实现.zip

方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。

MyBatis-Plus 主键策略

MyBatis-Plus 主键策略一、介绍二、MyBatis-Plus 主键策略2.1、雪花算法(分布式ID生成器) 一、介绍 结合MP入门实践搭建的数据库和项目环境,此处我们来对数据库插入操作。先按照我们常用的方式来插入数据项目: //添加 @Test public void testAdd() { User user = new User(); user.setId(9L); user.setName("小李"); user.setAge(20); user.se

爱追剧晓三鲜的博客 379

【面试题】MySQL索引相关的面试题(红黑树,hash,B树,B+树)

自己整理了几个面试题分享给大家 问题1:红黑树为什么那样设计? 首先聊一下二叉搜索树,主要特点是左节点比根节点小,右节点比根节点大,并且左右子树都是二叉搜索树。缺点是在极端情况下,比如插入都是有序的,就会出现退化的情况有序序列树退化成链表。 二叉搜索树 退化成链表的二叉搜索树 此时,要想让树的节点平均分布就需要平衡树了,红黑树就是平衡树的一种(平衡二叉搜索树)。然后,一棵树的查询性能取决...

Mr_黑_ 的博客 4044

Origin作图——等高线图

最近做一个测试数据图,开始想通过用热图来展示,结果发现热图有很多的小方块,很难呈现出最好的效果,因为数据是有一层一层的递进效果,因此经过尝试后,发现等高线图是个好选择。 热图展示效果如下:其中有很多的小方块不适合,热图制图方法前面有记录。 下面展示等高线图制作方法。首先是导入数据,可以从excal导入,也可以直接复制进去。等方法。 选中要展示的数据,绘图----等高线图 选中箭头,确定。 双击图像,点击线,我们需要把线隐藏了. 双击图像,我们需要调色板,根据自己的选择,一般用调色板的颜色。

qq_42278015的博客 1万+

CGB2005-京淘17

1.HttpClient远程调用说明 1.1 需求说明: 需求:根据userId查询用户的信息. 1.用户的url地址: http://www.jt.com/findUserById/7; 2.需要在jt-web的Controller中动态的接收数据.将请求转给sso单点登录系统 url:http://sso.jt.com/findUserById/7 3.在jt-sso中的Controller根据userId查询用户信息. 1.2 编辑jt-web Controller /** * 为了测试

qq_16804847的博客 4976

S7-1200 数据日志

数据日志文件按照标准 CSV 格式存储在 S7-1200 CPU 装载存储器或 S7-1200 SIMATIC 存储卡中。分别可通过 PLC Web 服务器或将数据文件传送到 PC 进行管理、查看。 一、测试目的: 下面以数据日志文件存储在 S7-1200 CPU 装载存储器中,使用PLC Web 服务器进行管理为例,实现下述功能: (1)执行“DataLogging”指令将产品型号“Type”,长度“Length”,宽度“Width”三个变量值写入到数据日志文件; (2)当写入的条数达到设定的3条

qq_43029096的博客 2542

私教健身管理应用基于HarmonyOS API 24实战解析ArkTS 的 @State、@Builder、@Component 等装饰器和修饰符,为状态管理、组件复用和模块化开发

在 HarmonyOS NEXT 正式商用的背景下,ArkTS 作为鸿蒙生态的官方应用开发语言,正在从传统的命令式 UI 开发范式向声明式 UI 范式全面迁移。ArkUI 框架以组件化、声明式、状态驱动为核心特征,要求开发者以"描述 UI 应该是什么样"而非"一步步操作 UI 怎么变"的思维方式构建界面。

2401_86031952的博客 166

智能驾驶域控(ADCU)方案介绍

本文主要对智能驾驶域控(ADCU)方案相关知识进行总结,以加深理解,及方便后续查漏补缺。

liuxu324的博客 1577

基于YOLOv8的智能肿瘤检测系统:从图像到诊断的深度学习应用——含代码和论文

本文提出了一种基于YOLOv8深度学习的智能肿瘤检测系统,用于医学影像(CT/MRI/X光)的自动分析与诊断。针对传统人工阅片效率低、主观性强的问题,系统采用最新的YOLOv8目标检测算法,通过改进的C2F骨干网络、Anchor-Free检测头和解耦头等创新设计,实现高效精准的肿瘤定位。文章详细阐述了模型架构、数据处理流程、训练优化方法及PyQt5用户界面开发,为临床提供可靠的AI辅助诊断工具。实验结果表明,该系统在速度和准确率上达到良好平衡,有望提升肿瘤早期筛查效率。

FJN110的博客 200

美团分布式ID生成框架Leaf源码分析及优化改进

本文主要是对美团的分布式ID框架Leaf的原理进行介绍,针对Leaf原项目中的一些issue,对Leaf项目进行功能增强,问题修复及优化改进,改进后的项目地址在这里: Leaf项目改进计划 https://github.com/NotFound9/Leaf Leaf原理分析 Snowflake生成ID的模式 7849276-4d1955394baa3c6d.png snowflake算法对于ID的位数是上图这样分配的: 1位的符号位+41位时间戳+10位workID+12位序列号 加起来一共是64个二进制

ruiwen125的博客 2054

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2177

Leaf-美团分布式ID生成服务

Leaf : 美团分布式ID生成服务 There are no two identical leaves in the world.(世界上没有两片相同的树叶。) — 莱布尼茨 现有分布式ID生成方案 在探究美团的 Leaf 服务之前,我们不妨先了解下市场上现有的几种分布式 Id 生成方案。 UUID 数据库自增ID 号段模式 Redis 雪花算法(SnowFlake) 滴滴出品(TinyID) 百度(Uidgenerator) 美团(Leaf) UUID 在 Java 中,如果你想在分布式系统

theluck的博客 1203

delphi fmx android 自动更新(一)

所以,如果是http 则,manifest.xml application 下,https无需添加。增加android:usesCleartextTraffic="true",不然无法使用http下载东西。1,REQUEST_INSTALL_PACKAGES 权限。4,WRITE_EXTERNAL_STORAGE 权限。3,READ_EXTERNAL_STORAGE 权限。一般是从http下载安装包 apk。2,INTERNET 权限。sFile为apk包路径。

全粘工程师 550

小梅哥Xilinx FPGA学习笔记15——基于SPI接口的ADC芯片驱动

ADC(Analog to Digital Conver),通常是指一个将转变为数字信号(二进制表示的离散信号)的转换器。先将输入模拟电压转换成时间或频率,再把中间量转换成数字量双积分型 ADC,先对输入采样电压和基准电压进行两次积分,获得与采样电压平均值成正比的时间间隔,同时用计数器对标准时钟脉冲计数。抗干扰能力强,稳定性好,但转换速度低。①并联比较型 ADC,采用各量级同时并行比较,各位输出码也是同时并行产生,转换速度快。缺点是成本高、功耗大。

m0_51430584的博客 5505

分库分表了解

分库分表了解,以及shardingjdbc了解

u010738038的专栏 1172

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

整合美团Leaf分布式id工具包

1.如果使用雪花模式,别忘了引入zk的连接用的jar包,官方真的坑,也不提醒一下。 2.启动leaf-server,去master上启动,数据库自己配置好,然后leaf-server的配置文件也配置好。 3.唉…

Gao__xi的博客 572

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

自动生成服务器,从0快速搭建一个高可用etcd集群,自动生成配置

研发过来一个需求,需要搭建一套etcd,作为注册中心,那么问题来了,如何快速的搭建一个etcd集群呢,又要整证书,又要整很多参数,网上说的都不明不白的哦,怎么办呢,这个时候需要一个神奇的网站来解决这个问题etcd labs首页进入这个页面我们只需要填写相关内容即可了,下面说一下比较关键的内容:etcd name: 服务名称,保持默认或者自定义均可etcd data directory:数据存储路径...

weixin_39894473的博客 212

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

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

https://mp.weixin.qq.com/s/TkWOzgZvwKkqXQ0eN7fmnA

竹林幽深 298

MyCAT——MyCAT(下载和安装、配置 Mycat 相关文件、出错时解决方法、mycat 分片规则【仅列举五种】)、分布式环境下的主键生成(Java 代码处理—— LEAF的两种模式))

MyCAT——MyCAT(下载和安装、配置 Mycat 相关文件、出错时解决方法、mycat 分片规则【仅列举五种】)、分布式环境下的主键生成(Java 代码处理—— LEAF的两种模式))

qq_41824825的博客 2771
上一篇: 【业务功能篇72】分布式锁实现分析
下一篇: 【业务功能篇73】web系统架构演变-单体-集群-垂直化-服务化-微服务化
studyday1
博客等级 码龄9年 6454粉丝 255原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值