1.  什么是时钟回拨问题

由于生成随机数时依赖于服务器的时间,加入机器发生了故障或者别的情况,对于服务器的时间进行了回拨,那么会导致生成的 ID 可能发生重复。

2. 雪花算法

雪花算法是一种分布式 ID 生成算法,首先它生产的是一个 64 bit 为的ID,这 64 bit 位中划分成多段:

第1个bit位:保留位,无实际作用
第2-42的bit位:这41位表示时间戳,精确到毫秒级别
第43-52的bit位:这10位表示专门负责生产ID的工作机器的id
第53-64的bit位:这12位表示序列号,也就是1毫秒内可以生成2的12方个不同的 ID

好处:

毫秒数在高位,自增序列在低位,整个ID都是趋势递增的。
作为DB表的主键,索引效率高。
不依赖数据库等第三方系统,以服务的方式部署,稳定性更高,生成ID的性能也是非常高的。
高性能高可用:生成时不依赖于数据库,完全在内存中生成。
容量大,每秒中能生成数百万的自增ID。
可以根据自身业务特性分配bit位,非常灵活。

缺点:

依赖于机器时钟,如果机器上时钟回拨,会导致发号重复或者服务会处于不可用状态。

不是严格全局递增的

3. 解决方案

每个一段时间内保存过去一段时内 机器当前这一毫秒产生的 ID 的最大值,例如使用Map形式,就是<机器的id,最大值>,如果发生了时钟回拨,直接在这台机器对应的最大值继续自增生成 ID 即可。

浅谈解决雪花算法的时钟回拨问题相关推荐

  1. 从sharding-jdbc看如何解决雪花算法的时钟回拨问题

    SNOWFLAKE SNOWFLAKE(雪花算法)是默认使用的主键生成方案,生成一个 64bit的长整型(Long)数据. sharding-jdbc 中雪花算法生成的主键主要由 4部分组成,1bit ...

  2. snowflake算法的时钟回拨问题如何解决(面试)

    snowflake算法的时钟回拨问题如何解决 snowflake算法:一串数字,用很多的二进制里的bit位,去代表不同的东西:40多位都是当前机器上的时间,中间有几位是代表的是机器id,自增长的id: ...

  3. 浅谈Base64编码算法

    一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...

  4. 浅谈流处理算法 (1) – 蓄水池采样

    转载自  浅谈流处理算法 (1) – 蓄水池采样 前言 现如今,"大数据 "已经不是什么新概念,"一千个人眼中有一千个大数据".社交网络,智能穿戴设备,智能家居 ...

  5. 浅谈国密算法 SM1、SM2、SM3、SM4

    浅谈国密算法 国密算法是我国自主研发创新的一套数据加密处理系列算法.从SM1-SM4分别实现了对称.非对称.摘要等算法功能.特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能.当然, ...

  6. 数据库浅谈之共识算法

    数据库浅谈之共识算法 HELLO,各位博友好,我是阿呆

  7. 分布式id生成器:彻底解决雪花算法时间回拨问题

    Butterfly 简介 雪花算法是twitter提出的分布式id生成器方案,但是有三个问题,其中前两个问题在业内很常见: 时间回拨问题 机器id的分配和回收问题 机器id的上限问题 Butterfl ...

  8. 浅谈分布式一致性算法raft

    前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...

  9. 浅谈标签传播算法LPA

       研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正.   标签传播算法是一种基于图的半监督学习方法,其 ...

最新文章

  1. asp.net 操作excel的实现代码
  2. noip2005 过河
  3. APICloud学习第二天——操作云数据库
  4. JZOJ 5197. 【NOIP2017提高组模拟7.3】C
  5. YBTOJ:最短时间(长链剖分、线段树)
  6. 本题要求实现一个用选择法对整数数组进行简单排序的函数。_通俗易懂讲 Python 算法:快速排序...
  7. libco协程库上下文切换原理详解
  8. [gtest][002] A quick start to build the Google C++ Testing project
  9. 当你负债累累,看不到方向,众叛亲离时,该如何面对?
  10. catia逆向建模步骤_catia逆向工程应用
  11. python简单操作excel
  12. 学生专用计算机游戏怎么按,学生计算器怎么玩
  13. 字体图标库(Font Awesome)的使用--绝佳的图标字体库和CSS框架
  14. Git解决pull无法操作成功
  15. 外连接 及 无用的外连接
  16. 大数据分析——点“数”成金
  17. Vidar-Team战队专访:AS WE DO, AS YOU KNOW.
  18. linux内核模块编程(六)----字符设备驱动中断开发
  19. 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)
  20. js+jquery检测用户浏览器型号(包括对360浏览器的检测)

热门文章

  1. python中的颜色_python 中颜色的表示
  2. python最小二乘法拟合曲线
  3. Android GC 原理探究
  4. 身份证工具类各式各样的操作
  5. h5的二维三维动画杂谈
  6. ensp 进入交换机子接口、让子接口认识vlanid的数据帧、开启路由器的arp广播:实现pc之间的通信。
  7. Paint画笔常用API
  8. 如何进行分销,分销的步骤是怎样的?
  9. 设置线程名的两种方式:prctl和pthread_setname_np
  10. WWDC22 前瞻:iOS 16、iPadOS 16等五大操作系统亮相,AR/VR头显将缺席?