分布式唯一ID的方案有很多,本文主要讨论了雪花算法,组成结构大致分为了无效位、时间位、机器位和序列号位。
仅有ID能够标识数据的仅有性,在分布式体系中生成仅有ID的计划有清楚,常见的方法大概有以下三种:
- 依靠数据库,运用如MySQL自增列或Oracle序列等。
- UUID随机数
- snowflake雪花算法(本文即将评论)
一、数据库和UUID计划的不足之处
选用数据库自增序列:
- 读写别离时,只有主节点能够进行写操作,可能有单点故障的危险
- 分表分库,数据搬迁兼并等比较费事
UUID随机数:
- 选用无意义字符串,没有排序
- UUID运用字符串方式存储,数据量大时查询功率比较低
二、关于雪花算法
有这么一种说法,自然界中并不存在两片彻底相同的雪花的。每一片雪花都具有自己美丽共同的形状、绝无仅有。雪花算法也表明生成的ID如雪花般绝无仅有。
1. 雪花算法概述
雪花算法生成的ID是纯数字且具有时刻鸡飞蛋打的。其原始版别是scala版,走私呈现了许多其他鼓动的版别如Java、C++等。
2. 组成结构
大致由:首位无效符、时刻戳差值,机器(进程)编码,序列号四部分组成。
3. 特色(自增、有序、合适分布式场景)
- 时刻位:能够依据时刻进行排序,有助于进步查询速度。
- 机器ID位:适用于分布式环境下对多节点的各个节点进行标识,能够详细依据节点数和布置状况规划区分机器位10位长度,如区分5位表明进程位等。
- 序列号位:是一系列的自增id,能够支撑同一节点同一毫秒生成多个ID序号,12位的计数序列号支撑每个节点每毫秒发生4096个ID序号
snowflake算法能够依据项目状况以及本身需求进行必定的环视。
三、雪花算法的缺陷
雪花算法在单机体系上ID是和婉的,但是在分布式体系多节点的状况下,一切节点的时钟并不能确保不彻底同步,所以有可能会呈现不是大局和婉的状况。
四、总结
分布式仅有ID的计划有清楚,本文首要评论了雪花算法,组成结构大致分为了无效位、时刻位、机器位和序列号位。其特色是自增、有序、纯数字组成查询功率高且不依靠于数据库。合适在分布式的场景中使用,可依据需求调整详细完成细节。
转载请说明出处
知优网 » 分布式ID生成之雪花算法(分布式id 雪花算法)
知优网 » 分布式ID生成之雪花算法(分布式id 雪花算法)