分布式系列:分布式系统中的互斥算法

“ 在单机中,多线程环境下为了解决竞争某共享资源的时候,一般采用加锁方式来解决互斥问题。而在分布式系统中,有哪些算法呢?”

我们一起看看有哪些类型的分布式互斥算法。

1、集中式算法

在集中式算法中,一般需要一个协调者。每个程序在访问临界资源的时候,需要先给协调者发送一个请求。如果当前临界资源没有使用者,则授权该程序使用该资源。如果有程序使用该资源,则给后来请求该资源的请求加入等待队列。如果资源被释放,则立即通知等待队列里面的其他程序使用。

这种算法叫做集中式算法,因为依赖于中央服务器。从上面过程可以看出,一个程序完成一次临界资源的访问,需要给协调者发送一次请求,然后协调者向请求者发放授权,使用完资源后,向协调者释放资源的请求。此过程一共需要三次交互。

从上面可以看成,集中式算法简单,易于实现,但是中心服务器需要处理的消息随着应用程序的增多而线性增长。此外,单一的中心服务器也容易引发单点故障。

比如,使用Redis实现分布式锁,就类似于该算法。每个Redis客户端都会先去查询以下某个key,如果存在就认为有其他进程在使用某资源。如果访问完该资源,该客户端会删除key。

2、协商算法

协商算法,一般每个程序都有自己的一个id。该算法的每一个使用资源的程序都需要向其他所有的程序发送请求,一般采用组播方式。若其他n-1个程序不使用该资源,则发送同意消息允许这个程序使用资源。如果某个程序也需要使用资源,则去自己缓存队列里面查看是否有其他程序请求,如果有就允许其他人先使用,正所谓先来先用。

从上面流程

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值