ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

雪花算法如何确保全局唯一,原理详解

2021-06-13 23:01:58  阅读:192  来源: 互联网

标签:二进制 配置 雪花 算法 详解 全局 ID 分布式


概念部分:

在这里插入图片描述

雪花算法,是 Twitter 开源的分布式 id 生成算法。

一般数据库的ID自增并不能满足分布式场景下全局唯一的情况。
雪花算法主要是为了在分布式的场景下,生成有序,且全局唯一的ID。
但是也不是所有地方/所有表都需要生成全局唯一ID,一般应用于比如订单,商品信息等系统主流程的情况下。也就是说一般像非主业务部分(系统配置,工作流配置等)
系统配置:比如配置某个开关,比方美团订单派单给配送员的公里数配置,这个公里数一定不是在系统中写固定值的,一定是某个可以配置的范围值。否则改一次配置需要发一次版也太麻烦了。再比方某些邮件通知内容或者模板的配置。邮件的模板内容肯定也不是在系统中写成固定的。
工作流的配置:工作流的配置也是如此,系统本身在业务上一般都有一些业务流程,这些业务流程涉及到审核审批的也一定是可灵活配置,非固定的。
so,这些和系统主业务流程相关性比较少且一般由系统工作人员去配置的不会用雪花ID。一般数据库的自增就已经够用了。因为这些通常不涉及高并发的场景。
刚才提到,雪花算法是满足分布式场景下ID全局唯一的情况,它是通过64bit的二进制数进行控制生成全局唯一ID的。
64位的二进制数中,
第一位表示正负,所以第一位都是0
共有41位二进制数用来存储时间戳
共有10位二进制数用来存储分布式场景下不同的机器ID,其实这里再细分还可以再分前5位是机房ID,后5位是机器ID,如果只有一台机器或者一个机房,那这里直接保持一个固定数即可。
共有12位二进制数表示序列号,这里的序列号用于在同一毫秒中计数ID生成的数量。这里也就决定了在同一毫秒数中,雪花ID最多生成4096个ID数。如下是12位二进制数转为二进制图:
在这里插入图片描述
雪花ID64位二进制数分布如下:
在这里插入图片描述

概念部分就如上了,接下来即是代码部分:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

标签:二进制,配置,雪花,算法,详解,全局,ID,分布式
来源: https://blog.csdn.net/cssnnd/article/details/117886257

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有