分布式介绍

2023年 7月 14日 50.5k 0

分布式是什么?

分布式是指将一个系统或应用程序分散到多个计算机或服务器上,这些计算机或服务器通过网络进行通信和协作,共同完成某个任务或提供某个服务。

image.png

分布式系统的优点

  • 可靠性高:分布式系统中的各个节点相互独立,一个节点的故障不会影响到其他节点的正常运行,因此分布式系统具有很高的可靠性。
  • 可扩展性好:分布式系统可以通过增加节点的方式来扩展系统的处理能力,从而满足不断增长的用户需求。
  • 高性能:分布式系统可以将任务分配到不同的节点上并行处理,从而提高系统的处理能力和响应速度。

分布式系统的缺点

  • 数据一致性难以保证:分布式系统中的数据分布在不同的节点上,数据的一致性难以保证,需要采用一些特殊的算法来保证数据的一致性。
  • 网络和通信故障:网络的不可靠,消息可能丢失、早到、迟到,这给机器间的协调带来了极大的复杂度。像TCP等网络基础协议,能解决部分问题,但更多的需要系统层面自己处理。更不用说,开放式网络上可能存在的消息伪造。
  • 管理复杂度:机器数量到达一定数量级时,如何对他们进行有效监控、收集日志、负载均衡,都是很大挑战。

分布式系统中的常用名词

  • 节点(Node):分布式系统中的每个计算机或服务器都被称为一个节点,节点可以独立运行,也可以通过网络进行通信和协作。
  • 集群(Cluster):分布式系统中所有计算机或服务器的集合。
  • 通信(Communication):分布式系统中的节点之间需要进行通信和数据交换,通信的可靠性和效率是分布式系统的关键问题之一。
  • 数据同步(Data Synchronization):由于分布式系统中的数据分布在不同的节点上,节点之间需要进行数据同步和一致性问题的处理,保证数据的正确性和一致性。
  • 负载均衡(Load Balancing):分布式系统中的节点负责处理不同的任务,如何合理地分配任务和负载,保证系统的高效运行是分布式系统的关键问题之一。
  • 网络分区(Network Partition):指在分布式系统中,由于网络故障或其他原因,导致系统中的节点被分割成多个不连通的子集,每个子集中的节点无法与其他子集中的节点进行通信和协作。

CAP理论

CAP 代表什么?

  • C:Consistency,一致性,是指所有节点在同一时刻的数据是相同的,即更新操作执行结束并响应用户完成后,所有节点存储的数据会保持相同。
  • A:Availability,可用性,是指系统提供的服务一直处于可用状态,对于用户的请求可即时响应。
  • P:Partition Tolerance,分区容错性,是指在分布式系统遇到网络分区的情况下,仍然可以响应用户的请求。

image.png

CAP 理论:指的就是,在分布式系统中C、A、P这三个特征不能同时满足,只能满足其中两个。

为什么 CAP 不能同时满足?

  • P 是前提,因为在分布式系统中,网络基础设施无法做到始终保持稳定,网络分区难以避免,不满 P,就相当于放弃使用分布式系统。
  • 接下我们分别讨论满足 CP 时 A 能否满足、满足 AP 是 C 能否满足?

满足 CP 是 A 能否满足?

image.png

满足 AP 是 C 能否满足?

image.png

CAP选择策略及实现

CAP 不能同时实现,P 又不能舍弃,那么 CP 和 AP 之间我们如何选择?

  • 选择 CP 的场景:
    • 分布式场景需要很强的数据一致性,或者该场景可以容忍系统长时间无响应的情况下。
    • 一旦发生网络分区会导致数据无法同步情况,就要牺牲系统的可用性,降低用户体验,直到节点数据达到一致后再响应用户。
    • 通常用在涉及金钱交易的分布式场景下,因为它任何时候都不允许出现数据不一致的情况。
  • 选择 AP 的场景:
    • 分布式场景需要很高的可用性,或者说在网络状况不太好的情况下,该场景允许数据暂时不一致。
    • 网络分区出现后,各个节点之间数据无法马上同步,为了保证高可用,分布式系统需要即刻响应用户的请求。此时可能某些节点还没有拿到最新数据,只能将本地旧的数据返回给用户,从而导致数据不一致的情况。
    • 适合保证AP放弃C的场景有很多。比如,很多查询网站、电商系统中的商品查询等,用户体验非常重要,所以大多会保证系统的可用性,而牺牲一定的数据一致性。

CP 如何实现

  • 以 ZooKeeper 为例介绍一种 CP 的实现方式
    • ZooKeeper 集群包含多个节点,这些节点会通过分布式选举算法选出一个Leader节点。
    • 当用户向节点发送写请求时,如果请求的节点刚好是Leader,那就直接处理该请求。
    • 如果请求的是Follower节点,那该节点会将请求转给Leader(写请求转发),然后Leader会先向所有的Follower发出一个Proposal,等超过一半的节点同意后(多数派原则),Leader才会提交这次写操作。
    • 如果有一些节点没有同意该操作,那么它们会被视为“落后节点(Lagging Nodes)”,即它们的状态落后于其他节点。当这些落后节点恢复后,它们会通过协议进行同步,从而与其他节点保持一致。
    • 当一个节点接收到一个读请求时,它会检查自己是否为落后节点,如果不是,则直接返回数据;如果是,则会将请求转发给最新的节点,最新的节点返回数据后,中间节点再将数据返回给客户端(读请求转发)。
    • 当出现网络分区时,如果其中一个分区的节点数大于集群总节点数的一半,那么这个分区可以再选出一个Leader,仍然对用户提供服务,但在选出Leader之前,不能正常为用户提供服务;如果形成的分区中,没有一个分区的节点数大于集群总节点数的一半,那么系统不能正常为用户提供服务,必须待网络恢复后,才能正常提供服务。

BASE理论

BASE 代表什么?

  • BA:基本可用(Basically Available),指系统在出现故障或者部分故障时,仍然能够保证基本的可用性和可靠性,即系统能够在有限的时间内返回一个非错误的响应结果,而不是返回错误信息或者长时间等待。
  • S:软状态(Soft State),指系统中的数据状态可以在一段时间内不同步,即系统中的数据状态是不稳定的,但是最终会达到一致的状态。这种状态通常由于系统中的并发操作、网络延迟、节点故障等原因导致。
  • E:最终一致性(Eventually Consistent),指系统中的所有副本最终会达到一致的状态,但是在某个时间点上可能会存在不一致的状态。这种状态通常由于系统中的异步复制、数据同步延迟等原因导致。

CAP 和 BASE 的区别

  • CAP理论是一种理论框架,它提供了一种思考分布式系统的方式。
  • BASE理论则是一种实践经验,强调了系统的可用性和可扩展性,而不是强一致性。在分布式系统中,强一致性往往需要付出较高的代价,而BASE理论则提供了一种更加灵活和实用的解决方案,可以在一定程度上平衡系统的一致性和可用性。它提供了一种实现分布式系统的方法。

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论