分布式系统的概念与设计模式

news2024/9/21 17:32:57

概念

定义:分布式系统是指将数据和计算任务分散到多个独立的计算机上,这些计算机通过网络进行通信和协作,共同对外提供服务。分布式系统不仅提高了系统的可靠性和可扩展性,还增强了系统的并发处理能力和数据管理能力。
特点:

  • 独立性:系统中的每个节点都是独立的计算机,它们各自拥有独立的处理器、内存和存储资源。
  • 网络通信:节点之间通过网络进行通信,传递数据和指令。
  • 协同工作:节点之间通过协作完成共同的任务,实现数据的共享和一致。
  • 透明性:对于用户而言,分布式系统看起来就像一个整体,用户无需关心数据和计算任务在哪些节点上执行。

原理

1、节点与网络
节点:系统中的每个独立计算机都是一个节点,它们按照协议完成计算工作。节点可以是执行某些工作的进程或物理机器。
网络:系统的数据传输通道,用于节点之间的通信。通信具有方向性,且可能受到网络延迟、丢包等因素的影响。

2、 数据存储与一致性
分布式系统需要解决数据存储的一致性问题。由于数据分布在多个节点上,如何保证这些节点上的数据在逻辑上是一致的,是分布式系统面临的重要挑战。
一致性可以分为强一致性、弱一致性和最终一致性等多种类型。强一致性要求所有节点在同一时间看到相同的数据;弱一致性则允许数据在一段时间内存在不一致;最终一致性则要求数据在经过一段时间后达到一致。

3、并发与容错

  • 分布式系统需要处理大量的并发请求,因此必须具备良好的并发处理能力。这通常通过多线程、异步处理等技术实现。
  • 分布式系统还需要具备容错能力,以应对节点故障、网络中断等异常情况。通过冗余部署、负载均衡、故障恢复等技术,可以提高系统的可靠性和可用性。

4、CAP理论
CAP理论是分布式系统中最著名的理论之一,它指出一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两项。

  • 一致性要求所有节点在同一时间看到相同的数据;可用性要求系统一直可用,且对每个请求都能给出响应;分区容错性则要求系统在遇到网络分区等故障时仍能继续提供服务。
  • 在实际应用中,通常需要根据具体需求在CAP之间进行权衡和取舍。例如,一些系统可能更注重一致性和可用性(如关系型数据库),而另一些系统则可能更注重可用性和分区容错性(如分布式缓存系统)。

设计模式

1、布隆过滤器
在这里插入图片描述

Bloom过滤器是一种节省空间的概率数据结构,用于测试元素是否为某集合的成员。它用于我们只需要检查元素是否属于对象的场景。
在BigTable(和Cassandra)中,任何读取操作都必须从组成Tablet的SSTable中读取。如果这些SSTable不在内存中,则读取操作可能最终会执行许多磁盘访问以便读取所需的SSTable。为了减少磁盘访问次数,BigTable 使用Bloom过滤器。

2、一致性哈希
一致的哈希允许您轻松扩展,从而允许以有效的方式复制数据,从而实现更好的可用性和容错能力。
通过对数据项的键进行哈希处理以产生其在环上的位置,然后顺时针遍历环以查找位置大于该项位置的第一个节点,将每个由键标识的数据项分配给节点。与节点关联的节点是数据项的位置。
在这里插入图片描述
一致散列的主要优点是增量稳定性;节点离开或到达集群仅影响其直接邻居,其他节点不受影响。

3、Quorum
在分布式环境中,quorum是在确认操作成功之前需要成功执行此分布式操作的最小服务器数。
在这里插入图片描述
Cassandra,为了确保数据一致性,每个写入请求都可以配置为仅当数据已写入至少一个quorum(或大多数)副本节点时才成功。
对于领导者选举,Chubby使用Paxos,它使用quorum来确保强大的一致性。
Dynamo 将写入复制到系统中其他节点的草率quorum,而不是像Paxos那样的严格多数quorum。所有读/写操作都在首选项列表中的第一个NN正常节点上执行,该节点可能并不总是在遍历一致哈希环时遇到的第一个NN节点。

4、领导者(Leader)和追随者(Follower)
为了在管理数据的系统中实现容错,需要在多个服务器上复制数据。
在集群中选择一个服务器作为领导者。领导者负责代表整个集群做出决策,并将决策传播到所有其他服务器。
三到五个节点的集群,就像在实现共识的系统中一样,领导者选举可以在数据集群本身内实施,而不依赖于任何外部系统。领导者选举在服务器启动时进行。每个服务器在启动时都会启动领导者选举,并尝试选举领导者。除非选出领导者,否则系统不接受任何客户端请求。

5、心跳
心跳机制用于检测现有领导者是否失败,以便可以启动新的领导者选举。

6、Fencing
在领导者-追随者模式中,当领导者失败时,不可能确定领导者已停止工作。例如,慢速网络或网络分区可能会触发新的领导者选举,即使前一个领导者仍在运行并认为它仍然是活动的领导者。
屏蔽是指在以前处于活动状态的领导者周围设置围栏,使其无法访问集群资源,从而停止为任何读/写请求提供服务。
使用以下两种技术:
● 资源屏蔽:系统会阻止以前处于活动状态的领导者访问执行基本任务所需的资源。
● 节点屏蔽:系统会阻止以前处于活动状态的领导者访问所有资源。执行此操作的常见方法是关闭节点电源或重置节点。

7、WAL(预写日志Write-ahead Log)
预写日志记录是解决操作系统中文件系统不一致的问题的高级解决方案。受数据库管理系统的启发,此方法首先将要执行的操作的摘要记入“日志”中,然后再将其实际写入磁盘。在发生崩溃的情况下,操作系统只需检查此日志并从中断的位置继续。

8、分段日志
将日志拆分为多个较小的文件,而不是单个大文件,以便于操作。
单个日志文件在启动时读取时可能会增长并成为性能瓶颈。较旧的日志会定期清理,并且很难对单个大文件执行清理操作。
单个日志拆分为多个段。日志文件在指定的大小限制后滚动。使用日志分段,需要有一种将逻辑日志偏移量(或日志序列号)映射到日志段文件的简单方法。

9、高水位线(High-Water mark)
跟踪领导者上的最后一个日志条目,该条目已成功复制到追随者的quorum。日志中此条目的索引称为高水位线索引。领导者仅公开到高水位线索引的数据。
Kafka:为了处理非可重复读取并确保数据一致性,Kafka broker会跟踪高水位线,这是特定分区的最大偏移量。使用者只能看到高水位线之前的消息。

10、租约(Lease)
租约就像一个锁,但即使客户端离开,它也能工作。客户端请求有限期限的租约,之后租约到期。如果客户端想要延长租约,它可以在租约到期之前续订租约。
Chubby客户端与领导者保持有时限的会话租约。在此时间间隔内,领导者保证不会单方面终止会话。

11、Gossip协议
Gossip协议是点对点通信机制,其中节点定期交换有关自己和他们所知道的其他节点的状态信息。
每个节点每秒启动一轮Gossip回合,以与另一个随机节点交换有关自己和其他节点的状态信息。
在这里插入图片描述

12、Phi 累计故障检测(Phi Accrual Failure Detection)
此算法使用历史检测信号信息使阈值自适应。通用的应计故障检测器不会判断服务器是否处于活动状态,而是输出有关服务器的可疑级别。
Cassandra使用Phi应计故障检测器算法来确定群集中节点的状态。

13、脑裂
分布式系统具有两个或多个活动领导者的场景称为脑裂。
通过使用生成时钟(Generation Clock)可以解决脑裂问题,生成时钟只是一个单调递增的数字,用于指示服务器的生成。
每次选出新领导者时,时钟数字(generation number)都会增加。这意味着,如果旧领导者的时钟数为“1”,则新领导人的时钟数将为“2”。此时钟号包含在从领导发送到其他节点的每个请求中。通过这种方式,节点现在可以通过简单地信任具有最高数字的领导者来轻松区分真正的领导者。
Kafka:为了处理脑裂(我们可以有多个active controller broker),Kafka使用“纪元数”(Epoch number),这只是一个单调增加的数字来表示服务器的代次(generation)。
HDFS:ZooKeeper用于确保任何时候只有一个NameNode处于活动状态。epoch编号作为每个事务ID的一部分进行维护,以反映NameNode的代次。

14、校验和(checksum)
在分布式系统中,在组件之间移动数据时,从节点获取的数据可能会损坏。
计算校验和并将其与数据一起存储。
要计算校验和,请使用MD5、SHA-1、SHA-256或SHA-512等加密哈希函数。哈希函数获取输入数据并生成固定长度的字符串(包含字母和数字);此字符串称为校验和。
当系统存储某些数据时,它会计算数据的校验和,并将校验和与数据一起存储。当客户端检索数据时,它会验证从服务器接收的数据是否与存储的校验和匹配。如果没有,则客户端可以选择从另一个副本检索该数据。
HDFS和Chubby将每个文件的校验和与数据一起存储。

15、CAP定理
CAP定理指出,分布式系统不可能同时提供以下所有三个理想属性:
一致性(C)、可用性(A)和分区容差(P)。
根据CAP定理,任何分布式系统都需要从三个属性中选择两个。这三个选项是CA、CP和AP。
Dynamo:在CAP定理术语中,Dynamo属于AP系统的类别,旨在牺牲强一致性为代价实现高可用性。
BigTable:就CAP定理而言,BigTable是一个CP系统,即它具有严格一致的读取和写入。

16、PACELEC定理
PACELC定理指出,在复制数据的系统中:
● 如果有一个分区(‘P’),分布式系统可以在可用性和一致性(即’A’和’C’)之间进行权衡;
● 否则(‘E’),当系统在没有分区的情况下正常运行时,系统可以在延迟(‘L’)和一致性(‘C’)之间进行权衡。
在这里插入图片描述
定理(PAC)的第一部分与CAP定理相同,ELC是扩展。整个论点假设我们通过复制来保持高可用性。因此,当失败时,CAP定理占上风。但如果没有,我们仍然必须考虑复制系统的一致性和延迟之间的权衡。

17、提示交接(Hinted Handoff)
如果节点关闭,系统会保留它们错过的所有请求的提示(或注释)。故障节点恢复后,将根据存储的提示将请求转发给它们。
当节点关闭时,领导者会在本地磁盘上的文本文件中写入提示。此提示包含数据及其所属的节点信息。当领导者意识到它为其保留提示的节点已恢复时,它会将每个提示的写入请求转发到该节点。

18、读取时修复
在分布式系统中,数据跨多个节点复制,某些节点最终可能会拥有过时的数据。
在读取操作期间修复过时的数据,因为此时,我们可以从多个节点读取数据以进行比较并找到具有过时数据的节点。此机制称为读取修复。一旦已知具有旧数据的节点,读取修复操作就会将较新版本的数据推送到具有较旧版本的节点。
Cassandra和Dynamo使用“读取修复”将最新版本的数据推送到具有旧版本的节点。

19、默克尔树(Merkle Trees)
“读取修复”可在处理读取请求时消除冲突。但是,如果某个副本明显落后于其他副本,则可能需要很长时间才能解决冲突。
副本可以包含大量数据。单纯地拆分整个范围来计算校验和进行比较并不是很可行;有太多的数据需要传输。相反,我们可以使用Merkle树来比较一个范围的副本。
Merkle树是哈希的二叉树,其中每个内部节点是其两个子节点的哈希,每个叶节点是原始数据一部分的哈希。
在这里插入图片描述

比较Merkle树在概念上很简单:
● 比较两个树的根哈希。
● 如果它们相等,请停止。
● 在左边和右边的孩子上递归检查。
为了实现反熵和在后台解决冲突,Dynamo使用Merkle树。

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

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

相关文章

内存:生成式AI带来全新挑战与机遇

之前小编也写过多篇AI存储相关的文章,包括AI背景与分层存储的分析,以及AI存储重点从训练转向推理等内容。具体参考: 深度剖析:AI存储架构的挑战与解决方案 存储正式迈入超大容量SSD时代! 这可能是最清晰的AI存储数据…

多线程篇七

多线程篇七 若笔者理解有误,欢迎交流指正⭐ 定时器 什么是定时器 听到定时器,首先想到的是“闹钟”.到一个设置好的时间之后就执行某个指定好的代码.(在实际开发中非常常用,如网络通信【邮件发送】) 你在抢演唱会门票,已经到了…

使用madExcept检测内存泄漏

代码异常堆栈跟踪:Mad Except 一、安装 官网 运行,选择madExcept5然后安装。 输入yes继续 二、使用 新建一个VCL项目 在project中多了一项设置 选择OK后会发现项目多了几个引用单元。 此时运行程序,再退出,会显示没有任何内存…

prober found high clock drift,Linux服务器时间不能自动同步,导致服务器时间漂移解决办法。

文章目录 一、场景二、问题三、解决办法(一)给服务器添加访问网络能力(二)手动同步1. 检查有没有安装ntp2. 没有安装ntp则离线安装ntp2.1 下载安装包2.2 安装2.3 启动 ntp 3. 设置内部时钟源3.1 编辑/etc/ntp.conf3.1 重启ntp服务…

2010-2020年全国30个省以GDP为核心的区域经济韧性数据(含原始数据+代码+结果)

2010-2020年全国30个省以GDP为核心的区域经济韧性数据(含原始数据代码结果) 1、时间:2010-2022年 2、来源:统计年鉴、各省年鉴、国家统计局 3、指标:地区生产总值 4、范围:30省 5、参考文献: 数字经济及其内部耦…

页面关键路径渲染详解

关键路径渲染 浏览器不会等待全部资源都下载完后才进行渲染,而是采用渐进式的渲染方式,本文就介绍一下这种渐进式的渲染方式。 当浏览器获取到用于呈现网页的资源后,通常就会开始渲染网页。那么究竟是在什么时候就会开始渲染? …

Visual Studio 2022 - QT 环境中文字符乱码问题

Visual Studio 2022 - QT 环境中文字符乱码问题 一、Visual Studio 2022 - Qt 环境 在 QT 中使用中文字符串常会出现乱码现象&#xff0c;如下&#xff1a;以下提供了几个解决方法&#xff0c;仅供参考 QString str "百香果真是一直可爱的小猫咪"; qDebug() <…

RK3568笔记六十:V4L2命令测试

若该文为原创文章,转载请注明原文出处。 测试V4L2是想移植韦老师的相机程序,但他使用的是V4L2方式采集摄像头。 而正点原子的rknn使用的是opencv。 这里记录测试过程 一、常用调试命令 1、抓取图像 使用 v4l2-ctl 抓取一帧图像:v4l2-ctl -d /dev/video0 --set-fmt-video…

EmptyDir-数据存储

1.EmptyDir EmptyDir是最基础的Volume类型&#xff0c;一个EmptyDir就是Host上的一个空目录。 EmptyDir是在Pod被分配到Node时创建的&#xff0c;它的初始内容为空&#xff0c;并且无须指定宿主机上对应的目录文件&#xff0c;因为kubernetes会自动分配一个目录&#xff0c;当…

vulnhub(12):bob 1.0.1(gpg文件解密)

端口 nmap主机发现 nmap -sn 192.168.72.0/24 ​ Nmap scan report for 192.168.72.169 Host is up (0.00020s latency). ​ 169是新出现的机器&#xff0c;他就是靶机 nmap端口扫描 nmap -Pn -sV 192.168.72.169 -p- --min-rate 10000 -oA nmap/scan 扫描开放端口保存到 nmap…

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL17

用3-8译码器实现全减器 描述 请使用3-8译码器和必要的逻辑门实现全减器&#xff0c;全减器接口图如下&#xff0c;A是被减数&#xff0c;B是减数&#xff0c;Ci是来自低位的借位&#xff0c;D是差&#xff0c;Co是向高位的借位。 3-8译码器代码如下&#xff0c;可将参考代码添…

论文阅读:Omni-Kernel Network for Image Restoration

论文地址&#xff1a;https://ojs.aaai.org/index.php/AAAI/article/view/27907 项目地址&#xff1a;https://github.com/c-yn/OKNet 发表时间&#xff1a;2024 图像恢复的目的是从一个退化的低质量的观测中重建一个高质量的图像。最近&#xff0c;Transformer模型由于其强大…

upx魔改壳大全

一&#xff0c;ELF程序 &#xff08;一&#xff09;overlay_offset被修改 将此标志修改为正确的***F4 00 00 00***即可用工具正常脱壳 二&#xff0c;EXE程序 &#xff08;一&#xff09;upx标志位被修改 将三个错误标志修改为正确的***UPX0***UPX1***UPX!***即可用工具正常…

利用JAVA写一张纸折叠珠穆拉玛峰高度

public class zhumulama {public static void main(String[] args) {double height 8848860;double zhi 0.1;int count 0;while(zhi < height){zhi*2;//每次折完厚度count;//计数}System.out.println("一共需要折"count"次");System.out.println(&qu…

灵当CRM系统index.php存在SQL注入漏洞

文章目录 免责申明漏洞描述搜索语法漏洞复现nuclei修复建议 免责申明 本文章仅供学习与交流&#xff0c;请勿用于非法用途&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任 漏洞描述 灵当CRM系统是一款功能全面、易于使用的客户关系管理&#xff08;C…

C++ ——日期类的实现和注释浅解

目录 日期类实现 1. 日期天数 2. 日期天数 3. 日期-天数 3.1 日期-天数 4. 比较运算符 5. 日期-日期 6. 代码汇总 Date.h Date.cpp Test.cpp 日期类实现 1. 日期天数 // d1 100 //可以改变d1&#xff0c;所以可以直接相加 Date& Date::operator(int day) {//如…

2024年中国研究生数学建模竞赛F题思路代码模型文章——X射线脉冲星光子到达时间建模

2024年中国研究生数学建模竞赛F题 X射线脉冲星光子到达时间建模 脉冲星&#xff08;Pulsar&#xff09;是高速自转的中子星&#xff0c;具有体积小、密度大的特征。脉冲星的高速自转会形成脉冲&#xff0c;而脉冲的周期其实就是脉冲星的自转周期 。在旋转过程中&#xff0c;脉…

2024年华为杯研赛(B题)数学建模竞赛解题思路|完整代码论文集合

我是Tina表姐&#xff0c;毕业于中国人民大学&#xff0c;对数学建模的热爱让我在这一领域深耕多年。我的建模思路已经帮助了百余位学习者和参赛者在数学建模的道路上取得了显著的进步和成就。现在&#xff0c;我将这份宝贵的经验和知识凝练成一份全面的解题思路与代码论文集合…

CleanClip --- 为Mac用户打造的智能剪贴板管理利器

CleanClip是一款专为Mac用户设计的强大剪贴板管理工具&#xff0c;旨在提升用户的工作效率和数据管理体验。它通过智能化的剪贴板内容管理&#xff0c;实现了Mac系统与用户操作之间的无缝衔接。CleanClip支持多种连接方式&#xff0c;包括系统级的快捷操作和自定义快捷键&#…

虚拟机VMware安装+centos8

1、安装虚拟机 这里以VMware-workstation-full-14.1.1-7528167.exe为例进行安装虚拟机。 注意win11&#xff0c;不能安装14的版本&#xff0c;新建虚拟机打开会崩的。建议换成16版本的。 此处安装的为centos7版本&#xff0c;双击就可以开始安装了。 选择下一步 勾选我接受&a…