【分布式】聊聊分布式id实现方案和生产经验

在这里插入图片描述
对于分布式Id来说,在面试过程中也是高频面试题,所以主要针对分布式id实现方案进行详细分析下。

应用场景

对于无论是单机还是分布式系统来说,对于很多场景需要全局唯一ID,

  • 数据库id唯一性
  • 日志traceId 可以方便找到日志链,一般使用uuid 更多一点
  • 幂等场景下,mq、api接口层面 保证幂等下
  • 业务系统订单id

UUID

最简单的就是使用UUID,UUID的规则是一组32位16进制数字构成,形式就是8-4-4-4-8,主要就是利用当前时间和时钟序列 和 全局唯一的IEEE机器识别。

UUID uuid = UUID.randomUUID();307e16d0-26d4-4fff-ab06-a9397b8369fb

优点:实现简单,全局唯一,缺点是不具有连续性,并且占用空间比较大,对于mysql主键来说不具备友好。

数据库自增ID

就目前公司内部,其实还是使用的数据库自增id进行处理,对于数据库来说的话,就是多个实例操作表自增id,对于业务来说使用自定义时间戳来实现。

还有一种方式就是创建一个单独的表,通过数据库本身的自增id来保证。

CREATE TABLE `test_order_id`  (`id` bigint NOT NULL AUTO_INCREMENT,`title` char(1) NOT NULL,PRIMARY KEY (`id`),UNIQUE KEY `title` (`title`)
) ENGINE = InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET =utf8;BEGIN;REPLACE INTO test_order_id (title) values ('p') ;
SELECT LAST_INSERT_ID();COMMIT;

这种方式的优点就是 实现比较简单,但是缺点就是不具备高可用性,如果mysql是单节点部署的话,那么整体就不可用。

高可用数据库实例

部署多个数据库实例,通过设置不同的自增,比如mysql实例1,自增是2,从1开始,mysql实例2 从2开始,那么就是 实例1 : 1、3、5、7,实例2: 2、4、6、8。

对于并发量不高的场景来说,可以解决,但是对于高并发场景来说,数据库实例就是成为瓶颈。如果1秒1000个订单,那么就需要频繁访问1000次数据库,显然这个网络以及IO就成为短板。

号段模型

号段模式,其实就是通过在一个表中唯一一条记录,然后通过业务区分,每次获取一个区间的号,这样比如获取1-1000的号段,那么就只需要交互一次数据库,并且通过添加version来避免出现并发修改数据的问题。
在这里插入图片描述

Redis

除了借助于mysql,还可以通过redis的自增 incr命令来实现自增ID,并且可以部署一主多从的架构,来保证高可用性。

    public long nextId(String item){// 1.生成时间戳LocalDateTime now = LocalDateTime.now();// 格林威治时间差long nowSecond = now.toEpochSecond(ZoneOffset.UTC);// 我们需要获取的 时间戳 信息long timestamp = nowSecond - BEGIN_TIMESTAMP;// 2.生成序号 --》 从Redis中获取// 当前当前的日期String date = now.format(DateTimeFormatter.ofPattern("yyyy:MM:dd"));// 获取对应的自增的序号Long increment = redisTemplate.opsForValue().increment("id:" + item + ":" + date);return timestamp << 32 | increment;}

具体原理其实就是 当前时间戳-制定时间 << 32 | 自增的id 这样输出的就是连续的id了

雪花算法

雪花算法整体结构就是 64位 0-41位位毫秒值,5位是数据中心id,5位机器id,最后12位是毫秒级别内的自增id
在这里插入图片描述

分析源码 可以大概了解其核心流程
在这里插入图片描述

雪花算法时钟回拨

在实际的生产环境中,分布式环境下,其实时钟是很难保证统一的,所以就可能实现时间不一样的情况,导致时钟回拨问题,我们来分析两类问题

情况1:UTC时间是8点01,实例机器是8点整
情况2:UTC时间是8点01 实例机器是8点03

对于情况1来说,其实就调整一下时间就好,1分钟内的id生成不用就可以。但是对于第二种情况,相当于需要从3分回退到01分,那么其中的2分钟的时间已经生成了对应的id,如果在次生成,就会出现id重复的问题?

如何解决呢
其实比较简单,大方向就是如果时间短,那么就等得阻塞对应的时间就可以,如果超过1S以上,服务直接下线,通过其他实例获取id就可以。
在这里插入图片描述

其他

业界有主流的其他方案,具体可以详细看
百度、美团对应的解决方案,这里自己查看对应文档就可以。

总结

从上面的分析可以知道 目前业界主流的方案,我们来抽丝剥茧下,对于设计一个分布式id来说,需要哪些核心点
1.需要顺序 这样可以简单清晰
2.依赖的服务需要高可用、高性能
3.全局唯一
4.有具体的业务含义,比如针对订单号:11xxx 开始,还款订单21xxx,借款订单31xxx。就比较清晰。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/73191.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【性能测试】Jmeter如何做一份测试报告(3)

本篇文章主要介绍Jmeter中下载插件&#xff08;Jmeter Plugins&#xff09; 如何使用监听器插件&#xff0c;线程组插件&#xff0c;梯度压测线程组 测试报告需要去关注的数据&#xff0c;怎么看测试报告图表 目录 一&#xff1a;插件下载 1&#xff1a;下载地址 2&#xff…

cocos creator使用mesh修改图片为圆形,减少使用mask,j减少drawcall,优化性能

cocos creator版本2.4.11 一个mask占用drawcall 3个以上&#xff0c;针对游戏中技能图标&#xff0c;cd,以及多玩家头像&#xff0c;是有很大优化空间 1.上代码&#xff0c;只适合单独图片的&#xff0c;不适合在图集中的图片 const { ccclass, property } cc._decorator;c…

AI重构SEO关键词布局

内容概要 在搜索引擎优化&#xff08;SEO&#xff09;领域&#xff0c;AI技术的深度应用正在颠覆传统关键词布局逻辑。通过机器学习算法与语义分析模型&#xff0c;智能系统能够实时解析海量搜索数据&#xff0c;构建动态词库并精准捕捉用户意图。相较于依赖人工经验的关键词筛…

泛微ecode的页面开发发送请求参数携带集合

1.在开发过程中我们难免遇见会存在需要将集合传递到后端的情况&#xff0c;那么这里就有一些如下的注意事项&#xff0c;如以下代码&#xff1a; // 新增action.boundasync addQuestion(formData) {var theList this.questionAnswerList;var questionAnswerListArray new Ar…

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:

道路运输安全员考试:备考中的心理调适与策略

备考道路运输安全员考试&#xff0c;心理调适同样重要。考试压力往往会影响考生的学习效率和考试发挥。​ 首先&#xff0c;要正确认识考试压力。适度的压力可以激发学习动力&#xff0c;但过度的压力则会适得其反。当感到压力过大时&#xff0c;要学会自我调节。可以通过运动…

LLM - 白话RAG(Retrieval-Augmented Generation)

文章目录 Pre一、大模型的"幻觉"之谜1.1 何为"幻觉"现象&#xff1f;1.2 专业场景的致命挑战 二、RAG技术解析&#xff1a;给大模型装上"知识外挂"2.1 核心原理&#xff1a;动态知识增强2.2 技术实现三部曲 三、RAG vs 微调&#xff1a;技术选型…

探索现代 C++:新特性、工程实践与热点趋势

目录 一、现代 C 的关键特性与热点关联 二、精简代码示例解析 三、工程实践中的应用思考 四、总结与展望 近几年&#xff0c;人工智能、边缘计算与跨语言开发成为技术热点&#xff0c;而 C 作为高性能系统编程的主力军&#xff0c;也在不断进化。从 C11 到 C20&#xff0c;…

《HTML + CSS + JS 打造炫酷轮播图详解》

《HTML CSS JS 打造炫酷轮播图详解》 一、项目概述 本次项目旨在使用 HTML、CSS 和 JavaScript 实现一个具有基本功能的轮播图&#xff0c;包括图片自动轮播、上一张 / 下一张按钮切换、小圆点指示与切换等功能&#xff0c;以提升网页的交互性和视觉吸引力。 二、实现步骤…

257. 二叉树的所有路径(递归+回溯)

257. 二叉树的所有路径 力扣题目链接(opens new window) 给定一个二叉树&#xff0c;返回所有从根节点到叶子节点的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 思路&#xff1a;在叶子节点收割结果&#xff0c;如果不是叶子节点&#xff0c;则依次处理左右子树&a…

【架构差异】SpringとSpringBoot:Bean机制的深入剖析与自动配置原理

目录标题 SpringBoot框架中Bean机制的深入剖析与自动配置原理摘要1. 引言2. SpringBoot与Spring的架构差异2.1 从Spring到SpringBoot的演进2.2 SpringBoot中的Bean容器体系 3. SpringBoot的自动配置机制3.1 SpringBootApplication解析3.2 自动配置原理深度解析3.2.1 自动配置类…

CSDN博客:Markdown编辑语法教程总结教程(中)

❤个人主页&#xff1a;折枝寄北的博客 Markdown编辑语法教程总结 前言1. 列表1.1 无序列表1.2 有序列表1.3 待办事项列表1.4 自定义列表 2. 图片2.1 直接插入图片2.2 插入带尺寸的图片2.3 插入宽度确定&#xff0c;高度等比例的图片2.4 插入高度确定宽度等比例的图片2.5 插入居…

ChebyKAN0、ChebyKAN1 网络阅读

目录 ChebyKAN0 Chebyshev Polynomial-Based Kolmogorov-Arnold Networks: An Efficient Architecture for Nonlinear Function Approximation 参考文献 文章内容 文章详细结构 5. Experiments and Results 5.1 Digit Classification on MNIST 5.2 Function Approximat…

RK3588部署YOLOv8(2):OpenCV和RGA实现模型前处理对比

目录 前言 1. 结果对比 1.1 时间对比 1.2 CPU和NPU占用对比 2. RGA实现YOLO前处理 2.1 实现思路 2.2 处理类的声明 2.3 处理类的实现 总结 前言 RK平台上有RGA (Raster Graphic Acceleration Unit) 加速&#xff0c;使用RGA可以减少资源占用、加速图片处理速度。因此…

破局者登场:中国首款AI原生IDE Trae深度解析--开启人机协同编程新纪元

摘要 字节跳动于2025年3月3日正式发布中国首款AI原生集成开发环境Trae国内版&#xff0c;以动态协作、全场景AI赋能及本土化适配为核心优势。Trae内置Doubao-1.5-pro与DeepSeek R1/V3双引擎&#xff0c;支持基于自然语言生成端到端代码框架、实时上下文感知与智能Bug修复&…

【PyCharm】Python和PyCharm的相互关系和使用联动介绍

李升伟 整理 Python 是一种广泛使用的编程语言&#xff0c;而 PyCharm 是 JetBrains 开发的专门用于 Python 开发的集成开发环境&#xff08;IDE&#xff09;。以下是它们的相互关系和使用联动的介绍&#xff1a; 1. Python 和 PyCharm 的关系 Python&#xff1a;一种解释型、…

SNIPAR:快速实现亲缘个体的基因型分离与推断

SNIPAR&#xff1a;快速实现亲缘个体的基因型分离与推断 近日&#xff0c;英国剑桥大学研究团队在Nature Genetics上发表了最新研究成果——SNIPAR&#xff08;SNP-based Inference of Pedigree relationship, Ancestry, and Recombination&#xff09;。这一强大的工具可以帮助…

3.11记录

leetcode刷题&#xff1a; 1. 334. 递增的三元子序列 - 力扣&#xff08;LeetCode&#xff09; 方法一&#xff1a;使用贪心算法求解 class Solution(object):def increasingTriplet(self, nums):first nums[0]second float(inf)for i in nums:if i>second:return Truee…

阿里云操作系统控制台评测:国产AI+运维 一站式运维管理平台

阿里云操作系统控制台评测&#xff1a;国产AI运维 一站式运维管理平台 引言 随着云计算技术的飞速发展&#xff0c;企业在云端的运维管理面临更高的要求。阿里云操作系统控制台作为一款集运维管理、智能助手和系统诊断等多功能于一体的工具&#xff0c;正逐步成为企业高效管理…

大语言模型学习--向量数据库Milvus实践

Milvus是目前比较流行的开源向量数据库&#xff0c;其官网地址 Milvus 是什么&#xff1f; | Milvus 文档 1.Milvus简介 Milvus 是一种高性能、高扩展性的向量数据库。Milvus 提供强大的数据建模功能&#xff0c;能够将非结构化或多模式数据组织成结构化的 Collections。它支…