分布式系统互斥算法---集中式算法
来源:互联网 发布:怎么查看mac系统版本 编辑:程序博客网 时间:2024/06/05 00:48
分布式系统的基础是多进程之间的并发与协作,这就不可避免的涉及到多个进程对共享资源的互斥访问。
在单系统中,进程间对共享资源的互斥访问可以通过信号量、互斥锁来很容易的实现互斥;
在分布式系统中可能会稍微复杂一点,有些互斥算法的大体思想和单系统中的互斥锁比较类似(比如令牌);但是分布式系统中还有其他更多的互斥方法;
分布式互斥算法可以分为两种不同类型:
1)基于令牌的解决方法,互斥是通过进程之间传递一个特殊的消息来实现的,我们称之为令牌,只有获得该令牌的进程才准许访问共享资源,访问完成后令牌传递给下一个进程;如果一个进程获得到令牌后并不需要访问共享资源,那么它就简单的把令牌传递给下一个进程即可。
2)基于许可的解决办法,一个进程要访问共享资源,就需要首先获得其他进程的许可。
下边我们来学习一下集中式算法:顾名思义我们就可以想象到,系统中有一个协作者统一管理对共享资源的访问,只有获取到协作者的允许,才能去访问共享资源,访问完成后需要及时知会协作者。
如图1所示,在此系统中,3作为协作者,来统一管理对共享资源的访问。在某一时刻,进程1向协作者3发起对共享资源的访问请求,此时协作者检测到没有其他进程在访问共享资源,就给进程1回复OK,允许其访问。
图1
如图2所示,在进程1访问共享资源的同时,进程2也向协作者3发起了访问请求,那么此时协作者3由于没有收到1访问结束的释放消息,就会把进程2的请求放到请求队列里边;拒绝2访问的做法此时有两种:一是不给2返回任何消息,此时2这边一直没有收到协作者的回复默认为拒绝访问,那么进程2就挂起;二是给进程2明确返回拒绝访问的消息,那么进程2将会不断轮询是否满足访问条件。
图2
如图3所示,进程1在访问共享资源完成后,给协作者一个访问结束的释放消息,此时协作者会从队列里取出第一个进程并向其回复允许消息,此时该进程获取到权限去访问共享资源。
从其实现原理上我们可以看到,该算法还是比较公平的,因为准许请求的顺序和接收他们的顺序是一致的;另外也很简单,每次访问请求只要求3条消息传递即请求、准许、释放;
但是其不足之处也是显而易见的,当系统非常庞大时,协作者将成为瓶颈;
在整个系统中,协作者要与其他进程之间要保持一定频率的检测机制,以便快速处理协作者单点故障,如果某个进程首先检测到协作者发生了故障,那么立刻按照预先设置的领导者选举算法发起新的协作者选举流程,最终选出一个新的协作者继续管理系统共享资源的访问。
- 分布式系统互斥算法---集中式算法
- 分布式系统互斥算法---非集中式算法
- 分布式系统互斥算法---分布式算法
- 分布式系统互斥算法
- 分布式系统中的互斥算法
- 分布式系统互斥算法---令牌环算法
- 分布式跟集中式系统
- 集中式系统和分布式系统
- 分布式系统算法
- 分布式系统Paxos算法
- 分布式系统Paxos算法
- 分布式系统Paxos算法
- 分布式系统Paxos算法
- 集中式 vs. 分布式系统架构
- 算法:互斥集合
- 互斥:软件算法
- 分布式系统的Raft算法
- 分布式系统的Raft算法
- BaseAnimation是基于开源的APP,致力于收集各种动画效果(最新版本1.3)
- Hadoop生成HFile直接入库HBase心得
- struct sockaddr与struct sockaddr_in ,struct sockaddr_un的区别和联系
- 使用 PartialFunction 链来扩展actor
- PHP判断请求是否为HTTPS
- 分布式系统互斥算法---集中式算法
- 用控件实现自定义右键菜单
- ubuntu下使用星际译王Stardict
- 形态学操作
- ios 手写代码的controller与storyboard里的controller跳转
- HDOJ-3460Ancient Printer(Trie)
- Unity游戏开发的数学与物理 1 ( 物体延水平方向运动 )
- Java虚拟机运行机制原理
- 组合数取模