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

## 38|Python 分布式 ID 与雪花算法:高并发订单号设计

38|Python 分布式 ID 与雪花算法:高并发订单号设计

文章目录


专栏定位:Python 工程化进阶(第38章)
适读人群:后端工程师、高并发交易与分布式系统同学
摘要
自增数据库主键简单,但在分库分表、暴露业务量、合并数据时问题多。雪花算法(Snowflake)类 ID 将时间戳、机器号、序列号编码为 64 位整数,趋势递增、可按时间粗略排序,适合订单号、消息 ID。本章讲清时钟回拨、workerId 分配、序列溢出与 Python 实现要点,并对比 UUID、数据库号段、Redis 自增等方案的取舍。
目录
业务对 ID 的要求Snowflake 位域划分时钟回拨与容灾Python 实现骨架架构权衡表、实验、7天指标双案例复盘术语与面试题版权声明
业务对 ID 的要求
全局唯一、趋势有序(可选)、可读性低(防猜测)、生成 QPS 高、无单点(或单点可切换)。
Snowflake 位域划分(经典 41+5+5+12)
时间戳毫秒数据中心 + 机器毫秒内序列
具体位数可按业务调整,但必须文档化并在全集群一致。
时钟回拨与容灾
NTP 同步可能导致时钟回拨。策略:检测回拨则短暂等待、或借用「最大漂移容忍」、或使用外部租约分配 workerId。生产必须监控时钟偏移。
Python 实现骨架
import time
import threading

class Snowflake:
definit(self, datacenter_id: int, worker_id: int):
self.datacenter_id = datacenter_id & 0x1F
self.worker_id = worker_id & 0x1F
self.sequence = 0
self.last_ts = -1
self.lock = threading.Lock()

def _now_ms(self) -> int: return int(time.time() * 1000) def next_id(self) -> int: with self.lock: ts = self._now_ms() if ts < self.last_ts: raise RuntimeError("clock moved backwards") if ts == self.last_ts: self.sequence = (self.sequence + 1) & 0xFFF if self.sequence == 0: while self._now_ms() <= self.last_ts: time.sleep(0.0005) ts = self._now_ms() else: self.sequence = 0 self.last_ts = ts return ((ts - 1288834974657) << 22) | (self.datacenter_id << 17) | (self.worker_id << 12) | self.sequence

epo

http://www.jsqmd.com/news/553738/

相关文章:

  • CTFhub实战:病毒文件解密、modbus协议解析与注册表取证
  • 京东e卡回收线上平台:快速、安全的兑换新选择 - 团团收购物卡回收
  • Facefusion小白避坑指南:轻松解决人脸检测失败的常见问题
  • Janus-Pro-7B赋能前端开发:基于Vue.js的智能代码助手实现
  • Phi-3-mini-128k-instruct部署教程:基于vLLM的GPU显存优化方案(A10/A100实测)
  • Docker与OpenSIPS 3.1:解决NAT问题的两种高效方案
  • AI 落地应用领域深度报告
  • CosyVoice集成Java Web应用:构建智能语音播报后端服务
  • Qwen-Image-Lightning数据库课程设计实战:ER图智能生成系统
  • 如何制定网站推广和 SEO 的长期战略
  • 终极指南:用OpenCore Legacy Patcher让老旧Mac焕发新生,完整支持macOS Monterey
  • DeepSeek-V3量化神优化:w4a8精度反超官方2.29%
  • 3大核心功能解析:CefFlashBrowser如何让你的Flash内容重获新生
  • lychee-rerank-mm保姆级教程:支持中文的轻量级多模态打分工具
  • Qwen3-TTS多语言语音合成教程:支持中文、英文、日文等10种语言
  • 雪女-斗罗大陆-造相Z-Turbo企业级应用:自动化营销素材生成平台
  • Go Routine 调度器运行机制探秘
  • 突破Mac NTFS限制:全平台文件共享零成本解决方案
  • 3步掌握视频PPT提取:从录屏到精美PDF的智能转换秘诀
  • 系统安全防护的组件级重构:从功能缺失到完整恢复的技术路径
  • Python内存泄漏诊断实战:3步精准定位、4类高频场景、7个必查代码模式
  • Glyph镜像实测分享:低质量图片文字识别,效果出乎意料
  • GLM-Image WebUI快速上手:无需代码,浏览器直连http://localhost:7860
  • Zotero 7与百度网盘协同作战——ZotFile失效后的文献附件同步新方案
  • Coze Studio实战:5分钟搞定你的第一个AI翻译助手(附Doubao-Seed-1.6模型配置)
  • 旧iOS设备系统优化完全指南:让你的设备重获新生
  • 跨设备滚动优化:Scroll Reverser让macOS操作效率提升80%的效率工具
  • Qwen3-ASR-1.7B开源大模型:方言识别精度在教育领域方言教学中的价值
  • 提升网页链接管理效率的完整方案:从痛点到解决方案
  • Qwen3-0.6B-FP8模型服务监控与性能调优实战