分布式ID生成系统

news2024/9/22 23:23:18

目录

    • 背景
    • 常用分布式ID生成系统介绍
      • UUID
      • Snowflake

背景

  在大多数复杂的分布式系统中,往往需要对大量的数据和消息进行唯一标识。而对分布式系统后台数据库的分库分表后需要有一个唯一的ID来表示一条数据或者是消息。那么我们分布式系统ID一般都有哪些需求呢?

  • 全局唯一性:唯一标识。
  • 趋势递增:由于绝大多数关系型DBMS使用B+Tree的数据结构来存储索引数据,在主键的选择中我们应该尽量要选择有序的主键来保证写入性能
  • 单调递增:保证下一个ID一定大于上一个ID,这个和上面的趋势递增差不多,又具有区别。
  • 信息安全:如果ID是连续的,那么恶意用户爬取工作就非常容易做了。所以在一些应用场景下,会需要ID不规则、无规则。

上述的第三点和第四点我们无法在同时满足,因为他们是互斥的。

除了对ID自身的要求之外,我们的业务还是对我们ID的生成系统有较高的要求,我们可以想象一下,如果我们的ID生成系统瘫痪,那么我们整个系统的,订单、支付、结账等业务都无法进行,那么结果我们可想而知。
所以一个好的分布式ID生成系统还需要有以下几点要求:

  • QPS要高

  • 保证HA。

  • 平均延迟要尽可能低。

 
 

常用分布式ID生成系统介绍

UUID

  UUID包含32个16进制数字,以连字符分为5段,形式是8-4-4-4-12的36个字符,如:550e8400-e29b-41d4-a716-446655440000。

UUID的优点

  • 因为是在本地生成的,所以性能较高。

UUID缺点

1)浪费存储空间:UUID能保证全局唯一,但是需要36个字符的长度,浪费了不少的存储空间。
2)信息不安全:基于MAC地址生成的UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒作者的位置。
3)UUID非常不适用于主键ID:(我们就以MySQL为例)
(1)MySQL官网有明确主键越短越好,而UUID占用36个字符的长度,显然不符合要求。

在MYSQL官网中有如下说明:除了主键索引之外的非主键索引都属于二级索引。在InooDB中,二级索引中的每条记录都包含该行的主键列,以及二级索引所指定的列,所以如果主键的很长,二级索引会占用更多空间。

(2)对索引不利,UUID是无序的,在InnoDB下,UUID的无序可能会引起数据位置的频繁变动,严重影响性能。

 
 

Snowflake

  Snowflake雪花算法,把64-bit划分为多段,其中包含 41-bit 时间戳、10-bit 工作机器、12-bit 序列号、1-bit不用。如果对IDC有要求(IDC表示互联网数据中心,可以指特点的设备网络),那么可以将10-bit的工作机器分5-bit给IDC。雪花算法这种分配方案可以保证在任何一台机器上任意毫秒内生成的ID都是不同的。

在这里插入图片描述
Snowflake的优点

  • 时间戳在高位、序列号在低位,整个ID是趋势递增的。
  • 可以根据业务来分配bit位,比较灵活。
  • 不依赖于第三方系统,稳定性高,生成ID的性能也高。

Snowflake缺点

依赖于机器的时钟,如果机器时钟回拨,那么可能会出现ID重复的情况。

 
 

其他的分布式ID生成系统可能在之后会继续更新,此次先简述UUID和Snowflake。
 
  
  
  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP地址、主机名、域名解析(DNS)

1.什么是IP地址 每一台联网的电脑都会有一个地址,用于和其他计算机进行通讯 IP地址主要有两个版本:v4 v6 IPV4版本的地址格式名为:a.b.c.d,其中abcd表示0-225的数字,如192.168.88.10为一个标准地址 查看IP地址&#x…

Android 蓝牙开发——HCI log 分析(二十)

HCI log 是用来分析蓝牙设备之间的交互行为是否符合预期,是否符合蓝牙规范。对于蓝牙开发者来说,通过 HCI log 可以帮助我们更好地分析问题,理解蓝牙协议。 一、抓取HCI log 1、手机抓取HCI log 在开发者选项中打开启用蓝牙HCI信息收集日志开关,Android系统就开始自动地收…

计算机SCI论文选题和投稿需要注意什么? - 易智编译EaseEditing

科研创新与选题 科研创新是至关重要的,往往关系到论文是否顺利发表。 摆在我们面前的,往往是别人挑剩下的资料,似乎毫无写作价值,很多人便知难而退,干脆不写论文了。 其实,应该问问自已“我有什么&#xf…

Flask应用的基本组成部分、模板引擎Jinja2的使用、Flask-WTF、SQLAlchemy

目录标题1. Flask应用的基本组成部分1.1 路由(Routing)1.2 视图函数(View Function)1.3 请求(Request)1.4 响应(Response)2. 模板引擎Jinja2的使用2.1 入门案例2.2 条件判断2.3 循环…

Python采集m3u8格式做个小姐姐动态壁纸~

人生苦短,我用python 首先,我和大家一样喜欢看小姐姐~ 其次,看美丽的事物会让人更加有动力去… 我编不下去了哈哈哈,我就是爱看充满美感的人儿~ 更多python好看的:点击此处跳转文末名片获取 环境 Pythonpycharm 模块使用 第…

使用virtualenv和pip构建项目所需的独立Python环境

1、为什么需要独立的Python环境?在讲技术前,想先讲讲目的。为什么我们需要独立的Python环境?这里就借用virtualenv的文档来解释吧。virtualenv is a tool to create isolated Python environments.The basic problem being addressed is one …

51-Jenkins-Periodic Backup插件实现Jenkins备份

Periodic Backup插件实现Jenkins备份前言目录结构插件备份安装插件使用插件前言 本篇来学习下使用Periodic Backup插件实现Jenkins备份 目录结构 Jenkins的所有数据都是存放在文件中的,所以,Jenins备份其实就是备份Jenkins_HOME目录。 Jenkins_Home目…

taobao.user.buyer.get( 查询买家信息API )

¥开放平台基础API必须用户授权 查询买家信息API,只能买家类应用调用。 公共参数 请求地址: HTTP地址 http://gw.api.taobao.com/router/rest 公共请求参数: 公共响应参数: 请求参数 响应参数 点击获取key和secret 请求示例 TaobaoClient client new…

现在00后都是这么卷了吗?

现在的00后小年轻真的卷得过分了。前段时间我们公司来了个00年的,工作没两年,跳槽到我们公司起薪20K,都快接近我了。后来才知道人家是个卷王,从早干到晚就差搬张床到工位睡觉了。 最近和他聊了一次天,原来这位小老弟家…

我应该把毕业设计做到什么程度才能过关?

本篇博客包含了狗哥多年职业生涯对于软件项目的一丢丢理解,也讲述了对于大学生毕业设计的一些理解。如果你还是懵懵懂懂就要离开学校了,被老师告知不得不做出一套毕业设计的时候,希望你可以看到这篇博客,让你有点头绪,…

PingCAP 唐刘:一个咨询顾问对 TiDB Chat2Query Demo 提出的脑洞

导读 近日,TiDB Cloud 发布了 Chat2Query 功能,在 TiDB Cloud 上通过自然语言提问,即可生成相应的 SQL,通过 TiDB Cloud 对上传的任意数据集进行分析。Gartner 也在一份有关 ChatGPT 对数据分析影响研究的报告中提及了 PingCAP 的…

Gateway集成Netty服务

Gateway和Netty都有盲区的感觉; 一、Netty简介 Netty是一个异步的,事件驱动的网络应用框架,用以快速开发高可靠、高性能的网络应用程序。 传输服务:提供网络传输能力的管理; 协议支持:支持常见的数据传输…

Python调用百度AI实现文字识别

目录标题 前沿实战演示重中之重(开玩笑)前沿 今天我们也来高大上一下,玩一把人工智能。那就是免费调用百度AI实现图片上面的文字识别。相对于Python的第三方库,百度人工智能要更强大,毕竟人工智能不是那么容易搞的。要调用,其实很简单,关键的代码只需要三行。但需要先注…

使用cmake在win10编译yolov5+tensorRT+cuda+cudnn+protobuf代码进行混合编译

这里进行之前需要把protobuf在win10下编译,可以参考这篇文章从Linux下载下来的工程代码,这里建议直接使用vs系列打开不要用vscode打开,vscode对win下的cmake不友好,主要体现在报错机制无法直接定位,题主的环境是vs2022…

Kubernetes07:Service

Kubernetes07:Service 1、service存在的意义 因为Pod的IP是不断变化的,所以需要注册service防止pod失联 1)为了防止Pod失联(服务发现) 2、定义一组Pod访问策略(负载均衡) 2、Pod和Service的关系-------通…

为什么要学习C++软件调试技术?掌握这类技术都有哪些好处?

目录 1、为什么要学习C软件调试技术? 1.1、IDE调试手段虽必不可少,但还不够 1.2、通过查看日志和代码去排查异常崩溃问题,费时费力,很难定位问题 1.3、有的问题很难复现,可能只在客户的环境才能复现 1.4、为了应对…

主打的就是I/O流,顺便把File复习了

文章目录1. File类1.1 预备知识1.2 创建文件1.3 文件的常用方法2. IO流2.1 InputStream2.2 OutputStream2.3 Reader2.4 Writer2.5 缓冲流2.6 转换流2.7 对象流2.8 打印流1. File类 1.1 预备知识 文件分隔符 Windows:D:\Soft\QQ\PluginLinux:D:/Soft/QQ…

SpringMVC使用 redis 实现缓存

简介 SpringMVC 中也可以将缓存标签和 redis 结合起来使用,其实此时缓存没有起作用,只是通过缓存的那几个注解来操作 redis 而已;SpringMVC 中整合 redis 比较麻烦的是注意版本冲突的问题,如下是官网有关于版本的要求 https://d…

【人脸识别】DDL:数据分布知识蒸馏思想,提升困难样本(遮挡、低分辨率等)识别效果

论文题目:《Improving Face Recognition from Hard Samples via Distribution Distillation Loss》 论文地址:https://arxiv.org/pdf/2002.03662v3.pdf 代码地址:https://github.com/HuangYG123/DDL 1.前言及相关工作 Large facial variatio…

秒懂算法 | 基于图神经网络的推荐算法

图神经网络(Graph Neural Networks,GNN)是近几年兴起的学科,用来作推荐算法自然效果也相当好,但是要学会基于图神经网络的推荐算法之前,需要对图神经网络自身有个了解。 图卷积网络(Graph Convolutional Networks,GCN)提出于2017年。GCN 的出现标志着图神经网络的出现。深度学习…