当前位置: 首页 > news >正文

分布式id

一、分布式系统

1.1 分布式系统的定义和应用场景

分布式系统是由多个独立的计算机节点协同工作,以共同完成一个任务的系统。这些节点通过网络进行通信和协调,共享计算和存储资源,从而实现对更大规模问题的处理和更高系统可用性的要求。

分布式应用场景:

  • 互联网应用:互联网公司的网站、搜索引擎、社交媒体、在线购物等都需要支持大量的并发请求和用户访问,而分布式系统可以通过将请求分发到不同的服务器节点,以提高服务的响应速度和可用性。
  • 云计算:云计算平台需要处理大量的用户请求和数据存储,而分布式系统可以通过将计算和存储资源分配到不同的计算机节点上,以提高资源利用率和系统的可扩展性。
  • 大数据:大数据处理需要处理庞大的数据集和实时性的要求,而分布式系统可以通过将数据处理任务分发到不同的计算机节点上,以加速数据的处理和分析过程。

1.2 分布式系统面临的挑战

  1. 通信延迟和网络拥塞
    由于节点之间的通信需要通过网络进行,因此可能会面临通信延迟和网络拥塞等问题。这些问题可能导致系统的响应时间变慢,影响系统的性能和可用性。
  2. 一致性和可靠性问题
    在分布式系统中,数据可能存储在多个节点上,因此需要确保数据的一致性和可靠性。如果数据在某些节点上失效或不一致,可能会导致系统出现错误或数据损坏。
  3. 分布式事务处理问题
    在分布式系统中,可能需要处理跨多个节点的事务。这可能导致事务处理复杂和困难,特别是在出现部分节点故障或网络中断的情况下。
  4. 负载均衡和故障恢复问题
    由于系统可能面临大量的并发请求和计算任务,因此需要进行负载均衡,以确保各个节点的负载平衡。另外,在某些节点故障或网络中断的情况下,需要进行故障恢复,以确保系统的可用性。

二、分布式id

2.1 什么是id

id就是一个身份的标识,在日常生活以及软件系统中都是必不可少的存在的。id可以用来唯一标识一个对象或事件,例如我们都有一个身份证号码来标识每一位公民,在软件系统中,为了标识每一个用户,会有对应的user id,在网购时有订单id,发表评论时有评论id等等。

在计算机科学中,ID(Identifier)通常是一个数字或字符串,用于唯一标识某个实体。在软件开发中,ID常常用于识别、定位、查找和管理对象,例如用户、订单、商品等。

在分布式系统中,生成唯一的ID是非常重要的,因为分布式系统可能包含多个节点和多个数据中心,每个节点都需要在处理数据和请求时分配唯一的ID。这样可以帮助在分布式系统中进行诊断、故障排除和性能分析,同时还可以保证数据的一致性和正确性。

2.2 分布式id的定义

分布式ID(Distributed ID)是指在分布式系统中生成全局唯一的ID的方法或算法。分布式ID的生成需要满足以下几个条件:

  • 全局唯一性:在分布式系统中,生成的ID必须是全局唯一的,即任何时候都不会有两个节点生成相同的ID。
  • 可排序性:生成的ID应该是可排序的,以便在分布式系统中进行排序和比较。
  • 低延迟、高可用、高QPS:很多使用id的场景,都强依赖id生成,没有办法降级,例如用户注册中,如果用户id生成失败,注册流程也没办法继续。因此低延迟、高可用是id生成服务的一个必要要求,避免因为id生成服务的问题影响正常业务流程。

常见的分布式ID生成算法包括UUID、Snowflake、Leaf等。这些算法都可以生成唯一的ID,并且在分布式系统中具有可排序性和可读性。

三、 UUID

UUID(通用唯一识别码)是一种用于唯一标识信息的标准格式,通常由32位的16进制数字和4个“-”符号构成,形式为8-4-4-4-12的36个字符,如:123e4567-e89b-12d3-a456-426655440000,在Java中可以通过java.util.UUID#randomUUID来调用。 有意思的是uuid是存在极小概率重复可能的,不过由于过低,大部分情况都可以忽略。
特点:

  • 全局唯一性:UUID使用标准算法生成,可以保证全球范围内的唯一性。
  • 高性能:生成UUID的算法比较简单,执行效率很高,在分布式系统中广泛使用。
  • 长度适中:UUID通常为128位,长度适中,在使用时可以有效地减少网络传输的数据量。
  • 无序性:由于UUID是随机生成的,因此它们在存储时是没有任何规律可循的,不会影响数据的查询和排序性能。

UUID的优点:
全局唯一性:UUID可以保证全球范围内的唯一性,即使在分布式系统中也可以使用。
高性能:生成UUID的算法比较简单,执行效率很高,在分布式系统中广泛使用。
不可预测性:由于UUID是随机生成的,因此无法被猜测或推断出来,可以提高系统的安全性。

UUID的缺点:

  • 长度过长无法转换成long,通常用String来表示,例如c3b5ec9a-de62-4325-90a9-0fed060f20bb,一共36个字符,如果去掉-,长度为32个字符。
  • 信息不安全:基于MAC地址生成UUID的算法可能会造成MAC地址泄露,这个漏洞曾被用于寻找梅丽莎病毒的制作者位置。
  • 冲突概率:虽然UUID的冲突概率非常小,但在极端情况下也有可能会发生冲突。

在分布式系统中,由于系统规模的增大和负载的增加,单点自增ID已经不能满足需求。UUID是一种很好的解决方案,可以保证全球范围内的唯一性,并且可以在分布式系统中广泛使用。在一些需要防止ID被猜测或推断的场景下,如密码重置、授权等场景,使用UUID可以提高系统的安全性。但是,UUID的缺点也需要考虑,如可读性差、冲突概率等。为了克服这些缺点,一些方案使用了更加复杂的算法来生成ID,如Twitter的Snowflake算法、美团点评的Leaf算法等。

四、Snowflake雪花算法

4.1 Snowflake 算法介绍

Snowflake 算法是 Twitter 开源的分布式 ID 生成算法,其核心思想是:一个 long 型的 ID 由 64 位组成,其中,其中其中 1 个为符号位,41 个为时间戳,5 个为数据中心标识,5 个为机器标识,12 个为序列号。由此,Snowflake 算法可以生成全局唯一的 ID,同时,其按时间有序递增,也便于对数据进行排序。
在这里插入图片描述

Snowflake 算法的特点如下:

  • 生成的 ID 全局唯一:由于其包含了数据中心标识、机器标识和序列号,时间戳,不同的机器生成的 ID 不会冲突。
  • 生成的 ID 按时间有序递增:其 41 位时间戳可以精确到毫秒级别,因此生成的 ID 按时间有序递增,可以方便的按时间排序。
  • 简单高效:Snowflake 算法使用位运算实现 ID 生成,非常高效,可以支持很高的QPS。

4.2 优缺点

Snowflake 算法的优点如下:

  • 全局唯一:Snowflake 算法可以生成全局唯一的 ID,非常适合分布式系统中 ID 的生成。
  • 高效简单:Snowflake 算法的实现非常简单,只需要一次位运算即可生成 ID,因此非常高效。

Snowflake 算法的缺点如下:

  • 对系统时间依赖:Snowflake 算法依赖于系统时间,如果系统时间回拨或者发生跳变,就可能会导致 ID 生成出现问题。
  • 对机器标识和数据中心标识有限制:Snowflake 算法使用了 5 位来标识数据中心和机器,因此,数据中心和机器数量不能超过 2^5 = 32,否则就会出现 ID 冲突问题。

五、基于数据库的分布式ID

5.1 使用方法

基于数据库的分布式ID生成方法是一种生成全局唯一ID的方法。它的主要原理是利用数据库的特性,如自增主键、事务和锁,保证ID的唯一性和有序性。下面将详细介绍这种方法的实现原理和应用。

基于数据库的分布式ID生成方法的实现原理如下:

  1. 在数据库中创建一个表,用于存储ID生成器的状态信息和生成的ID。
  2. 在该表中创建一个自增主键列,用于生成ID。
  3. 使用事务保证每次生成ID时,都会在该表中插入一条新记录并获取该记录的ID。
  4. 使用数据库锁,保证同一时间只有一个线程能够获取ID。

通过上述步骤,我们可以保证在分布式系统中生成的ID是唯一且有序的。

基于数据库的分布式ID生成方法通常适用于以下场景:

  • 数据库中存在业务表需要生成ID。
  • 需要在分布式系统中使用ID进行排序或索引。
  • 数据库中需要使用自增主键来提高性能。

5.2 优缺点

优点:

  • 可以保证生成的ID是有序的,有利于数据库的索引和排序。
  • 基于事务的实现方法,保证了ID的唯一性。
  • 可以很容易地与数据库集群进行集成。

然而,它也存在以下缺点:

  • 生成ID的效率较低,需要使用事务和锁来保证唯一性和有序性。
  • 需要在数据库中创建一个新表,增加了数据库的复杂度。
  • 可能存在分布式事务的问题,需要特殊处理。

六、美团Leaf算法

6.1 Leaf算法简介

该方案的主要思想是将ID的生成工作交由独立的ID生成服务,由其负责ID的生成和管理。在Leaf算法中,ID生成服务使用数据库和缓存协同工作,生成的ID具有可读性、可排序性和趋势递增性等特点。

Leaf算法将ID分成三个部分:时间戳、数据中心ID、业务ID。其中,时间戳占用的位数最多,可以根据需要分配更多的位数;数据中心ID和业务ID分别用于区分不同的数据中心和业务,分别占用固定的位数。Leaf算法的位分配策略如下表所示:

位数	63 ~ 41	40 ~ 21	20 ~ 0
内容	时间戳	数据中心ID	业务ID

在Leaf算法中,时间戳的精度可以通过配置来控制,可以选择使用秒、毫秒或微秒级别的时间戳。同时,Leaf算法也支持使用基于ZooKeeper的全局唯一ID生成器,可以避免时间戳回拨等问题。

6.2 优缺点

优点:

  • 算法简单:Leaf算法相比于其他分布式id算法来说,实现和使用都比较简单。
  • 可扩展性:Leaf算法在设计上就考虑了高可用和可扩展性,可以根据业务量的增长灵活调整发号段的数量。
  • 可定制化:Leaf算法的ID号码格式可以定制,可以满足各种业务的需求。

缺点:

  • 依赖于MySQL:Leaf算法使用了MySQL数据库作为存储介质,因此在使用之前需要先安装和配置MySQL,增加了系统的复杂度。
  • 单点故障:Leaf算法在使用过程中,依赖于MySQL数据库的可用性,如果数据库宕机,可能导致系统无法生成新的ID号码,造成单点故障。
  • 可能存在瓶颈:当系统并发量很高时,可能会存在MySQL的读写瓶颈,导致ID生成的性能受到影响。

相关文章:

分布式id

一、分布式系统 1.1 分布式系统的定义和应用场景 分布式系统是由多个独立的计算机节点协同工作,以共同完成一个任务的系统。这些节点通过网络进行通信和协调,共享计算和存储资源,从而实现对更大规模问题的处理和更高系统可用性的要求。 分…...

创意编程py模拟题

前言:好久没写博客了,来水好好写一篇 注:本篇文章为py,不是c 1、敲七 版本1 题目: 题目描述 输出7和7的倍数,还有包含7的数字例如(17,27,37…70,71&#…...

uniapp中条件编译

官方:https://uniapp.dcloud.net.cn/tutorial/platform.html#%E8%B7%A8%E7%AB%AF%E5%85%BC%E5%AE%B9 #ifndef H5 代码段… #endif 表示除了H5其他都可以编译 #ifdef H5 代码段… #endef 表示只能编译H5,其他的都不能编译 其他编译平台请查看官方文档。 …...

封装 YoloV5 detect.py 成 Python 库以供 python 程序使用

本项目地址 Github 本项目地址 Github Introduction YoloV5 作为 YoloV4 之后的改进型,在算法上做出了优化,检测的性能得到了一定的提升。其特点之一就是权重文件非常的小,可以在一些配置更低的移动设备上运行,且提高速度的同时…...

PostgreSQL , PostGIS , 球坐标 , 平面坐标 , 球面距离 , 平面距离

标签 PostgreSQL , PostGIS , 球坐标 , 平面坐标 , 球面距离 , 平面距离 背景 PostGIS中有两种常用的空间类型geometry和geography,这两种数据类型有什么差异,应该如何选择? 对于GIS来说,首先是坐标系,有两种&#…...

K3S 系列文章-5G IoT 网关设备 POD 访问报错 DNS ‘i/o timeout‘分析与解决

开篇 《K3s 系列文章》《Rancher 系列文章》 问题概述 20220606 5G IoT 网关设备同时安装 K3S Server, 但是 POD 却无法访问互联网地址,查看 CoreDNS 日志提示如下: ... [ERROR] plugin/errors: 2 update.traefik.io. A: read udp 10.42.0.3:38545-&…...

社会工程学介绍

目录前言手段和术语假托在线聊天/电话钓鱼下饵(Baiting)等价交换同情心尾随(Tailgating or Piggybacking)社交工程学的演进钓鱼式攻击电脑蠕虫垃圾邮件特别人物总结前言 在信息安全方面,社会工程学是指对人进行心理操…...

干货 | 有哪些安慰剂按钮的设计?

仔细观察我们的生活,你会发现处处都是安慰剂按钮,ATM的点钞声、开启空调的呼呼声,这些都对用户心里产生了有意的引导作用,当你打开了空调按钮,先播放声音会让你感觉你按下的按钮起到了作用。 我们的大脑不喜欢杂乱无章…...

LeetCode 每日一题 2023/2/13-2023/2/19

记录了初步解题思路 以及本地实现代码;并不一定为最优 也希望大家能一起探讨 一起进步 目录2/13 1234. 替换子串得到平衡字符串2/14 1124. 表现良好的最长时间段2/15 1250. 检查「好数组」2/16 2341. 数组能形成多少数对2/17 1139. 最大的以 1 为边界的正方形2/18 1…...

SAP 关于多种语言配置

怎样才能在登录时选择自己需要的语言登录呢?虽然这个问题对很多人来说可能根本就算不上问题,但对很多新手来说可能却是很想尽快解决的问题。 曾经有位Puber说有个很简单的办法,但可惜的是在我一直没找到这个办法。今天看到一份资料&#xff…...

万字长文讲述由ChatGPT反思大语言模型的技术精要

文|张俊林 源|知乎张俊林 导读:ChatGPT出现后惊喜或惊醒了很多人。惊喜是因为没想到大型语言模型(LLM,Large Language Model)效果能好成这样;惊醒是顿悟到我们对LLM的认知及发展理念&#xff0c…...

SpringBoot静态资源访问

静态资源路径 类路径下:/resources/static/、/resources/public/、/resources/resources/、/resources/META-INF/resources 这些路径下的资源均可直接访问;通过 http://ip:port/资源名称 访问即可 可在配置文件中对访问路径和访问拦截规则进行设置&…...

【物联网】智慧农业病虫害精准辨识竞赛思路及代码分享

来源:投稿 作者:LSC 编辑:学姐 比赛官网: https://www.dataglobal.cn/cmpt/signUpInfo200.html 任务描述 请参赛者设计智慧农业病虫害检测系统,给出一体化问题解决方案,鼓励参赛选手结合某一果园/农作物实际情况建立…...

Properties类读取配置文件

文章目录前言一、Properties类的使用 :1、创建sk.properties文件2、编写读取 properties 属性文件,并输出属性值。3、运行结果总结前言 Properties类的介绍 : 在Java中提供了 java.util.Properties 类,来读取 .properties 属性文件。在程序调用 Propert…...

知其然更要知其所以然,聊聊SQLite软件架构

SQLite是一个非常受欢迎的数据库,在数据库排行榜中已经进入前十的行列。这主要是因为该数据库非常小巧,而且可以支持Linux、Windows、iOS和Andriod的主流的操作系统。 SQLite非常简单,是一个进程内的动态库数据库。其最大的特点是可以支持不同…...

微服务架构的演变

文章目录1.1 系统架构的演变过程1.1.1 单体应用架构1.1.2 垂直应用架构1.1.3 分布式架构1.1.4 SOA架构1.1.5 微服务架构1.2 微服务架构设计原则1.2.1 AKF拆分原则1.2.1.1 X轴扩展(水平复制)1.2.1.2 Y轴扩展(模块拆分)1.2.1.3 Z轴扩…...

使用html-to-image代替html2canvas,结合jspdf实现下载pdf(下载截图下载前端dom元素)

一、问题 一开始的时候,准备使用html2canvasjspdf来实现的,但是遇到了一个麻烦的问题,在其他项目中使用html2canvas没有任何问题,但是在要开发的项目中使用,就给我报错,是真滴烦。 html2canvas报错 Uncau…...

云环境渗透测试的重要性

🌕写在前面 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 ✉️今日分享: “在这个世上,除了极稀少的例外,我们其实只有两种选择:要么是孤独,要么就是庸俗。” 随着云计…...

ROS2 入门应用 请求和应答(Python)

ROS2 入门应用 请求和应答(Python)1. 创建功能包1. 创建功能包2. 创建源文件2.1. 服务端2.2. 客户端3. 添加依赖关系4. 添加入口点5. 编译和运行1. 创建功能包 1. 创建功能包 在《ROS2 入门应用 工作空间》中已创建和加载了ros2_ws工作空间 在《ROS2 入…...

是德Keysight E4991A/e4991B射频阻抗/材料分析仪

Keysight E4991A 射频阻抗/材料分析仪提供终极阻抗测量性能和强大的内置分析功能。它将为评估 3 GHz 范围内组件的组件和电路设计人员的研发提供创新。E4991A 使用 RF-IV 技术,而不是反射测量技术,可在宽阻抗范围内进行更精确的阻抗测量。基本阻抗精度为…...

这才是计算机科学_人工智能

人工智能一、前言二、ML2.1 分类2.1.1 决策树2.2.2 支持向量机2.2.3 人工神经网络三、计算机视觉3.1 Prewitt算子3.2 Viola-Jones 人脸检测算法3.3 卷积神经网络四、自然语言处理4.1 知识图谱4.2 语音识别一、前言 之前讲了计算机从发展到现在的过程,计算机很适合做…...

DFS深度优先搜索—Java版

递归三要素 递归的定义 递归的拆解 递归的出口 什么时候使用DFS? 深度回溯问题(DFS与回溯区别不大) 二叉树问题 组合、排列问题 找方案问题(解空间是一棵树或者图,需要自行构造图/树) 图的搜索问题…...

RAY - 小记

文章目录关于 RAYRAY 结构关于 RAY Ray is a unified framework for scaling AI and Python applications. Ray consists of a core distributed runtime and a toolkit of libraries (Ray AIR) for accelerating ML workloads. RAY 是一个简单、通用的分布式计算框架。 RAY 解…...

金三银四软件测试工程师面试题(含答案)

前言:此文专门记载本人平时面试以及收藏的面试题目,如果有错误之处请及时指正,谢谢! 1、python的数据类型有哪些 答:Python基本数据类型一般分为:数字、字符串、列表、元组、字典、集合这六种基本数据类…...

Python 连接数据源与邮件功能(九)

文章目录一、概述二、Python 连接数据源1)Python MySQL 基础操作1、部署MySQL2、MySQL Connector 库【1】安装 mysql-connector-python 库【2】连接 MySQL【3】增加数据【4】查询数据【5】更新数据【6】删除数据2、PyMySQL 库【1】安装 PyMySQL 库【2】连接 MySQL【…...

网站如何锁定用户,超级浏览器有办法解决吗?

随着全球开放,跨境电商人纷纷开启了2023年的搞钱之旅,很多期待着在新的一年大干一场。但前事不忘后事之师,2022年跨境生意全面沦陷,其实除了大环境的因素之外,还有一个很重要的原因是,各个平台都开始实行非…...

Ubuntu下使用Wine运行HBuilderX

安装完wine后,在HbuilderX的目录中打开终端,直接输入wine HBuilderX.exe命令,启动过程中会提示安装wine-mono组件,点击安装按钮下载安装该组件,该组件下载速度慢,需要等待特别长时间。   安装完毕后&…...

如何高效远程维护分布在海外的中大型智能设备?

一、行业需求 随着越来越多的企业进行全球化经营,设备制造商和系统集成商的设备分布到全球各地,数量多而且分散,传统的设备运维方式,面临着出差成本高,工作效率低,服务不及时等问题,客户常常因…...

【双指针问题】LeetCode 925. 长按键入

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...

APP测试中IOS和Android的区别,有哪些注意点?

01、常识性区别 02、导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的。还有新闻类的应用。 Android:一般放在页面…...

网站 空间转移/网站收录查询代码

1990年,一年期的存款基准利率是10.08% ,现在一年期的存款基准利率是1.5% 你觉得这个利率低,其实其他国家更低。目前,英国央行基准利率为0.75%,瑞士央行基准利率为-0.75%,日本央行基准利率只有-0.1%。 从这些…...

wordpress插件 二次开放/廊坊网络推广优化公司

1. 综合练习目标 2. 综合练习需求 3.模块划分 1. 综合练习目标 <1>复习 Java 基本语法 <2>熟悉掌握Java开发常用API <3>尝试建立面向对象思想 2. 综合练习需求 <1>接收用户的命令行输入 <2>以文件为基础完成数据的增删改查操作 3.模块划分 UI模块…...

给网站增加功能怎么做/公司软文

转自&#xff1a;http://code4app.com/article/cocoapods-install-usage 目录 CocoaPods是什么&#xff1f;如何下载和安装CocoaPods&#xff1f;如何使用CocoaPods&#xff1f; 场景1&#xff1a;利用CocoaPods&#xff0c;在项目中导入AFNetworking类库场景2&#xff1a;如何…...

做智慧教室的网站/竞价托管

使用Guice&#xff0c;需要添加第三方的包&#xff08;guice-3.0.jar和javax.inject.jar&#xff09; 链接&#xff1a;http://pan.baidu.com/s/1nuMjYOT 密码&#xff1a;1soo 将包导入MyEclipse或eclipse的方法&#xff1a;http://jingyan.baidu.com/article/6079ad0e7e4de12…...

南京网站排名/友情链接交换软件

setTimeout 在 js 加载前的问题探究 思思放出一道题目&#xff0c;深究一下发觉很有意思<script>setTimeout(() > {alert(2);}, 0)</script> <script src"https://test.tms-uat.xuebangsoft.net/plugins/jquery-1.10.2.min.js"></script>…...

湛江建网站/站优化

Zull实际上就是一个servlet&#xff0c;一个网关的servlet。 public class ZuulServlet extends HttpServlet {private static final long serialVersionUID -3374242278843351500L;private ZuulRunner zuulRunner;Overridepublic void service(javax.servlet.ServletRequest…...