当前位置: 首页 > news >正文

雪花算法生成分布式ID

参考

https://zhuanlan.zhihu.com/p/687957959

分布式唯一 ID 生成算法笔记 | 羽殇之舞的个人博客

雪花算法

64Bit,强依赖时间戳,所以整体趋势会随着时间递增。

  • 1bit 不用:因为二进制中最高位是符号位,1 表示负数,0 表示正数,生成的 id 一般都是用整数,所以最高位固定为 0
  • 41bit 时间戳:这里采用的就是当前系统的具体时间,单位为毫秒
  • 10bit 工作机器 ID(workerId):每台机器分配一个 id,这样可以标示不同的机器,但是上限为 1024(2^10次方),标示一个集群某个业务最多部署的机器个数上限
  • 12bit 序列号(自增域):表示在某一毫秒下,这个自增域最大可以分配的 bit 个数,在当前这种配置下,每个节点每毫秒可以分配 2^12 = 4096 个不同的ID,当达到最大值时会从0重新开始。

时间回拨

当出现虚拟机、容器时间矫正或手动调整时间、硬件故障时会出现时间回拨,即系统时间被调整到一个比之前时间更早的时刻。

将原本 10 位的机器码拆分成 3 位时钟序列及 7 位机器码。发生时间回拨的时候,时间已经发生了变化,那么这时将时钟序列新增 1 位,重新定义整个雪花 Id。为了避免实例重启引起时间序列丢失,因此时钟序列最好通过 DB 存储起来。

这当然会导致分布式实例规模由 210(1024)2^{10}(1024)210(1024) 降至 27(128)2^7(128)27(128),同时每个分布式实例支持最多 23(8)2^3(8)23(8) 次时间回拨。

http://www.dtcms.com/a/360210.html

相关文章:

  • AI 智能体汇总,自动执行任务的“真 Agent”
  • 动态规划入门(三):一些经典动态规划模型
  • 赵玉平《刘备谋略》读书笔记(下部)
  • 小迪自用web笔记22
  • 01背包day35
  • 设计模式 | 常见的设计模式(单例、工厂、代理、适配器、责任链等等)
  • VisionProC#联合编程火花塞距离检测与VisionPro操作
  • libmodbus库,c++配置方法
  • 【CUDA入门·Lesson 1】Ubuntu实战:CUDA 概念、nvidia-smi 工具与 GPU 参数详解
  • 在Unity中,让子物体不随父物体移动或转动的方法!
  • 下一代防火墙(NGFW):从定义到功能
  • 试试 Xget 加速 GitHub 克隆仓库
  • 【WEB】[BUUCTF] <GXYCTF2019禁止套娃>《php函数的运用》
  • 大模型RAG项目实战:向量数据库Faiss
  • 【初始web3】什么是web3
  • 大模型时代:用Redis构建百亿级向量数据库方
  • 【自记】 Python 中函数参数前加 *(单星号)的解包可迭代对象写法说明
  • OpenCL C 内存对象
  • 第2.5节:中文大模型(文心一言、通义千问、讯飞星火)
  • 在线图片特效工具,600种创意模板
  • Python入门教程:常用第三方库Matplotlib(基本用法)下载、安装、参数解析教程
  • 案例——从零开始搭建 ASP.NET Core 健康检查实例
  • 【MLLM】语音端到端大模型和Voice Agent发展
  • 【Java进阶】Java与SpringBoot线程池深度优化指南
  • GitHub 热榜项目 - 日榜(2025-08-31)
  • 【AI编程工具】使用Cursor快速搭建一套小型项目管理系统
  • mysql5.7.44安装遇到登录权限问题
  • 在Linux环境安装Maven(保姆级别)
  • macos调用chrome后台下载wasm-binaries.tar.xz
  • k8s---prometheus 监控