|
|
51CTO旗下网站
|
|
移动端

分布式ID生成之雪花算法

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

作者:聚IT来源:今日头条|2019-09-05 13:06

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

唯一ID可以标识数据的唯一性,在分布式系统中生成唯一ID的方案有很多,常见的方式大概有以下三种:

  • 依赖数据库,使用如MySQL自增列或Oracle序列等。
  • UUID随机数
  • snowflake雪花算法(本文将要讨论)

一、数据库和UUID方案的不足之处

采用数据库自增序列:

  • 读写分离时,只有主节点可以进行写操作,可能有单点故障的风险
  • 分表分库,数据迁移合并等比较麻烦

UUID随机数:

  • 采用无意义字符串,没有排序
  • UUID使用字符串形式存储,数据量大时查询效率比较低

二、关于雪花算法

有这么一种说法,自然界中并不存在两片完全一样的雪花的。每一片雪花都拥有自己漂亮独特的形状、独一无二。雪花算法也表示生成的ID如雪花般独一无二。

分布式ID生成--雪花算法

1. 雪花算法概述

雪花算法生成的ID是纯数字且具有时间顺序的。其原始版本是scala版,后面出现了许多其他语言的版本如Java、C++等。

2. 组成结构

分布式ID生成--雪花算法

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

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

  • 时间位:可以根据时间进行排序,有助于提高查询速度。
  • 机器id位:适用于分布式环境下对多节点的各个节点进行标识,可以具体根据节点数和部署情况设计划分机器位10位长度,如划分5位表示进程位等。
  • 序列号位:是一系列的自增id,可以支持同一节点同一毫秒生成多个ID序号,12位的计数序列号支持每个节点每毫秒产生4096个ID序号

snowflake算法可以根据项目情况以及自身需要进行一定的修改。

分布式ID生成--雪花算法

三、雪花算法的缺点

雪花算法在单机系统上ID是递增的,但是在分布式系统多节点的情况下,所有节点的时钟并不能保证不完全同步,所以有可能会出现不是全局递增的情况。

四、总结

分布式唯一ID的方案有很多,本文主要讨论了雪花算法,组成结构大致分为了无效位、时间位、机器位和序列号位。其特点是自增、有序、纯数字组成查询效率高且不依赖于数据库。适合在分布式的场景中应用,可根据需求调整具体实现细节。

【编辑推荐】

  1. 除了程序猿,开发人员还是设计师、建筑师……
  2. Docker命令行入门大全:这18条,你不得不知
  3. 基于分布式系统的7种唯一ID实现方案,值得收藏
  4. Pngquant:Linux上压缩PNG图像的命令行实用工具
  5. 13 岁前写下第一行代码,这批小小程序员日前正式 C 位「出道」!
【责任编辑:赵宁宁 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

这就是5G

这就是5G

5G那些事儿
共15章 | armmay

117人订阅学习

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

371人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

758人订阅学习

视频课程+更多

SpringBoot详讲

SpringBoot详讲

讲师:鸟哥教育3774人学习过

【王佩丰】Word长文档编辑

【王佩丰】Word长文档编辑

讲师:王佩丰29431人学习过

基于OpenCV的精度测量项目实战

基于OpenCV的精度测量项目实战

讲师:禾路6172人学习过

读 书 +更多

XML案例解析教程

本书对开发XML应用程序给予了详细指导,其中一些应用程序甚至对于您来说是完全陌生的。这些应用程序包括XML 1.0,以及与XSLT、XQuery和XPat...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微