分布式唯一ID的方案有很多,本文主要讨论了雪花算法,组成结构大致分为了无效位、时间位、机器位和序列号位。

仅有ID能够标识数据的仅有性,在分布式体系中生成仅有ID的计划有清楚,常见的方法大概有以下三种:

  • 依靠数据库,运用如MySQL自增列或Oracle序列等。
  • UUID随机数
  • snowflake雪花算法(本文即将评论)

 分布式ID生成之雪花算法(分布式id 雪花算法) 雪花算法 分布式 ID 第1张

一、数据库和UUID计划的不足之处

选用数据库自增序列:

  • 读写别离时,只有主节点能够进行写操作,可能有单点故障的危险
  • 分表分库,数据搬迁兼并等比较费事

UUID随机数:

  • 选用无意义字符串,没有排序
  • UUID运用字符串方式存储,数据量大时查询功率比较低

二、关于雪花算法

有这么一种说法,自然界中并不存在两片彻底相同的雪花的。每一片雪花都具有自己美丽共同的形状、绝无仅有。雪花算法也表明生成的ID如雪花般绝无仅有。

分布式ID生成之雪花算法(分布式id 雪花算法)  雪花算法 分布式 ID 第2张

1. 雪花算法概述

雪花算法生成的ID是纯数字且具有时刻鸡飞蛋打的。其原始版别是scala版,走私呈现了许多其他鼓动的版别如Java、C++等。

2. 组成结构

分布式ID生成之雪花算法(分布式id 雪花算法)  雪花算法 分布式 ID 第3张

大致由:首位无效符、时刻戳差值,机器(进程)编码,序列号四部分组成。

3. 特色(自增、有序、合适分布式场景)

  • 时刻位:能够依据时刻进行排序,有助于进步查询速度。
  • 机器ID位:适用于分布式环境下对多节点的各个节点进行标识,能够详细依据节点数和布置状况规划区分机器位10位长度,如区分5位表明进程位等。
  • 序列号位:是一系列的自增id,能够支撑同一节点同一毫秒生成多个ID序号,12位的计数序列号支撑每个节点每毫秒发生4096个ID序号

snowflake算法能够依据项目状况以及本身需求进行必定的环视。

分布式ID生成之雪花算法(分布式id 雪花算法)  雪花算法 分布式 ID 第4张

三、雪花算法的缺陷

雪花算法在单机体系上ID是和婉的,但是在分布式体系多节点的状况下,一切节点的时钟并不能确保不彻底同步,所以有可能会呈现不是大局和婉的状况。

四、总结

分布式仅有ID的计划有清楚,本文首要评论了雪花算法,组成结构大致分为了无效位、时刻位、机器位和序列号位。其特色是自增、有序、纯数字组成查询功率高且不依靠于数据库。合适在分布式的场景中使用,可依据需求调整详细完成细节。

转载请说明出处
知优网 » 分布式ID生成之雪花算法(分布式id 雪花算法)

发表评论

您需要后才能发表评论