分布式ID之雪花算法

1. Seata对雪花算法生成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个。

相关推荐
爱吃提升9 小时前
python 分布式爬虫、爬虫合规与综合实战项目
分布式·爬虫·python
ZENERGY-众壹12 小时前
跨品牌逆变器升级:华为锦浪德业 API 对接的 7 个坑
分布式·华为·数据归一化·光伏运维·逆变器api
薛定谔的猫198216 小时前
LLaMA-Factory +DeepSpeed 分布式多卡训练实战全解
分布式·deepspeed·zero·多卡训练·多卡分布式训练
稚南城才子,乌衣巷风流17 小时前
RabbitMQ 消息队列:从入门到实战
分布式·rabbitmq
Ulyanov17 小时前
Python雷达电子对抗仿真引擎(一):打破单体瓶颈,构建微服务与ECS架构的顶层设计
开发语言·python·微服务·云原生·架构·雷达电子对抗
Database_Cool_1 天前
单机 MySQL 迁移到分布式数据库方便吗?阿里云 PolarDB-X 100% MySQL 协议兼容零改造平滑迁移
数据库·分布式·mysql
REST_30271 天前
告别Excel孤岛:一款任务链路可视化工具带来的真实改变
大数据·微服务·云计算·编辑器·excel·动态规划
beibeix20152 天前
CppMicroServices 核心概念:动态服务注册与模块化系统
微服务·mitk
微三云 - 廖会灵 (私域系统开发)2 天前
电商系统从单体到微服务拆分实践:拆什么、怎么拆、拆完后怎么办
微服务·云原生·架构
肥胖小羊2 天前
解决企业微信 AccessToken 刷新并发冲突的分布式锁机制实践
分布式·企业微信