分布式系统互斥算法---分布式算法

该算法的工作过程如下:当一个进程要访问共享资源时,它会构造一个消息,其中包含要访问的资源的名字、其进程号、当前时间戳;然后它将该消息发送给系统中的所有其他进程;当一个进程接收到来自另一个进程的请求消息时,它根据自己与消息中的资源相关的状态来决定它要采取的动作:

1)如果接收者没有访问资源,而且也没有访问的打算,就会给发送者一个OK消息;

2)如果接收者已获得对资源的访问,那么他就不进行应答(或者回复拒绝消息),并把该请求放到队列中;

3)如果接收者想访问资源,但是还没开始访问呢,这个时候它就会把自己的请求的时间戳与接收到消息的时间戳做对比,时间戳小者胜出。

发送请求许可消息发出后,进程就会进入等待状态,直到所有进程回复OK;一旦满足条件后就进入访问操作,访问结束后,会把释放消息发送给其维护的等待队列中的所有要访问的进程;同时把他们从队列中删除。

如图1,进程0和2同时发出访问请求,进程0的请求时间是8,进程2的请求时间是12。

进程1在接收到请求后,由于其不会访问资源,所有给所有请求都回复OK,同时进程0和进程2则进入判定环节,进程2判定进程0的请求时间戳为8小于12,就给0回复OK;进程0判定时间戳12小于自己的请求时间戳,就把进程2的请求放入队列;此时,进程0接收到了所有进程返回的OK,则进入到访问资源环节,如图2;

当进程0访问结束后,它将2的请求从其队列中删除,同时给2发送OK消息,进程2此时获取到了所有进程返回OK,进入到访问资源环节,如图3.

每个请求需要2(n-1)个消息的发送量。

时间: 2024-11-03 22:19:33

分布式系统互斥算法---分布式算法的相关文章

分布式系统互斥算法---集中式算法

分布式系统的基础是多进程之间的并发与协作,这就不可避免的涉及到多个进程对共享资源的互斥访问. 在单系统中,进程间对共享资源的互斥访问可以通过信号量.互斥锁来很容易的实现互斥: 在分布式系统中可能会稍微复杂一点,有些互斥算法的大体思想和单系统中的互斥锁比较类似(比如令牌):但是分布式系统中还有其他更多的互斥方法: 分布式互斥算法可以分为两种不同类型: 1)基于令牌的解决方法,互斥是通过进程之间传递一个特殊的消息来实现的,我们称之为令牌,只有获得该令牌的进程才准许访问共享资源,访问完成后令牌传递给下

分布式系统互斥算法---令牌环算法

在一个分布式系统中,把所有进程逻辑上组成一个环,首先每个进程知道其下一个进程是谁(通常更常用的应该是每个进程要维护一个记录,知道其后的所有其他进程,以便在其直接后继发生崩溃时,能把令牌传递给其后继,更有甚者传递给其后继的后继): 当环初始化时,进程0得到一个令牌(可以理解为一个互斥锁),该令牌沿着环进行传递,当进程获得到令牌后,会首先检查其是否有访问共享资源的需求,如果需要,则进行资源访问,访问完成后向后继传递令牌:如果不需要访问,则直接传递令牌给其后继.如图1所示.为了增强可靠性,我们要求当令

分布式系统互斥算法---非集中式算法

集中式算法存在单点失效问题,那么我们接着来看一下非集中式算法. 假设共享资源副本被复制了n次,每个副本有其自身协作者控制访问:如果某个进程要访问共享资源,主要获得m>n/2个协作者投票允许即可. 如图1所示,如果进程0要发起访问请求,只要8个协作者中有5个(包括其自身)投票允许即可. 图1 但是该算法也有自身的缺陷,即当某个协作者崩溃时,它将忘记之前投过的票,可能在回复后又投了重复的票给其他请求者:比如已经允许了p进程访问共享资源,之后该协作者重置了,又允许了q进程去访问共享资源,此时可能会出现

基于请求的分布式互斥算法

一个悲剧的文章,研究的东西确实比较老,但是因为这些研究,让我对分布式的底层的关系有了更加清晰的认识,也算是不枉此功. 下面贴出来核心的部分. 引言 分布式系统中的一组进程可能会同时访问一个资源或者同时执行一个给定的函数,我们称这些资源或者函数为临界区(Critical Section),若不加控制的话,会造成资源或者环境的不一致的现象.保证任何给定时刻只允许一个进程或者给定的进程去执行临界区的算法称为互斥算法.互斥也可以称为并发控制. 这个问题最早由Dijkstra[1]在1965年提出.互斥可

分布式系统互斥性与幂等性问题的分析与解决

前言 随着互联网信息技术的飞速发展,数据量不断增大,业务逻辑也日趋复杂,对系统的高并发访问.海量数据处理的场景也越来越多.如何用较低成本实现系统的高可用.易伸缩.可扩展等目标就显得越发重要.为了解决这一系列问题,系统架构也在不断演进.传统的集中式系统已经逐渐无法满足要求,分布式系统被使用在更多的场景中. 分布式系统由独立的服务器通过网络松散耦合组成.在这个系统中每个服务器都是一台独立的主机,服务器之间通过内部网络连接.分布式系统有以下几个特点: 可扩展性:可通过横向水平扩展提高系统的性能和吞吐量

一致性Hash算法(分布式算法)

一致性哈希算法是分布式系统中常用的算法,为什么要用这个算法? 比如:一个分布式存储系统,要将数据存储到具体的节点(服务器)上, 在服务器数量不发生改变的情况下,如果采用普通的hash再对服务器总数量取模的方法(如key%服务器总数量),如果期间有服务器宕机了或者需要增加服务器,问题就出来了. 同一个key经过hash之后,再与服务器总数量取模的结果跟之前的结果会不一样,这就导致了之前保存数据的丢失.因此,引入了一致性Hash(Consistent Hashing)分布算法 把数据用hash函数(

分布式系统选举算法剖析

1.概述 我们在了解分布式选举算法之前,我们需要这样一种算法产生的背景.在一个分布式系统中,因为各种意外的因素,有的服务器可能会崩溃或变得不可靠,它就不能和其他服务器达成一致状态.因而这样就需要一种Consensus协议,来确保服务器的容错性,也就是说即使系统中有一两个服务器节点Crash,也不会影响其处理过程.为了让容错方式达成一致,我们不可能要求所有的服务器节点100%都达成Consensus状态,只要超过半数的大多数服务器节点Consensus即可,假设有N台服务器节点,(N/2)+1 就

分布式系统一致性算法 raft学习

在学习MongoDB的过程中,有博客中写道其搭建复制集时使用了raft算法,经过简单地的搜索资料后,发现了一个特别好的网站资料.这个网站用动画的形式,非常清楚和详尽的解释了整个raft算法的精要和过程,只看了一篇就大概地了解了整个算法,确实设计的非常好,后来被算法的精妙和动画的简洁所吸引,又看了一遍.仔细想来,该算法就是人类社会的普选机制啊. 关于raft算法的一切,网站资料介绍的已经非常详尽了,我就不多介绍了.网址是:http://thesecretlivesofdata.com/raft/

分布式系统一致性研究

感谢eric的敦促,感谢shuai的感召,我尝试记录一点混乱的思考. 什么是分布式系统? 毋庸置疑,Internet和DNS是两个典型的成功的分布式系统.那么,分布式系统是不是就是计算机网络?1990年,Sun Microsystems公司提出网络即是计算机(The network is the computer.),后来google提出数据中心即是计算机,现在有人提出云即是计算机.这些都试图从抽象的概念上总结分布式系统呈现的一致视图.<分布式系统:原理与范型>一书中对分布式系统的定义就是从用