全局id生成器生产方案
1.只要求不重复版本(常用于分布式确定一个实体的id)
uuid( MAC 地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,计算机基于这些规则生成的 UUID 是肯定不会重复的。)
UUID 作为 MySQL 数据库主键的时候就非常不合适
- 优点:生成速度通常比较快、简单易用
- 缺点:存储消耗空间大(32 个字符串,128 位)、 不安全(基于 MAC 地址生成 UUID 的算法会造成 MAC 地址泄露)、无序(非自增)、没有具体业务含义、需要解决重复 ID 问题(当机器时间不对的情况下,可能导致会产生重复 ID
滴滴的tinyid
tinynyid是这么做的,让A只生成偶数id,B只生产奇数id,对应的db设计增加了两个字段
雪花算法
Leaf 提供了 号段模式 和 Snowflake(雪花算法) 这两种模式来生成分布式 ID。并且,它支持双号段,还解决了雪花 ID 系统时钟回拨问题。不过,时钟问题的解决需要弱依赖于 Zookeeper(使用 Zookeeper 作为注册中心,通过在特定路径下读取和创建子节点来管理 workId) 。
美团Leaf框架通过多维度协同机制解决雪花算法的时钟回拨问题,具体实现逻辑如下:
-
启动阶段双重校验机制
- 节点首次启动时,需在ZooKeeper创建持久节点
leaf_forever/${self}
并写入当前系统时间;非首次启动则需对比本地时间与节点历史记录时间,若本地时间小于历史值则判定为时钟回退,直接阻断服务启动并触发报警27。 - 新节点还需通过RPC获取其他运行中Leaf节点的系统时间,计算集群平均时间。若本地时间与平均时间偏差超过预设阈值(如10秒),同样判定为时钟异常并拒绝启动57。
- 节点首次启动时,需在ZooKeeper创建持久节点
-
运行时持续同步监控
- 运行过程中,每3秒向ZooKeeper临时节点
leaf_temporary/${self}
上报当前系统时间,维持节点租约有效性,同时动态感知集群时间基线7。 - 若检测到本地时间突然后退且超过可接受范围(如短时NTP同步误差阈值),立即停止ID生成服务,避免产生重复ID28。
- 运行过程中,每3秒向ZooKeeper临时节点
-
异常处理策略
- 针对短时间回拨(如≤5ms),采用阻塞等待策略直至本地时钟恢复,期间暂停ID生成以避免冲突2。
- 对长时间不可恢复的时钟回退(如人工误操作导致),依赖ZooKeeper协调切换备用节点,保证服务高可用性25。
-
WorkerID动态管理
通过ZooKeeper自动分配唯一WorkerID,避免人工配置错误导致多节点共用相同WorkerID,从根源上减少因WorkerID重复引发的ID冲突风险78。
该方案通过启动校验、实时监控、异常熔断三层防御,在保障服务连续性的同时有效规避时钟回拨导致的ID重复问题25。
2.要求不重复版本且非严格递增(TSO服务和常用于分布式确定一个实体的id)
TiDB/TiKV PD服务
整个集群的 TSO 授时工作都集中在了 PD 身上,所以怎样做到低延迟,高性能和良好的容错,是我们在实现时需要关注的几个目标点。
TSO 是一个 int64 的整型,它由 Physical time 和 Logical time 两个部分组成。Physical time 是当前的 Unix 系统时间戳(毫秒),而 Logical time 则是一个范围在 [0, 1 << 18] 的计数器。这样一来便做到了在每毫秒的物理时间粒度上又可以继续细化成最多 262144 个 TSO,足以满足绝大多数使用场景了
PD 的 TSO 授时工作是由集群中 leader 来完成的。为了在 PD 集群中持久化当前分配的最大 TSO,避免因为 leader 挂掉而影响 TiDB 的事务,我们需要把 TSO 的物理时间戳存储到 etcd 中去。同时为了提高响应授时 RPC 请求的速度,我们也要避免与 etcd 交互得过于频繁,不能每有一次 TSO 更新就进行一次 etcd 读写。所以我们要存储的并不能是最近一次的授时结果,而是一个时间窗口的范围,这一点我们会在稍后的时间戳递进实现中做进一步阐述。
于是需要通过使用 last
并强制增加一个精度范围来进行控制,从而保证新上任的 leader 所分配的 TSO 一定大于之前所有已分配的 TSO。
由于逻辑时钟有范围限制,如果超出这个限制,leader 会选择睡眠 UpdateTimestampStep
长度的时间(默认 50 毫秒)来等待时间被推进
PD 采用了中心式的时钟解决方案,本质上还是混合逻辑时钟。但是由于其是单点授时,所以是全序的。中心式的解决方案实现简单,但是跨区域的性能损耗大,因此实际部署时,会将 PD 集群部署在同一个区域,避免跨区域的性能损耗。但是有一个绕不开的场景便是跨 DC 授时,上图展示了这样一种情况——我们只能通过 PD leader 来分配 TS,所以对于 client 2 来说,它需要跨 DC 先从 DC1 的 PD 上面拿 TSO,而这样做势必会影响到 client 2 的延迟。但往往用户的业务是有 DC 关联特性的,如果一次事务所涉及的数据读写只会发生在一个 DC 上面,那么我们其实只需要保证当前 DC 内的 Linearizability
Go 的 runtime 调度并没有优先级的概念,当 goroutine 越多时,TSO 更新分配的 goroutine 越容易迟迟拿不到执行的机会,从而会致获取 TSO 变慢
此外,PD 通过引入 etcd 解决了单点的可用性问题,一旦 leader 节点故障,会立刻选举新的 leader 继续提供服务,理论上来讲由于 TSO 授时只通过 PD 的一个 leader 提供,所以可能是一个潜在的瓶颈,但是从目前使用情况看,PD 的 TSO 分配性能并没有成为过 TiDB 事务中的瓶颈。
即只有当系统时间大于当前(也就是旧)TSO 物理时间戳时才会对其进行更新
我们发现上一次存储在 etcd 中的值和当前时间已经接近到一毫秒及以内时,说明上一个窗口时间即将或已经到期耗尽,需要我们对时间窗口进行滑动,开辟新的可用时间空间,即加上默认的 3s 时间间隔并写入 etcd
基于Redis和mysql的单调TSO服务(安全非严格递增问题)
高可用保障,redis主从,切片(保障的是非递增)
mysql HA集群
相关文章:
全局id生成器生产方案
1.只要求不重复版本(常用于分布式确定一个实体的id) uuid( MAC 地址、时间戳、名字空间(Namespace)、随机或伪随机数、时序等元素,计算机基于这些规则生成的 UUID 是肯定不会重复的。) UUID 作…...
DES与AES算法深度解析:原理、流程与实现细节
DES与AES算法深度解析:原理、流程与实现细节 1. DES算法详解 1.1 算法架构 DES采用16轮Feistel网络结构,核心处理流程如下: 输入64位明文 → IP初始置换 → 16轮迭代处理 → 左右交换 → IP⁻末置换 → 输出64位密文 1.2 核心处理流程 …...
大厂Java面试深度解析:Dubbo服务治理、WebSocket实时通信、RESTEasy自定义注解与C3P0连接池配置实践
第一轮基础问答 面试官:请解释Dubbo服务注册发现的完整流程,以及Sentinel如何实现流量控制? xbhog:Dubbo通过Registry协议将服务地址注册到ZooKeeper,消费者订阅服务节点变更。Sentinel通过ResourceRegistry注册资源…...
【Qt】Qt换肤,使用QResource动态加载资源文件
【Qt】使用QResource动态加载资源文件 0.前言 对于简单的应用,我们可以直接读取 QSS 样式表文件来实现换肤。但一般样式里还带有图片等资源的路径,如果通过相对路径来加载,不便于管理,不过好处是替换图片方便。我们也可以使用 Q…...
五种机器学习方法深度比较与案例实现(以手写数字识别为例)
正如人们有各种各样的学习方法一样,机器学习也有多种学习方法。若按学习时所用的方法进行分类,则机器学习可分为机械式学习、指导式学习、示例学习、类比学习、解释学习等。这是温斯顿在1977年提出的一种分类方法。 有关机器学习的基本概念,…...
【18】爬虫神器 Pyppeteer 的使用
目录 一、Pyppeteer 介绍 二、安装库 三、快速上手 Python爬虫案例 | Scrape Center 在前面我们学习了 Selenium 的基本用法,它功能的确非常强大,但很多时候我们会发现 Selenium 有一些不太方便的地方,比如环境的配置,得安装好…...
封装js方法 构建树结构和扁平化树结构
在JavaScript中,构建树结构和将树结构扁平化是常见的操作。下面我将提供两个方法,一个用于从扁平化的数据中构建树结构,另一个用于将树结构扁平化。 构建树结构 假设我们有一个扁平化的数据列表,每个节点对象包含id和parentId属…...
服务器和数据库哪一个更重要
在当今数字化的时代,服务器和数据库都是构建和运行各种应用系统的关键组成部分,要说哪一个更重要,其实很难简单地给出定论。 服务器就像是一个强大的引擎,为应用程序提供了稳定的运行环境和高效的计算能力。它负责接收和处理来自…...
Nginx 核心功能与 LNMP 架构部署
一、基于授权的访问控制 1.1 功能概述 Nginx 的基于授权的访问控制通过用户名和密码验证机制,限制用户对特定资源的访问。其实现逻辑与 Apache 类似,但配置更简洁,适用于需保护敏感目录或页面的场景(如管理后台)。 …...
Python程序开发,麒麟系统模拟电脑打开文件实现
在Python开发中,模拟电脑打开文件操作(即用默认程序打开文件),可以使用os.system()方法或subprocess模块来执行系统命令。以下是使用os库实现模拟打开文件的代码示例: 使用os.system()方法 import osfile_path &quo…...
打造惊艳的渐变色下划线动画:CSS实现详解
引言:为什么需要动态下划线效果? 在现代网页设计中,微妙的交互效果可以显著提升用户体验。动态下划线特效作为一种常见的视觉反馈方式,不仅能够引导用户注意力,还能为页面增添活力。本文将深入解析如何使用纯CSS实现一…...
gitmodule怎么维护
目录 ci-cd脚本 豆包文档 ci-cd脚本 git submodule init git submodule update cd /var/lib/jenkins/workspace/wvp-server-Dji/wvp-server git checkout Dji2 cd /var/lib/jenkins/workspace/wvp-server-Dji/cloud-sdk git checkout master 豆包文档...
企业战略管理(设计与工程师类)-2-战略规划及管理过程-2-外部环境分析-PESTEL模型实践
PESTEL在AFI框架中的作用 AFI 战略框架(Analyze, Formulate, Implement——哈佛大学商学院的教授 Michael Porter)是企业战略管理中的一个重要理论模型,帮助企业系统性地分析和制定战略。 作为第一阶段Analyze的第一步,PESTEL…...
基于arduino的温湿度传感器应用
温湿度传感器深度解析与多平台开发实战 一、温湿度传感器代码实现(Arduino平台) 1. 基础传感器驱动(DHT11) #include <DHT.h> #define DHTPIN 2 #define DHTTYPE DHT11DHT dht(DHTPIN, DHTTYPE);void setup() {Serial.begin(9600);dht.begin(); }void loop() {del…...
【AI提示词】机会成本决策分析师
提示说明 具备经济学思维的决策架构师,擅长通过机会成本模型分析复杂选择场景 提示词 # Role: 机会成本决策分析师## Profile - language: 中文 - description: 具备经济学思维的决策架构师,擅长通过机会成本模型分析复杂选择场景 - background: 经济…...
基于Springboot + vue实现的列书单读书平台
项目描述 本系统包含管理员和用户两个角色。 管理员角色: 用户管理:管理系统中所有用户的信息,包括添加、删除和修改用户。 书单信息管理:管理书单信息,包括新增、查看、修改、删除和查看评论。 在线书店管理&…...
「Mac畅玩AIGC与多模态07」开发篇03 - 开发第一个 Agent 插件调用应用
一、概述 本篇介绍如何在 macOS 环境下,基于 Dify 平台自带的网页爬虫插件工具,开发一个可以提取网页内容并作答的 Agent 应用。通过使用内置插件,无需自定义开发,即可实现基本的网页信息提取与智能体回答整合。 二、环境准备 1. 确认本地部署环境 确保以下环境已搭建并…...
Headers池技术在Python爬虫反反爬中的应用
1. 引言 在当今互联网环境中,许多网站都部署了反爬虫机制,以防止数据被大规模抓取。常见的反爬手段包括: User-Agent检测(检查请求头是否来自浏览器)IP频率限制(短时间内同一IP请求过多会被封禁ÿ…...
端到端电力电子建模、仿真与控制及AI推理
在当今世界,电力电子不再仅仅是一个专业的利基领域——它几乎是每一项重大技术变革的支柱。从可再生能源到电动汽车,从工业自动化到航空航天,对电力转换领域创新的需求正以前所未有的速度增长。而这项创新的核心在于一项关键技能:…...
Java云原生+quarkus
一、Java如何实现云原生应用? 传统的 Java 框架(如 Spring Boot)虽然功能强大,但在云原生场景下可能显得笨重。以下是一些更适合云原生的轻量级框架: Quarkus(推荐) 专为云原生和 Kubernetes 设计的 Java 框架。支持…...
在yolo中Ultralytics是什么意思呢?超越分析的智能
在YOLO(You Only Look Once)目标检测框架中,Ultralytics 是一家专注于计算机视觉和机器学习技术的公司,同时也是YOLO系列模型(如YOLOv5、YOLOv8等)的官方开发和维护团队。以下是关键点解析: 1. …...
TRAE历史版本下载参考
https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/{此处替换为版本号}/win32/Trae%20CN-Setup-x64.exe 比如版本号为1.0.11939 那么链接为https://lf-cdn.trae.com.cn/obj/trae-com-cn/pkg/app/releases/stable/1.0.11939/win32/Trae%20CN-Setup-x64.exe …...
C++类与对象基础
目录 1.取地址运算符重载 2.初始化列表 3.类型转换 既前面所讲的C类与对象知识,C类与对象——基础知识-CSDN博客 C类与对象——构造函数与析构函数-CSDN博客 C类与对象——拷贝构造与运算符重载_c拷贝对象和对象调用同一函数的输出区别怎么实现-CSDN博客本章我们…...
C# 继承详解
继承是面向对象程序设计(OOP)中的核心概念之一,它极大地增强了代码的重用性、扩展性和维护性。本篇文章将详细讲解C#中的继承机制,包括基础概念、语法特法、多重继承(通过接口实现)、继承的规则和实际应用示…...
多源数据整合与数据虚拟化:构建灵活、高效的数据架构
多源数据整合与数据虚拟化:构建灵活、高效的数据架构 引言 随着大数据时代的到来,数据的多样性和复杂性已经成为了企业面临的一大挑战。不同来源的数据在格式、结构以及存储方式上各不相同,传统的单一数据源管理方法难以应对海量且多样化的数据需求。多源数据整合与数据虚拟…...
代码随想录第39天|leetcode198.打家劫舍、leetcode213.打家劫舍II 、leetcode337.打家劫舍III
1.198. 打家劫舍 - 力扣(LeetCode) 当前房屋偷与不偷取决于前一个房屋和前两个房屋是否被偷,所以就可以得到相应的dp数组。 即,dp[i] max(dp[i-2]nums[i],dp[i-1]); int rob(vector<int>& nums) {//dp[i]:…...
C++ 如何计算两个gps 的距离
C 完全可以计算 三维空间中的 WGS84 坐标点之间的精确欧氏距离。关键是: 要先把经纬度 海拔 (lat, lon, alt) 转换成 ECEF(地心地固坐标系),然后计算欧氏距离即可。 ✅ 使用 GeographicLib::Geocentric 实现三维距离计算…...
通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎|文献速递-深度学习医疗AI最新文献
Title 题目 Hashimoto’s thyroiditis recognition from multi-modal data via globalcross-attention and distance-aware training 通过全局交叉注意力机制和距离感知训练从多模态数据中识别桥本氏甲状腺炎 01 文献速递介绍 桥本氏甲状腺炎(HT)&a…...
网络原理—应用层和数据链路层
IP协议 ⭐IP协议报头上面的知识 地址管理 使用一套地址体系(IP协议),来描述互联网上每个是被所在的位置。 IP数据报的长度(拆包和组包) 可以对CUP进行拆包,可以多个IP报头装一个CUP数据。 8位生存时间(TTL) 这里的时间不是传统意义上的,…...
Cell Res | Stereo-seq揭示人类肝癌浸润区促进肝细胞-肿瘤细胞串扰、局部免疫抑制和肿瘤进展
有同学给了一篇23年的空间文章,研究的一个核心概念是肿瘤边缘的"侵袭区",文章中定义的是以肿瘤边缘为中心的500微米宽的区域,这里是肿瘤细胞侵袭和转移的活跃前沿,包含复杂的细胞成分及独特的分子特征,存在免…...
Mybatis-plus代码生成器的创建使用与详细解释
Mybatis-plus代码生成器的创建使用与详细解释 一、代码生成器概述 1. 定义(什么是代码生成器) 在软件开发过程中,存在大量重复性的代码编写工作,例如实体类、Mapper 接口、Service 接口及实现类等。代码生成器就是为了解决这类问题而诞生的工具。MyBa…...
swagger2升级至openapi3的利器--swagger2openapi
背景: 因为项目需要升级JDK,涉及到swagger2升级至openapi3的情况。由于swagger 2和openapi 3的语法差距太大,需要对yaml进行升级。无奈单个yaml文件的内容太大,高至4万多行,手动进行语法的转换肯定是不可能了ÿ…...
私有云与虚拟化攻防2(OpenStack渗透场景,大部分云平台都是基于此进行二次开发)
虚拟化和私有云的一些区别 虚拟化只是简单资源虚拟化,一虚多私有云除了能够实现虚拟化以外更重要的是服务自助化、自动化什么是Openstack OpenStack是一个开源的云计算管理平台项目,是属于基础设施即服务(IaaS),是一个云操作系统。 Nova(控制 ) 提供计算资源,虚拟机、容…...
前缀和 后缀和 --- 寻找数组的中心下标
题目链接 寻找数组的中心下标 给你一个整数数组 nums ,请计算数组的 中心下标 。 数组 中心下标 是数组的一个下标,其左侧所有元素相加的和等于右侧所有元素相加的和。 如果中心下标位于数组最左端,那么左侧数之和视为 0 ,因为…...
关于插值和拟合(数学建模实验课)
文章目录 1.总体评价2.具体的课堂题目 1.总体评价 学校可以开设这个数学建模实验课程,我本来是非常的激动地,但是这个最后的上课方式却让我高兴不起哦来,因为老师讲的这个内容非常的简单,而且一个上午的数学实验,基本…...
深入学习解读:《数据安全技术 数据分类分级规则》【附全文阅读】
该文详细阐述了数据安全技术的数据分类分级规则,内容分为基本原则、数据分类规则、数据分级规则及数据分类分级流程四大部分。 基本原则强调科学实用、动态更新、就高从严及53原则(虽表述不清,但可理解为多重原则的结合),同时要求边界清晰、点面结合。 数据分类规…...
Windows环境下用pyinstaller将python脚本编译为exe文件
下载 https://pypi.org/project/pyinstaller/#filespyinstaller-6.13.0-py3-none-win_arm64.whl 安装 cmd命令行中执行:pip install pyinstaller-6.13.0-py3-none-win_amd64.whl得先安装pythonpip若找不到命令,需要加到环境变量 测试 pyinstaller --ve…...
每日算法-250429
每日 LeetCode 题解 (2025-04-29) 大家好!这是今天的 LeetCode 刷题记录,主要涉及几道可以使用贪心策略解决的问题。 2037. 使每位学生都有座位的最少移动次数 题目描述: 思路 贪心 解题过程 要使总移动次数最少,直观的想法是让每个学生…...
Go语言Context机制深度解析:从原理到实践
一、Context概述 Context(上下文)是Go语言并发编程的核心机制之一,主要用于在goroutine之间传递取消信号、截止时间和其他请求范围的值。Google在Go 1.7版本中将其引入标准库,现已成为处理并发控制和超时的标准方案。 核心作用 …...
大数据学习(115)-hive与impala
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一…...
php学习笔记(全面且适合新手)
以下是专为 PHP 7.4 初学者设计的全面学习文档,涵盖基础语法、细节语法和进阶语法,结合 PHP 7.4 新特性与实战案例,帮助系统掌握 PHP 开发: 为什么特地做7.4的笔记而不做8的?因为公司用的7.4,哈哈 一、基…...
Nginx核心功能
目录 一:基于授权的访问控制 1:基于授权的访问控制简介 2:基于授权的访问控制步骤 (1)使用htpasswd 生成用户认证文件 (2)修改密码文件权限为400,将所有者改为nginx,…...
基于Spring Boot 电商书城平台系统设计与实现(源码+文档+部署讲解)
技术范围:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论文…...
流量控制机制
基于信用(credit-based)的流量控制机制 在基于信用的流量控制中,每个下游路由器都维护了一个信用计数器,用于跟踪其可用的缓冲空间。当一个数据包(或者说flit)被成功接收后,下游路由器会向上游…...
ImageDataGenerator ()用法简介
ImageDataGenerator 是 Keras 中用于图像数据增强和预处理的工具。它允许你实时生成增强的图像数据,这在训练深度学习模型时特别有用,因为它可以帮助提高模型的泛化能力。 以下是 ImageDataGenerator 的一些常见用法和参数: 基本用法 导入模块 from keras.preprocessi…...
【Linux】服务自启动设置的方式
关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd...
Wi-SUN与LoRa和NB-IoT通信技术的对比
LoRa和NB-IoT也都是LPWAN(低功耗广域网)的一种,不同的是他们分处在不同的频段。分为授权频段和非授权频段。(NB-IoT)其采用现有的3G、4G网络,需要通过电信运营商申请才可以使用。使用非授权频段的技术主要为…...
科研入门规划
作为研0学生,建议采取 “边打基础边探索,逐步深入” 的策略。 📌 阶段一:先建立基础框架(前1-3个月) 1. 快速搭建知识框架 目标:了解领域全貌,明…...
《P3143 [USACO16OPEN] Diamond Collector S》
题目描述 奶牛 Bessie 一直喜欢闪闪发光的物体,她最近在业余时间开始了一项爱好——挖掘钻石!她收集了 N 颗大小各不相同的钻石(N≤50,000),并希望将它们中的一部分放在谷仓里的两个展示柜中展示。 由于 Bessie 希望…...
纯C协程框架NtyCo
原文是由写的,写的真的很好,原文链接:纯c协程框架NtyCo实现与原理-CSDN博客 1.为什么会有协程,协程解决了什么问题? 网络IO优化 在CS,BS的开发模式下,服务器的吞吐量是一个受关注的参数&#x…...