04分布式

本文探讨了分布式系统中的互斥协调,介绍了中心化和去中心化的实现方式,如令牌环算法,以及它们在保证数据一致性、公平性和避免死锁方面的优缺点。特别强调了中心化方法的单点故障风险以及分布式互斥算法如令牌环的使用和挑战。
摘要由CSDN通过智能技术生成

04分布式

  1. Coordination: Mutual Exclusion 协调互斥

    1. centralized 集中式
    2. distributed 分布式
    3. token ring 令牌环

Coordination: Mutual Exclusion 协调互斥

在多个进程或线程同时访问共享资源时,保证同一时刻只有一个进程(或线程)能够访问共享资源的特性。互斥是分布式系统中非常重要的一个概念,因为如果多个进程同时访问共享资源而没有互斥机制,可能会导致数据不一致性或其他问题。

在分布式系统中实现互斥通常面临一些挑战,例如:

  1. 分布式环境的不确定性: 在分布式系统中,各个节点的相对速度和消息传递时间是不确定的,这使得确定一个全局的顺序变得非常困难。
  2. 通信延迟: 在分布式系统中,节点之间的通信存在延迟,因此需要考虑消息传递的时间,否则可能会导致竞争条件。

为了在分布式系统中实现互斥,通常采用以下方法之一:

  1. 中心化方法: 一个中心节点负责协调各个节点的访问请求。当一个节点需要访问共享资源时,它必须向中心节点发送请求,中心节点决定是否允许访问。
  2. 去中心化方法: 去中心化方法包括 Lamport 的分布式互斥算法、Ricart-Agrawala 算法、Maekawa 算法等。这些算法使用逻辑时钟或者消息传递的方式,使得节点能够协调彼此的访问请求,确保在同一时刻只有一个节点能够访问共享资源。
  3. 基于硬件的方法: 一些现代处理器提供硬件支持,例如原子操作、比较交换指令(compare-and-swap),这些指令可以帮助实现分布式系统中的互斥。
  4. 基于软件的方法: 使用分布式锁服务(例如 Zookeeper、etcd)或者分布式事务管理(例如 Two-Phase Commit)来确保在分布式系统中的互斥访问。

centralized 集中式

单个coordinator(协调器)控制流程是否可以进入关键区域

  • image
    • a申请之后会返回允许,别的再请求就无应答,并放入queue里,等前一个结束会发送release,接着会给队列的发送ok
  • 优点:
    1. 它能够工作(It works): 集中式系统在某种程度上可以正常工作。
    2. 公平性(It is fair): 它可以确保公平地分配资源或者任务。
    3. 没有进程饥饿(There’s no process starvation): 所有的进程都能够得到执行的机会,避免了某些进程因资源分配不公平而长时间得不到执行的情况。
    4. 易于实现(Easy to implement): 相对来说,集中式系统比较容易实现。
  • 缺点:
    1. 存在单点故障(There’s a single point of failure): 如果协调者发生故障,整个系统可能会瘫痪,因为它是系统的唯一控制点。
    2. 繁忙系统中的瓶颈(The coordinator is a bottleneck on busy systems): 在繁忙的系统中,协调者可能成为性能瓶颈,限制了系统的处理能力。
  • 如果协调者没有回复,可能是因为它发生了故障(失去响应,即“死”了)或者它正在处理大量的请求而无法立即回复(繁忙)。这种区分对于系统管理员或者开发人员来说非常重要,因为它决定了采取什么样的措施来解决问题。例如,如果协调者是“死”了,可能需要启动备用协调者或者采取其他故障恢复措施;而如果它只是繁忙,可能需要优化系统的性能或者增加协调者的处理能力

distributed 分布式

小组协商进程进入关键区域是否安全

  • 可以检查事件时间戳
  • 需要这些关键点
    • The critical region ID. The requesting process ID. The current time.
  • 互斥是指在多个进程或节点中,只有一个进程可以进入关键区域(critical region)执行,而其他进程必须等待
    • 当一个进程X(被称为“请求进程”)决定要进入关键区域时,它会向分布式系统中的所有进程发送消息,包括自己。
    • 每个接收到请求的进程N会根据自身的状态来决定如何回应:
      • 如果该进程N当前不在关键区域中(并且也不在等待进入关键区域的队列中),那么它会向请求进程X发送一个“OK”消息,表示允许它进入关键区域。
      • 如果该进程N当前正在关键区域中,那么它将把请求进程X的请求放入一个队列中,表示该请求被暂时拒绝。同时,该进程不会回复请求进程,即不发送任何回应消息。
    • 确保在任意时刻只有一个进程可以进入关键区域,而其他进程必须等待。当一个进程想要进入关键区域时,它会广播请求给所有其他进程,等待它们的回应。如果它收到了所有其他进程的“OK”回应,它就可以进入关键区域。如果有任何一个进程拒绝了请求(因为它自己在关键区域中),那么请求进程必须等待,直到所有其他进程都同意它的请求。这样可以确保在任何时刻只有一个进程可以进入关键区域,从而保持数据的一致性和正确性。
  • 当一个进程想要进入关键区域时,它会向所有其他进程发送请求消息,带有一个时间戳。
  • 每个接收到请求的进程会执行以下操作:
    • 如果该进程当前不在关键区域中,它会比较接收到的请求的时间戳与自身队列中最早的请求的时间戳。如果接收到的请求的时间戳比队列中的所有请求都要小(即更早),那么该进程将发送一个“OK”回应,表示允许请求进程进入关键区域。
    • 如果接收到的请求的时间戳不是最早的,那么该请求将被放入队列中,表示请求被暂时拒绝。同时,该进程不会发送回应消息。
  • 当请求进程收到所有其他进程的“OK”回应时,表示它可以安全地进入关键区域。
  • 当请求进程离开关键区域时,它会向队列中的所有进程发送“OK”消息,表示它已经离开。然后,它会清空自身的队列。

这个算法利用时间戳来确定请求的顺序,保证了最早发出请求的进程最先得到满足。当一个进程收到其他进程的回应后,如果它的请求时间戳比其他进程的都小,那么它就可以进入关键区域。当它离开关键区域时,它会通知队列中的其他进程,使得其中的一个进程可以获准进入关键区域。这样,算法保证了互斥性,确保了在关键区域内只有一个进程执行。这种做法可以提高算法的公平性和正确性。

  • image

    • 就是说此时的0和2的时间戳,0的更小,所以2允许0,同时1允许这俩,因为此时没有进程,当0结束之后0就发送ok给2
  • 这个算法利用时间戳(或者可以看作事件序列号)来确定事件在分布式系统中的总体顺序,从而解决了可能出现的冲突情况。在这个算法中,当进程请求进入关键区域时,它会带有一个时间戳,其他进程会比较接收到的请求的时间戳与自身队列中请求的时间戳。如果接收到的请求的时间戳较小(即请求较早),则允许该请求进程进入关键区域。

    优点:

    1. 能够工作: 这个算法确保了只有一个进程能够进入关键区域,保证了互斥性。
    2. 没有单点故障: 与某些集中式系统相比,该算法没有单点故障。如果某个节点出现问题,其他节点仍然可以正常运行。

    缺点:

    1. 多点故障: 引入时间戳的做法带来了新的问题,如果系统中的时钟同步出现问题,可能导致时间戳不准确,从而影响互斥性。
    2. “崩溃”被解释为进入关键区域的拒绝: 如果一个进程在处理请求时发生崩溃,其他进程可能会将其视为拒绝进入关键区域,即使该进程实际上是正常的。这种情况可能会导致系统的不正确行为。
    3. 需要消息的确认(ACK): 为了解决崩溃被误解的问题,可能需要引入消息确认机制,确保消息被正确接收。这会增加系统的复杂性。
  • 所有进程必须维护当前进程组的列表(这可能很棘手): 为了实现分布式互斥,每个进程都需要知道系统中其他进程的状态,以便正确地处理请求。维护这样的列表可能变得非常复杂,特别是在大规模系统中,节点的加入、离开和状态变化都需要被及时更新,确保所有进程都具备最新的信息。

  • 一个过载的进程可能成为整个系统的瓶颈: 在分布式系统中,如果某个进程的负载过重,处理请求的速度变慢,可能导致整个系统的性能下降。这种情况下,即使其他进程准备好并能够快速响应请求,但由于等待这个过载进程的响应,整个系统的吞吐量和响应时间都受到影响。

token ring 令牌环

进程被组成陈逻辑循环,并使用token确定什么时候进入关键区域

所有进程逻辑上组成一个环,首先每个进程知道其下一个进程是谁(通常更常用的应该是每个进程要维护一个记录,知道其后的所有其他进程,以便在其直接后继发生崩溃时,能把令牌传递给其后继,更有甚者传递给其后继的后继);

当环初始化时,进程0得到一个令牌(可以理解为一个互斥锁),该令牌沿着环进行传递,当进程获得到令牌后,会首先检查其是否有访问共享资源的需求,如果需要,则进行资源访问,访问完成后向后继传递令牌;如果不需要访问,则直接传递令牌给其后继。如图1所示。为了增强可靠性,我们要求当令牌传递给下一个进程时,要求其往回回复确认信息,如果没有返回确认信息,则认为此节点崩溃,此时将令牌传递给后继的后继。

  • 系统中的进程被组织成一个逻辑环(或链),一个特殊的令牌(token)在这个环上循环传递。只有持有令牌的进程才能够进入关键区域(critical section),执行临界区内的操作。

    算法的基本思想是,当一个进程需要进入关键区域时,它必须等待并抢夺到令牌。一旦进程获得了令牌,它可以进入关键区域执行操作。当进程退出关键区域时,它释放令牌,令牌继续在环上传递,供其他进程使用。

  • 优点:

    1. 互斥性: 确保在任意时刻只有一个进程可以进入关键区域,实现互斥访问。
    2. 公平性: 每个进程最终都能获得令牌,确保了公平性,每个进程有机会进入关键区域。
    3. 无死锁: 由于令牌在环上循环传递,不存在死锁的情况。

    缺点:

    1. 延迟: 当一个进程希望进入关键区域时,它必须等待令牌,这可能引入一定的延迟。
    2. 单点故障: 如果持有令牌的进程出现故障,整个系统的互斥性可能受到影响。

    要注意,令牌环算法是一种经典的分布式互斥算法,适用于许多不同的分布式系统场景。然而,具体的实现和优化可能因系统需求和架构而异。

  • image

image

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值