分布式架构与分布式理论

文章目录

    • 分布式架构
      • 什么是分布式系统
      • 分布式系统特性
      • 分布式系统面临的问题
    • 分布式理论
      • 数据一致性
      • CAP理论
      • BASE理论

分布式架构

什么是分布式系统

分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。

所谓分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。

在这里插入图片描述
分布式与集群的区别

集群: 多个服务器做同一个事情

在这里插入图片描述
分布式: 多个服务器做不同的事情

在这里插入图片描述

分布式系统特性

  • 分布性:空间中随机分布。这些计算机可以分布在不同的机房,不同的城市,甚至不同的国家。
  • 对等性:分布式系统中的计算机没有主/从之分,组成分布式系统的所有节点都是对等的。
  • 并发性:同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储。
  • 缺乏全局时钟:既然各个计算机之间是依赖于交换信息来进行相互通信,很难定义两件事件的先后顺序,缺乏全局时钟控制序列
  • 故障总会发生:组成分布式的计算机,都有可能在某一时刻突然间崩掉。分的计算机越多,可能崩掉一个的几率就
    越大。如果再考虑到设计程序时的异常故障,也会加大故障的概率。
  • 处理单点故障:单点SPoF(Single Point of Failure):某个角色或者功能只有某一台计算机在支撑,在这台计算机上出现的故障是单点故障。

分布式系统面临的问题

  • 通信异常
    网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤、路由、DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够正常执行,其延时也会大于单机操作,存在巨大的延时差别,也会影响消息的收发过程,因此消息丢失和消息延迟变的非常普遍。
    在这里插入图片描述

  • 网络分区
    网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统就会出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才能完成的功能,包括数据的事务处理,这就对分布式一致性提出非常大的挑战。
    在这里插入图片描述

  • 节点故障
    节点故障是分布式系统下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或"僵死"现象,根据经验来说,每个节点都有可能出现故障,并且经常发生.

  • 三态
    分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败和超时。
    在这里插入图片描述

  • 重发
    分布式系统在发生调用的时候可能会出现 失败 超时 的情况. 这个时候需要重新发起调用.
    在这里插入图片描述

  • 幂等
    一次和多次请求某一个资源对于资源本身应该具有同样的结果(网络超时等问题除外)。也就是说,其任意多次执行对资源本身所产生的影响均与一次执行的影响相同
    在这里插入图片描述

分布式理论

数据一致性

分布式数据一致性,指的是数据在多份副本中存储时,各副本中的数据是一致的。
在这里插入图片描述

副本一致性
分布式系统当中,数据往往会有多个副本。多个副本就需要保证数据的一致性。这就带来了同步的问题,因为网络延迟等因素, 我们几乎没有办法保证可以同时更新所有机器当中的包括备份所有数据. 就会有数据不一致的情况。
在这里插入图片描述

一致性分类

  1. 强一致性:是最符合用户直觉的,它要求系统写入什么,读出来的也会是什么,用户体验好,但实现起来往往对系统的性能影响大。强一致性很难实现。

  2. 弱一致性:约束了系统在写入成功后,不承诺立即可以读到写入的值,也不承诺多久之后数据能够达到一致,但会尽可能地保证到某个时间级别(比如秒级别)后,数据能够达到一致状态。

  3. 最终一致性:最终一致性也是弱一致性的一种,它无法保证数据更新后,所有后续的访问都能看到最新数值,而是需要一个时间,在这个时间之后可以保证这一点(就是在一段时间后,节点间的数据会最终达到一致状态),而在这个时间内,数据也许是不一致的,这个系统无法保证强一致性的时间片段被称为「不一致窗口」。不一致窗口的时间长短取决于很多因素,比如备份数据的个数、网络传输延迟速度、系统负载等。
    在这里插入图片描述
    最终一致性在实际应用中又有多种变种:

    • 因果一致性:如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则
      在这里插入图片描述
    • 读己之所写一致性:当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例
      在这里插入图片描述
    • 会话一致性:它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性。如果由于某些失败情形令会话终止,就要建立新的会话,而且系统的保证不会延续到新的会话。
      在这里插入图片描述
    • 单调读一致性:如果一个进程已经读取到一个特定值,那么该进程不会读取到该值以前的任何值。
      在这里插入图片描述
    • 单调写一致性:系统保证对同一个进程的写操作串行化。
      在这里插入图片描述
  4. 一致性模型图
    在这里插入图片描述

CAP理论

CAP定理(CAP theorem),又被称作布鲁尔定理(Brewer’s theorem),它指出对于一个分布式计算系统来说,不可能同时满足以下三点

选项含义
一致性(Consistency)所有节点访问时都是同一份最新的数据副本
可用性(Availability)每次请求都能获取到正常的响应,但是不保证获取的数据为最新数据
分区容错性(Partition tolerance)分布式系统在遇到任何网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务,
除非整个网络环境都发生了故障
  1. 一致性
    这里指的是强一致性
    在写操作完成后开始的任何读操作都必须返回该值,或者后续写操作的结果. 也就是说,在一致性系统中,一旦客户端将值写入任何一台服务器并获得响应,那么之后client从其他任何服务器读取的都是刚写入的数据
    在这里插入图片描述

    • 客户端向G1写入数据v1,并等待响应
    • 此时,G1服务器的数据为v1,而G2服务器的数据为v0,两者不一致
    • 接着,在返回响应给客户端之前,G2服务器会自动同步G1服务器的数据,使得G2服务器的数据也是v1
    • 一致性保证了不管向哪台服务器(比如这边向G1)写入数据,其他的服务器(G2)能实时同步数据
    • G2已经同步了G1的数据,会告诉G1,我已经同步了
    • G1接收了所有同步服务器的已同步的报告,才将“写入成功”信息响应给client
    • client再发起请求,读取G2的数据
    • 此时得到的响应是v1,即使client读取数据到G2
  2. 可用性
    系统中非故障节点收到的每个请求都必须有响应. 在可用系统中,如果我们的客户端向服务器发送请求,并且服务器未崩溃,则服务器必须最终响应客户端,不允许服务器忽略客户的请求

  3. 分区容错性
    允许网络丢失从一个节点发送到另一个节点的任意多条消息,即不同步. 也就是说,G1和G2发送给对方的任何消息都是可以放弃的,也就是说G1和G2可能因为各种意外情况,导致无法成功进行同步,分布式系统要能容忍这种情况。
    在这里插入图片描述
    在实际的业务中,这三方面是不能同时满足的,也很容易证明,最多只能满足其中的两个
    在这里插入图片描述

CAP三者如何权衡

  • CA (Consistency + Availability):关注一致性和可用性,它需要非常严格的全体一致的协议。CA 系统不能容忍网络错误或节点错误,一旦出现这样的问题,整个系统就会拒绝写请求,因为它并不知道对面的那个结点是否挂掉了,还是只是网络问题。唯一安全的做法就是把自己变成只读的。
  • CP (consistency + partition tolerance):关注一致性和分区容忍性。它关注的是系统里大多数人的一致性协议。这样的系统只需要保证大多数结点数据一致,而少数的结点会在没有同步到最新版本的数据时变成不可用的状态。这样能够提供一部分的可用性。
  • AP (availability + partition tolerance):这样的系统关心可用性和分区容忍性。因此,这样的系统不能达成一致性,需要给出数据冲突,给出数据冲突就需要维护数据版本。

如何进行3选2:
放弃了一致性,满足分区容错,那么节点之间就有可能失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会容易导致全局数据不一致性。对于互联网应用来说,机器数量庞大,节点分散,网络故障再正常不过了,那么此时就是保障AP,放弃C的场景,而从实际中理解,像网站这种偶尔没有一致性是能接受的,但不能访问问题就非常大了。
对于银行来说,就是必须保证强一致性,也就是说C必须存在,那么就只用CA和CP两种情况,当保障强一致性和可用性(CA),那么一旦出现通信故障,系统将完全不可用。另一方面,如果保障了强一致性和分区容错(CP),那么就具备了部分可用性。实际究竟应该选择什么,是需要通过业务场景进行权衡的(并不是所有情况都是CP好于CA,只能查看信息但不能更新信息有时候还不如直接拒绝服务)

BASE理论

上面我们讲到CAP 不可能同时满足,而分区容错性是对于分布式系统而言,是必须的。最后,我们说,如果系统能够同时实现 CAP 是再好不过的了,所以出现了 BASE 理论

BASE:全称:Basically Available(基本可用),Soft state(软状态),和 Eventually consistent(最终一致性)三个短语的缩写 ,Base 理论是对 CAP 中一致性和可用性权衡的结果,其来源于对大型互联网分布式实践的总结,是基于 CAP 定理逐步演化而来的。其核心思想是: 既是无法做到强一致性(Strong consistency),但每个应用都可以根据自身的业务特点,采用适当的方式来使系统达到最终一致性(Eventual consistency)。

  1. Basically Available(基本可用)
    什么是基本可用呢?假设系统,出现了不可预知的故障,但还是能用,相比较正常的系统而言:

    • 响应时间上的损失:正常情况下的搜索引擎 0.5 秒即返回给用户结果,而基本可用的搜索引擎可以在 1 秒返回结果。
    • 功能上的损失:在一个电商网站上,正常情况下,用户可以顺利完成每一笔订单,但是到了大促期间,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面
      在这里插入图片描述
  2. Soft state(软状态)
    什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种 “硬状态”。软状态指的是:允许系统中的数据存在中间状态,并认为该状态不会影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延时

  3. Eventually consistent(最终一致性)
    上面说软状态,然后不可能一直是软状态,必须有个时间期限。在期限过后,应当保证所有副本保持数据一致性。从而达到数据的最终一致性。这个时间期限取决于网络延时,系统负载,数据复制方案设计等等因素。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

html+CSS+js部分基础运用15

1、完成输入框内容的实时反向输出。 2、银行账户余额变动自动通知项目。 设计要求:单击按钮后,余额按照输入框的数额减少,同时将按钮式的提示信息(金额)同步改变。利用侦听属性实现余额发生变化时发出提示信息&#x…

LabVIEW减压阀和温控阀综合测试系统

在使用LabVIEW开发阀门测试软件时,特别是针对减压阀和温控阀,测试内容和注意事项包括以下方面: 测试内容 压力测试: 入口压力:测量阀门在不同入口压力下的表现。 出口压力:确保减压阀能够将出口压力控制在…

【一百零六】【算法分析与设计】并查集的实现,P3367 【模板】并查集,sizee集合的元素个数信息

并查集的实现 描述 给定一个没有重复值的整形数组arr,初始时认为arr中每一个数各自都是一个单独的集合。请设计一种叫UnionFind的结构,并提供以下两个操作。 boolean isSameSet(int a, int b): 查询a和b这两个数是否属于一个集合 void union(int a, int …

学习笔记——IP地址网络协议——VLSM-可变长子网掩码(子网划分)

四、VLSM-可变长子网掩码(子网划分) 1、为什么要子网划分 为什么要子网划分:有类IP地址规划的缺陷。IP地址空间只能按照默认的类别使用,例如一个B类地址,默认掩码为255.255.0.0,意味着这个地址空间里有2的16次方个IP,…

IDEA的使用配置Maven(及selenium+webdriver的下载配置)

一. 下载maven 1. maven官网下载链接 2.​​安装第二行第一列的zip压缩包 ​​​​​​​​ 二. 配置环境变量 1.新建环境变量 2.在系统变量Path环境变量中添加%Maven_HOME%\bin 三.验证环境变量是否配置成功 winr >cmd>mvn -v 如果出现Maven的版本信息&#xff0…

Nginx设置缓存后,访问网页404 问题原因及解决方案(随手记)

目录 问题描述Nginx文件 解决方案查看error_log日志问题原因修改文件并测试Nginx文件测试 总结 问题描述 在Nginx中设置缓存expires后,结果重启nginx,网站访问404了。 Nginx文件 server {listen 80;server_name bird.test.com;location / {root /app/…

PID算法在电机速度控制上的应用

目录 概述 1 系统硬件框架 1.1 框架介绍 1.2 硬件实物图 2 STM32Cub生成工程 2.1 软件版本信息 2.2 配置参数 ​编辑2.3 生成项目 3 PID算法实现 3.1 概念 3.2 代码实现 4 其他功能实现 4.1 设置电机速度 4.2 PID算法控制电机 4.3 功能函数的调用 5 测试 5.1 …

Java中常用的单目运算符及用法详解

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

2024年清洁能源与可持续发展国际会议(ICDESMF 2024)

2024 International Conference on Clean Energy and Sustainable Development 【1】大会信息 会议简称:ICDESMF 2024 大会时间:2024-07-22 大会地点:中国大理 截稿时间:2024-07-08(以官网为准) 审稿通知&#xff1a…

JFinal学习06 控制器——getPara()接收数据

JFinal学习06 控制器——getPara()接收数据 视频来源https://www.bilibili.com/video/BV1Bt411H7J9/?spm_id_from333.337.search-card.all.click 文章目录 JFinal学习06 控制器——getPara()接收数据零、JFinal数据提交的三种方式一、get提交二、post提交三、url参数化提交四、…

【全开源】Shopro社区团购(小程序版)

邻里间的购物新选择 基于Fastadmin后端管理系统Uniapp客户端(仅支持微信小程序)开发,生鲜果蔬社区团购的不二之选、快速搭建社区团购平台、让你的产品走进上千个社区。线上团购线下自提,玩转社区消费新模式提供专业、优质的社区团…

计算机网络 期末复习(谢希仁版本)第5章

**屏蔽作用:**运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。 10. 端口用一个 16 位端口号进行标志,允许…

Linux—小小内核升级

本篇主要是讲述下关于内核的一些基本常识,并记录下内核升级和编译的过程,若有遗漏/有误之处,望各位大佬们指出。 Ⅰ 基本内核常识 常见内核安装包 内核(kernel):这是Linux操作系统的核心部分,它负责管理系统的硬件和…

信号(上)

本节目标: 1. 掌握Linux信号的基本概念 2. 掌握信号产生的一般方式 3. 理解信号递达和阻塞的概念,原理。 4. 掌握信号捕捉的一般方式。 5. 重新了解可重入函数的概念。 6. 了解竞态条件的情景和处理方式 7. 了解SIGCHLD信号, 重新编写信号处理…

实现k8s网络互通

前言 不管是docker还是k8s都会在物理机组件虚拟局域网,只不过是它们实现的目标不同。 docker:针对同一个物理机(宿主机) k8s:针对的是多台物理机(宿主机) Docker 虚拟局域网 K8S虚拟局域网 …

2024-06-05-记一次cnvd渗透

前言:挖src挖郁闷了,闲来无事选择挖一个cnvd来练练手,本次的漏洞都没啥难度,企查查资产过了5000万 说一下cnvd证书的下放标准 对于中危及中危以上通用型漏洞(CVSS2.0基准评分超过4.0分),以及涉…

Wireshark抓包工具使用 项目实战

Wireshark 是一个开源的网络协议分析器,它可以让你捕获和分析网络数据包,帮助你诊断网络问题、监控网络流量、分析协议和进行安全审计。以下是一些基本的 Wireshark 用法: 捕获数据包: 打开 Wireshark,选择要捕获数据包…

13- Redis 中的 压缩列表 数据结构

压缩列表的最大特点,就是它被设计成一种内存紧凑型的数据结构,占用 一块连续的内存空间,不仅可以利用 CPU 缓存,而且会针对不同长度的数据,进行相应编码,这种方法可以有效的节省内存开销。 但是&#xff0…

C#-foreach循环语句

foreach循环语句 语法: foreach(数据类型 变量名 in 数组或集合对象) { 语句块; } foreach 会在每次循环的过程中,依次从数组或集合对象中取出一个新的元素放foreach( )里定义的变量中,直到所有元素都成功取出后退出循环。 foreach循环…

Mysql root用户远程连接失败解决方案

最近,踩坑云服务器通过root用户远程连接Mysql数据库失败,Mysql 版本为 5.7.44,原因如下,因为root用户权限过大,可能会有风险操作,可以新增其他用户来解决此问题,如果一定要用root用户&#xff0…