分布式ID之雪花算法

1. Seata对雪花算法生成ID的改良

  • 滑动验证页面  (含代码&讲解)
  • Seata基于改良版雪花算法的分布式UUID生成器分析:时间戳和节点ID位置进行了调换。官网:Seata基于改良版雪花算法的分布式UUID生成器分析 | Apache Seata关于新版雪花算法的答疑 | Apache Seata

  • Seata内置分布式ID的代码位置:io.seata.common.util.IdWorker,可以直接使用;

  • com.baomidou.mybatisplus.core.toolkit.IdWorker也有ID生成器。

2. 雪花算法原理

雪花算法(Snowflake Algorithm)是一种生成全局唯一ID的分布式算法,由Twitter公司开发。它的主要思想是将时间戳、工作节点标识和序列号组合成一个64位的整数,结构如下:

  1. 未使用位(1位):最高位未使用,保持为0,因为二进制中最高位为1表示负数,而雪花算法生成的ID是正数。
  2. 时间戳(41位):接下来的41位表示毫秒级的时间戳,能够表示大约69年的毫秒数。
  3. 数据中心和工作机器ID位(10位):接下来的5位表示数据中心ID,接下来的5位表示工作机器ID,合计10位,可以表示最多32个数据中心,每个数据中心最多32台工作机器,共1024台机器。
  4. 序列号位(12位):最后的12位表示同一毫秒内产生的不同ID,能够表示的最大数量为4096。

雪花算法的工作流程大致如下:

  • 获取时间戳:生成或获取当前时间的毫秒级时间戳。
  • 机器ID配置:每台机器配置唯一的机器ID。
  • 序列号管理:在同一毫秒内,使用计数器或其他方式生成序列号,确保不超过12位的限制。
  • 组合生成ID:将时间戳、机器ID和序列号按照指定的顺序组合起来,生成一个64位的长整型ID。

雪花算法能够在分布式系统中保证ID的唯一性和有序性,广泛用于如数据库主键、分布式系统中生成唯一标识等场景。

2.1 雪花算法中的工作节点标识如何分配?

在雪花算法中,工作节点标识通常被分为两部分:数据中心ID和工作节点ID,它们都是为了确保在全球范围内的分布式环境中能够生成全局唯一的ID。以下是分配方法:

  1. 确定数据中心数量:首先,你需要知道你的系统中有多少个数据中心或者机房。这些数据中心会被分配到5位的二进制编码中。

  2. 分配数据中心ID:给每个数据中心分配一个唯一的ID,这个ID需要在0到(2^5)-1之间,即0到31。例如,第一个数据中心可以分配0,第二个分配1,以此类推。

  3. 确定工作节点数量:在每个数据中心内,你可以有多个工作节点或服务器。同样,这些节点也需要唯一的ID。给每个工作节点分配一个5位的二进制编码,在0到(2^5)-1之间,但是要确保每个数据中心内的ID不能重复。

  4. 组合数据中心ID和工作节点ID:将数据中心ID和工作节点ID拼接起来,形成一个10位的二进制数字,这就是工作节点标识。

  5. 转换为十进制:如果需要,可以将这个二进制数字转换为十进制以便于人类阅读和理解。

 

2.2 雪花算法生成的ID一共多少位?

雪花算法生成的ID总共有64位,这64位由以下几个部分组成:

  • 1位符号位:用于表示时间戳是正还是负,一般始终为0,表示正数。
  • 41位时间戳:精确到毫秒的时间戳,可以使用约69年(因为2^41 / (1000 * 60 * 60 * 24 * 365) ≈ 69)。
  • 10位工作节点ID:包括5位的数据中心ID和5位的工作节点ID,总共可以支持32个数据中心,每个数据中心最多有32个工作节点。
  • 12位序列号:在一个毫秒内,同一工作节点可以生成的最大序列号,可以支持每个节点每毫秒生成4096个ID。

2.3 雪花算法能支持多少个不同的数据中心?

雪花算法中支持的数据中心数量是2的5次方,即32个。

 

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

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

相关文章

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

第二证券|股息分红和送股哪个好?

在股票投资中,股息分红和分红送股是两种常见的股票分红方法。关于股息分红和送股哪个好,第二证券下面就为我们具体介绍一下。 股息分红和送股哪个好并没有一个绝对的答案,它们只是上市公司向股东分配利润的不同方法。股息分红的好处是投资者…

武汉星起航:挂牌上海股权中心,开启资本新篇章助力跨境电商飞跃

2023年10月30日,武汉星起航电子商务有限公司在上海股权托管交易中心成功挂牌展示,标志着这家在跨境电商领域拥有卓越声誉的企业正式迈入了资本市场的大门。对于武汉星起航来说,这不仅是其发展历程中的一个重要里程碑,更是对其业务…

STM32-TIM定时器与PWM输出

学习目标: 1. 熟练掌握 TIM 的参数配置。 2. 掌握通道的参数配置。 3. 深刻理解 PWM 与功率的关系。 4. 理解 PWM 的原理示意。 一 什么是 PWM 输出 PWM ( pulse width modulation )一种脉冲宽度调节技术。 PWM 的效果是什么样子&#xf…

AOMEI Partition Assistant傲梅分区助手技术员版:专业级的硬盘分区利器

在数字化时代,数据存储和管理变得愈发重要。对于电脑技术员而言,一款功能强大、操作简便的分区工具无疑是提高工作效率的得力助手。而傲梅分区助手技术员版(AOMEI Partition Assistant)正是这样一款备受赞誉的专业级硬盘分区软件。…

Day23.一刷数据结构算法(C语言版) 39组合总和;40组合总和II;131分割回文串

一、39组合总和 本题是集合里元素可以用无数次,那么和组合问题的差别,其实仅在于对startIndex上的控制 题目链接:组合总和 文章讲解:代码随想录 视频讲解:带你学透回溯算法-组合总和 (39.组合总和&#xff…

从零开始构建大语言模型(MEAP)

原文:annas-archive.org/md5/c19a4ef8ab1664a3c5a59d52651430e2 译者:飞龙 协议:CC BY-NC-SA 4.0 一、理解大型语言模型 本章包括 大型语言模型(LLM)背后的基本概念的高层次解释 探索 ChatGPT 类 LLM 源自的 Transfo…

workminer之dht通信部分

workminer是通过SSH爆破传播的挖矿木马,感染后会释放xmrig挖矿程序利用主机的CPU挖取北方门罗币。该样本能够执行特定的指令,指令保存在一个配置文件config中,config文件类似于xml文件,里面有要执行的指令和参数,样本中…

spring cloud eureka 初始化报错(A bean with that name has already been defined)

报错内容 The bean ‘eurekaRegistration’, defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration E u r e k a C l i e n t C o n f i g u r a t i o n . c l a s s ] , c o u l d n o t b e r e g i s t e r e d . A …

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测

回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测 目录 回归预测 | Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现NGO-ESN北方苍鹰算法优化回声状态网络…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

C++:map和set的封装

关于红黑树的模拟实现&#xff0c;大家不清楚的先去看看博主的博客再来看这篇文章&#xff0c;因为set和map的封装底层都是利用用的红黑树。所以这里不会过多介绍红黑树的相关内容&#xff0c;而更多的是去为了契合STL中的红黑树去进行改造&#xff0c;让封装的set和map能够去复…

CMake使用

一、CMake 是什么 CMake 是一个跨平台的自动化构建系统&#xff0c;它使用配置文件 CMakeLists.txt 来管理软件构建过程。CMake 基于 Makefile 做了二次开发。 二、单个文件目录 # CMake 最低版本号要求 cmake_minimum_required(VERSION 3.16.3)# 工程名 project(CMakeSingle)…

uniapp自定义返回事件(封装)

uniapp自定义返回事件 在我们使用uniapp时&#xff0c;我们导航栏一般都是自定义的&#xff0c;比如用uview框架的导航栏&#xff0c;那么返回事件通常会遇到以下几个问题 返回事件前需要做一些额外的处理 h5项目刷新页面后返回失效 返回按钮点击后到指定页面 如果只是监听返…

PhotosCollage for Mac:优雅且实用的照片拼贴软件

PhotosCollage for Mac是一款优雅且实用的照片拼贴软件&#xff0c;为Mac用户提供了一个便捷、高效的平台&#xff0c;以创建精美、个性化的照片拼贴作品。 PhotosCollage for Mac v1.4.1激活版下载 该软件界面简洁直观&#xff0c;操作便捷。用户只需将想要拼贴的照片拖入“照…

CSS基础:position定位的5个类型详解!

你好&#xff0c;我是云桃桃。 一个希望帮助更多朋友快速入门 WEB 前端的程序媛。 云桃桃-大专生&#xff0c;一枚程序媛&#xff0c;感谢关注。回复 “前端基础题”&#xff0c;可免费获得前端基础 100 题汇总&#xff0c;回复 “前端工具”&#xff0c;可获取 Web 开发工具合…

Andorid复习

组件 TextView 阴影 android:shadowColor"color/red" 阴影颜色android:shadowRadius"3.0" 阴影模糊度&#xff08;大小&#xff09;android:shadowDx"10.0" 横向偏移android:shadowDy"10.0" 跑马灯 这里用自定义控件 public cla…

日本极致产品力 | 源自内蒙古,日本99.7%的人都喝过都百年畅销饮料

​《极致产品力》日本深度研学是一个顾问式课程,可以帮助企业找产品、找方向、找方法,在日本终端市场考察中洞悉热销产品背后的成功逻辑,了解最新最前沿的产品趋势和机会。结合日本消费趋势中国转化的众多经验,从品牌、包装、卖点、技术和生产工艺等多方面寻找中国市场的解决方…

WIFI/BT中蓝牙的硬件资源是如何调度的 UART和PCM接口传输的是什么信号

安卓或IOS手机中&#xff0c;wifi/bt中的蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。M.2 wifi/bt模块或其他形式的模块中&#xff0c;蓝牙是如何调度硬件资源的&#xff0c;尤其是UART和PCM是如何分配的。今天我们就图文并茂的解决这个问题。 蓝牙文件…

新买的设备自带的仪器校准证书,是否可以作为校准报告使用?

设备在刚刚购买时&#xff0c;有些商家会承诺&#xff0c;在交付设备的同时&#xff0c;还会交付设备的校准证书&#xff0c;这证书是附赠的&#xff0c;属于商家给客户的一种福利&#xff0c;面对附赠的仪器校准证书&#xff0c;很多客户也会有疑惑&#xff0c;这附赠的证书有…