背景

在分布式微服务系统中,通常需要全局唯一的序列号,需求实现简单高效,通常的做法可以用数据库的自增id,UUID生成等。但数据库自增id局限在于依赖于数据库表,在效率上有所折扣,尤其是高并发量的场景。而UUID一般比较长,关键是无序的。twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移到Cassandra,因为Cassandra没有顺序ID生成机制,所以开发了这样一套全局唯一ID生成服务。

snowflake结构

Bits 名字 说明
1 符号位 0,通常不使用
41 时间戳 精确到毫秒数,支持 2 ^41 /365/24/60/60/1000=69.7年
10 工作进程编号 支持 1024 个进程
12 序列号 每毫秒从 0 开始自增,支持 4096 个编号

snowflake生成的ID整体上按照时间自增排序,一共加起来刚好64位,为一个Long型(转换成字符串后长度最多19)。并且整个分布式系统内不会产生ID碰撞(由datacenter和workerId作区分),工作效率较高,经测试snowflake每秒能够产生26万个ID。

应用与实现

定义接口KeyGenerator,有方法generateKey()。实现类DefaultKeyGenerator,是默认的id生成器。对于工作线程的确定,可以借助通过 Zookeeper、Consul、Etcd 等提供分布式配置功能的中间件,也可以直接通过该机器的ip获取工作进程编号。

目前,国内很多大型互联网公司都是基于这种方式实现的id生成器,一些开元的分布式数据库中间件也是基于此算法实现数据库主键的,比如myCat, sharding-JDBC等。

基于snowflake的Id序列号生成器相关推荐

  1. oracle 全局id,基于SnowFlake 全局ID 生成器 go-id-worker

    snowflake的结构如下(每部分用-分开): 0 - 0000000000 0000000000 0000000000 0000000000 0 - 00000 - 00000 - 0000000 ...

  2. 基于美团Leaf-Segment的双buffer方案实现序列号生成器

    业务背景 有时项目中对于流水号有一些特殊的需求.比如,和业务A有关数据,我们在落库时想要给每条数据添加一个流水号字段,用于作为全局唯一标识.流水号格式规则如下,如:BTA(业务A代号)+年月日(202 ...

  3. 基于单例模式的多键值序列号生成器实现(支持缓存)

    之前在BlogJava上发表过这篇文章,那时没怎么做整理.想不到已经有博友把它弄到ITEye来了(虽然写得水平差,但还是希望那位博友能注明是转载的).这次稍作了整理,自己也加深下印象. 使用场景:用于 ...

  4. 序列号及序列号生成器(号段模式,数据库模式)详细介绍(建议收藏)

    前言 现如今,数据的唯一性和可追溯性变得越来越重要.从简单的数据库主键到复杂的分布式系统,唯一标识符在各种场景中都发挥着关键作用.序列号,作为一种广泛应用的唯一标识符,为我们提供了确保数据完整性和一致 ...

  5. 微信序列号生成器架构设计及演变

    一.摘要 微信在立项之初,就已确立了利用数据版本号实现终端与后台的数据增量同步机制,确保发消息时消息可靠送达对方手机,避免了大量潜在的家庭纠纷.时至今日,微信已经走过第五个年头,这套同步机制仍然在消息 ...

  6. 加密解密软件VMProtect教程(八)许可制度之序列号生成器

    VMProtect是新一代软件保护实用程序.VMProtect支持德尔菲.Borland C Builder.Visual C/C++.Visual Basic(本机).Virtual Pascal和 ...

  7. 万亿级调用系统:微信序列号生成器架构设计及演变

    "每天万亿级调用的重量级系统,每次申请序列号平时调用耗时1ms,99.9%的调用耗时小于3ms,服务部署于数百台4核CPU服务器上!" 老司机介绍: 曾钦松,微信高级工程师,目前负 ...

  8. 雪花算法snowflake分布式id生成原理详解,以及对解决时钟回拨问题几种方案讨论

    文章目录 一.前言 二.雪花算法snowflake 1.基本定义 2.snowflake的优缺点 三.Java代码实现snowflake 1.组装生成id 2.计算最大值的几种方式 3.反解析ID 4 ...

  9. 万亿级调用下的优雅——微信序列号生成器架构设计及演变(上)

    版权声明:本文由曾钦松原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/200 来源:腾云阁 https://www.qcl ...

  10. java查询序列_基于JAVA的苹果序列号查询api调用代码实例

    代码描述:基于JAVA的苹果序列号查询api调用代码实例 关联数据:苹果序列号 接口地址:http://www.juhe.cn/docs/api/id/37 1.[代码][Java]代码 import ...

最新文章

  1. 在CISCO路由器上实现CHAP认证
  2. 在线CSS工具及相关资源收集
  3. 迁移数据文件到ASM【转】
  4. LINUX修改文件权限 学习
  5. windows中wnmp设置nginx启动脚本
  6. 使用halcon将一个圆上的点拟合成圆形并且求出圆心
  7. 1090 Highest Price in Supply Chain (25)
  8. 为什么我不推荐你使用vue-cli创建脚手架?
  9. 文本聚类kmeans
  10. 博弈论总结(题目合集)
  11. Python神经网络学习--神经网络知识先导(一)--什么是神经网络?
  12. 详解闲鱼推荐系统(长文收藏)
  13. Log-normal distribution对数正态分布
  14. 【小程序】小程序安卓,ios,ipad兼容问题
  15. pfamscan 的使用_InterProScan的使用教程
  16. Java程序员如何能进入阿里、大众点评这样的大型互联网公司?
  17. 【面试】网易游戏面试题目整理及答案(3)
  18. 《Redis学习三之面试》
  19. Windows 平台下面的IOCP技术 Linux下面Epoll 还有FreeBSD下面Kqueue的应用了。跨平台库行业里面最出名的莫过于ACE、ASIO(Boos公司)两大支持库支持IOCP
  20. NCH SoundTap Plus for mac(苹果电脑录音软件)

热门文章

  1. 大数据工程师简历_大数据工程师简历3份
  2. 贝叶斯网络(概率图模型)
  3. iOS录音及播放全解
  4. 5G学习-3GPP协议入门
  5. ionic app 开发学习
  6. 实践教程 | 万字长文,值得收藏/参考的OpenCV C++基础代码
  7. PE安装win10系统
  8. 百度文库源码php,仿百度文库或豆丁网在线浏览doc.pdf.xls.txt源码
  9. oc渲染器实时预览用的是编辑器细分,不是渲染器细分。
  10. 黑客帝国中比较酷炫的代码雨的实现