目录
- 雪花算法简介
- 雪花算法的优缺点
- 雪花算法原理
- 雪花算法代码实现
雪花算法简介
雪花算法,英文名为snowflake,翻译过去就是是雪花,所以叫雪花算法。
在大自然雪花造成过程中,会造成不同的构造分支,所以说不存在两片齐全一样的雪花,示意生成的id如雪花般举世无双。
雪花算法,它最早是twitter外部应用的分布式环境下的惟一分布式ID生成算法。
雪花算法的优缺点
雪花算法,它至多有如下4个长处:
1.零碎环境ID不反复
能满足高并发分布式系统环境ID不反复,比方大家熟知的分布式场景下的数据库表的ID生成。
2.生成效率极高
在高并发,以及分布式环境下,除了生成不反复 id,每秒可生成百万个不反复 id,生成效率极高。
3.保障根本有序递增
基于工夫戳,能够保障根本有序递增,很多业务场景都有这个需要。
4.不依赖第三方库
不依赖第三方的库,或者中间件,算法简略,在内存中进行。
雪花算法,有一个比拟大的毛病:
依赖服务器工夫,服务器时钟回拨时可能会生成反复 id。
雪花算法原理
具体的雪花算法结构如下图所示:
雪花算法的原理:就是生成一个的 64 位的 long 类型的惟一 id,次要分为如下4个局部组成:
1)1位保留 (根本不必)
1位标识:因为long根本类型在Java中是带符号的,最高位是符号位,负数是0,正数是1,所以id个别是负数,最高位是0,所以这第一位都是0。
2)41位工夫戳
接下来 41 位存储毫秒级工夫戳,41位能够示意2^41-1个毫秒的值,转化成单位年则是:(2^41−1)/(1000∗60∗60∗24∗365)=69年 。
41位工夫戳 :也就是说这个工夫戳能够应用69年不反复,大略能够应用 69 年。
留神:41位工夫截不是存储以后工夫的工夫截,而是存储工夫截的差值“以后工夫截 – 开始工夫截”失去的值。
这里的的开始工夫截,个别是咱们的id生成器开始应用的工夫,由咱们程序来指定的,个别设置好后就不要去扭转了,切记!!!
因为,雪花算法有如下毛病:依赖服务器工夫,服务器时钟回拨时可能会生成反复 id。
3)10位机器
10位的数据机器位,能够部署在1024个节点,包含5位datacenterId和5位workerId,最多能够部署 2^10=1024 台机器。
这里的5位能够示意的最大正整数是2^5−1=31,即能够用0、1、2、3、….31这32个数字,来示意不同的datecenterId,或workerId。
4) 12bit序列号
用来记录同毫秒内产生的不同id,12位的计数顺序号反对每个节点每毫秒(同一机器,同一时间截)产生4096个ID序号。
实践上雪花算法计划的QPS约为409.6w/s,这种调配形式能够保障在任何一个IDC的任何一台机器在任意毫秒内生成的ID都是不同的。
作者简介
陈睿|mikechen,10年+大厂架构教训,《mikechen的互联网架构》系列文章作者,专一于互联网架构技术。
浏览mikechen的互联网架构更多技术文章合集
Java并发|JVM|MySQL|Spring|Redis|分布式|高并发
关注「mikechen 的互联网架构」公众号,回复 【架构】 支付《mikechen的互联网架构●原创技术合集》
发表回复