分布式理论,看完这篇你定能有所获

本文深入探讨了分布式系统的理论,从分布式系统的基础概念、CAP定理到BASE理论,详细解释了两阶段提交(2PC)和三阶段提交(3PC)的一致性协议。此外,还深入解析了Paxos和Raft算法,帮助读者理解如何在分布式环境中保证数据一致性。
摘要由CSDN通过智能技术生成

分布式架构系统回顾

分布式系统概念

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

简单点说,所谓分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。
在这里插入图片描述
分布式与集群的区别

  • 集群:多个人在一起做同样的事
  • 分布式 :多个人在一起做不同的事
    在这里插入图片描述
    分布式系统的特点:
    • 分布性
    • 对等性
    • 并发性
    • 缺乏全局时钟
    • 故障总是会发生

分布式架构的演变

  • 阶段一 单应用架构
    在这里插入图片描述

  • 阶段二 应用服务器与数据库服务器分离
    在这里插入图片描述

  • 阶段三 应用服务器集群
    在这里插入图片描述

  • 阶段四 应用服务器负载客户
    在这里插入图片描述

  • 阶段五 数据库读写分离
    在这里插入图片描述

  • 阶段六 添加搜索引擎环节读库压力
    在这里插入图片描述

  • 阶段七 添加缓存机制缓解数据库压力
    在这里插入图片描述

  • 阶段八 数据库水平/垂直拆分
    在这里插入图片描述

  • 阶段九 应用拆分
    在这里插入图片描述

  • 阶段十 服务化
    在这里插入图片描述

分布式系统面临的问题

  • 通信异常
    网络本身的不可靠性,因此每次网络通信都会伴随着网络不可用的风险(光纤、路由、DNS等硬件设备或系统的不可用),都会导致最终分布式系统无法顺利进行一次网络通信,另外,即使分布式系统各节点之间的网络通信能够正常执行,其延时也会大于单机操作,存在巨大的延时差别,也会影响消息的收发过程,因此消息丢失和消息延迟变的非常普遍。
  • 网络分区
    网络之间出现了网络不连通,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干个孤立的区域,分布式系统就会出现局部小集群,在极端情况下,这些小集群会独立完成原本需要整个分布式系统才能完成的功能,包括数据的事务处理,这就对分布式一致性提出非常大的挑战。
  • 节点故障
    节点故障是分布式系统下另一个比较常见的问题,指的是组成分布式系统的服务器节点出现的宕机或"僵死"现象,根据经验来说,每个节点都有可能出现故障,并且经常发生。
  • 三态
    分布式系统每一次请求与响应存在特有的“三态”概念,即成功、失败和超时。
    分布式系统中,由于网络是不可靠的,虽然绝大部分情况下,网络通信能够接收到成功或失败的响应,但当网络出现异常的情况下,就会出现超时现象,通常有以下两种情况:
    • 由于网络原因,该请求并没有被成功的发送到接收方,而是在发送过程就发生了丢失现象。
    • 该请求成功的被接收方接收后,并进行了处理,但在响应反馈给发送方过程中,发生了消息丢失现象。

分布式理论:一致性

什么是分布式一致性

分布式数据一致性,指的是数据在多份副本中存储时,各副本中的数据是一致的。

副本一致性

分布式系统当中,数据往往会有多个副本。如果是一台数据库处理所有的数据请求,那么通过ACID四原则,基本可以保证数据的一致性。而多个副本就需要保证数据会有多份拷贝。这就带来了同步的问题,因为我们几乎没有办法保证可以同时更新所有机器当中的包括备份所有数据。 网络延迟,即使我在同一时间给所有机器发送了更新数据的请求,也不能保证这些请求被响应的时间保持一致存在时间差,就会存在某些机器之间的数据不一致的情况。
在这里插入图片描述
总得来说,我们无法找到一种能够满足分布式系统所有系统属性的分布式一致性解决方案。因此,如何既保证数据的一致性,同时又不影响系统运行的性能,是每一个分布式系统都需要重点考虑和权衡的。于是,一致性级别由此诞生:

一致性分类

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

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

  • 读写一致性
    用户读取自己写入结果的一致性,保证用户永远能够第一时间看到自己更新的内容。

      比如我们发一条朋友圈,朋友圈的内容是不是第一时间被朋友看见不重要,但是一定要显示在自己的列表上. 
      解决方案: 
      方案1:一种方案是对于一些特定的内容我们每次都去主库读取。 (问题主库压力大) 
      方案2:我们设置一个更新时间窗口,在刚刚更新的一段时间内,我们默认都从主库读取,过了这个窗口之后,我们会挑 选最近有过更新的从库进行读取 
      方案3:我们直接记录用户更新的时间戳,在请求的时候把这个时间戳带上,凡是最后更新时间小于这个时间戳的从库都 不予以响应。
    
  • 单调读一致性
    本次读到的数据不能比上次读到的旧

      由于主从节点更新数据的时间不一致,导致用户在不停地刷新的时候,有时候能刷出来,再次刷新之后会发现数据不见 了,再刷新又可能再刷出来,就好像遇见灵异事件一样 
      解决方案:
      就是根据用户ID计算一个hash值,再通过hash值映射到机器。同一个用户不管怎么刷新,都只会被映射到同 一台机器上。这样就保证了不会读到其他从库的内容,带来用户体验不好的影响。
      ![在这里插入图片描述](https://img-blog.csdnimg.cn/5f937f5e0b6743df90ecdeecd3198876.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAQ2FwdGFpbiBMZW8=,size_20,color_FFFFFF,t_70,g_se,x_16)
    
  • 因果一致性
    指的是:如果节点 A 在更新完某个数据后通知了节点 B,那么节点 B 之后对该数据的访问和修改都是基于 A 更新后 的值。于此同时,和节点 A 无因果关系的节点 C 的数据访问则没有这样的限制。

  • 最终一致性
    最终一致性是所有分布式一致性模型当中最弱的。可以认为是没有任何优化的“最”弱一致性,它的意思是说,我不考虑 所有的中间状态的影响,只保证当没有新的更新之后,经过一段时间之后,最终系统内所有副本的数据是正确的。 它最大程度上保证了系统的并发能力,也因此,在高并发的场景下,它也是使用最广的一致性模型
    在这里插入图片描述

分布式理论:CAP定理

CAP 定理

2000 年7月的时候,加州大学伯克利分校的Eric Brewer 教授提出了 CAP 猜想,2年后,被 来自于麻省理工的Seth Gilbert 和 Nancy Lynch 从理论上证明了猜想的可能性,从此,CAP 定理正式在学术上成为了分布式计算领域的公认定理。并深深的影响了分布式计算的发展。

CAP 理论含义是,一个分布式系统不可能同时满足一致性(C:Consistency)可用性(A: Availability)和分区容错性(P:Partition tolerance) 这三个基本需求,最多只能同时满足其中的2个

选项 描述
C 一致性 分布式系统当中的一致性指的是所有节点的数据一致,或者说是所有副本的数据一致
A 可用性 Reads and writes always succeed. 也就是说系统一直可用,而且服务一直保持正常
P 分区容错性 系统在遇到一些节点或者网络分区故障的时候,仍然能够提供满足一致性和可用性的服务

在这里插入图片描述

  • C - Consistency
    一致性是值写操作后读操作可以读到最新的数据状态,当数据分布在多个节点上时,从任意节点读取到的数据都是最新的.

    • 商品信息读写要满足一致性需要实现如下目标:

      • 1.商品服务写入主数据库成功, 则想从数据库查询数据也成功
      • 2.商品服务写入主数据库失败,则向从数据库查询也失败
    • 如何实现一致性?

      • 1.写入主数据库后要数据同步到从数据库
      • 2.写入主数据库后,在向从数据库同步期间要将从数据库锁定, 等待同步完成后在释放锁,以免在写新数据后,向从数据库查询到旧的数据.
    • 分布式一致性的特点:

      • 1.由于存在数据库同步过程,写操作的响应会有一定的延迟
      • 2.为了保定数据的一致性,对资源暂时锁定,待数据同步完成后释放锁定资源
      • 3.如果请求数据同步失败的节点则会返回错误信息, 一定不会返回旧数据.
  • A - Availability
    可用性是指任何操作都可以得到响应的结果,且不会出现响应超时或响应错误。

    • 商品信息读写要满足可用性需要实现如下目标:
      • 1.从数据库接收到数据库查询的请求则立即能够响应数据查询结果
      • 2.从数据库不允许出现响应超时或错误
    • 如何实现可用性
  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 30
    评论
评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Captain Leo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值