浅谈解决雪花算法的时钟回拨问题
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 即可。
浅谈解决雪花算法的时钟回拨问题相关推荐
- 从sharding-jdbc看如何解决雪花算法的时钟回拨问题
SNOWFLAKE SNOWFLAKE(雪花算法)是默认使用的主键生成方案,生成一个 64bit的长整型(Long)数据. sharding-jdbc 中雪花算法生成的主键主要由 4部分组成,1bit ...
- snowflake算法的时钟回拨问题如何解决(面试)
snowflake算法的时钟回拨问题如何解决 snowflake算法:一串数字,用很多的二进制里的bit位,去代表不同的东西:40多位都是当前机器上的时间,中间有几位是代表的是机器id,自增长的id: ...
- 浅谈Base64编码算法
一.什么是编码解码 编码:利用特定的算法,对原始内容进行处理,生成运算后的内容,形成另一种数据的表现形式,可以根据算法,再还原回来,这种操作称之为编码. 解码:利用编码使用的算法的逆运算,对经过编码的 ...
- 浅谈流处理算法 (1) – 蓄水池采样
转载自 浅谈流处理算法 (1) – 蓄水池采样 前言 现如今,"大数据 "已经不是什么新概念,"一千个人眼中有一千个大数据".社交网络,智能穿戴设备,智能家居 ...
- 浅谈国密算法 SM1、SM2、SM3、SM4
浅谈国密算法 国密算法是我国自主研发创新的一套数据加密处理系列算法.从SM1-SM4分别实现了对称.非对称.摘要等算法功能.特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能.当然, ...
- 数据库浅谈之共识算法
数据库浅谈之共识算法 HELLO,各位博友好,我是阿呆
- 分布式id生成器:彻底解决雪花算法时间回拨问题
Butterfly 简介 雪花算法是twitter提出的分布式id生成器方案,但是有三个问题,其中前两个问题在业内很常见: 时间回拨问题 机器id的分配和回收问题 机器id的上限问题 Butterfl ...
- 浅谈分布式一致性算法raft
前言:在分布式的系统中,存在很多的节点,节点之间如何进行协作运行.高效流转.主节点挂了怎么办.如何选主.各节点之间如何保持一致,这都是不可不面对的问题,此时raft算法应运而生,专门 用来解决上述问题 ...
- 浅谈标签传播算法LPA
研究生期间第一次对相关内容做了一个汇报,查找了大量文献,发现很多的介绍对于新手来说都看不懂,这里采用最简单的方法来浅谈一下,如有错误,欢迎指正. 标签传播算法是一种基于图的半监督学习方法,其 ...
最新文章
- asp.net 操作excel的实现代码
- noip2005 过河
- APICloud学习第二天——操作云数据库
- JZOJ 5197. 【NOIP2017提高组模拟7.3】C
- YBTOJ:最短时间(长链剖分、线段树)
- 本题要求实现一个用选择法对整数数组进行简单排序的函数。_通俗易懂讲 Python 算法:快速排序...
- libco协程库上下文切换原理详解
- [gtest][002] A quick start to build the Google C++ Testing project
- 当你负债累累,看不到方向,众叛亲离时,该如何面对?
- catia逆向建模步骤_catia逆向工程应用
- python简单操作excel
- 学生专用计算机游戏怎么按,学生计算器怎么玩
- 字体图标库(Font Awesome)的使用--绝佳的图标字体库和CSS框架
- Git解决pull无法操作成功
- 外连接 及 无用的外连接
- 大数据分析——点“数”成金
- Vidar-Team战队专访:AS WE DO, AS YOU KNOW.
- linux内核模块编程(六)----字符设备驱动中断开发
- 有道智云OCR图片识别文字+返回数据处理技巧(实现语言-按键精灵脚本请求识别+java服务端处理数据)
- js+jquery检测用户浏览器型号(包括对360浏览器的检测)