分布式理论之分布式互斥

news2024/11/20 12:45:01

写在前面

本文一起看下分布式理论中的分布式互斥(distributed mutual[ˈmjutʃuəl] exclusion)问题,以及解决该问题相关算法。

1:什么是分布式互斥

我们先看下什么是临界资源(critical resource),临界资源是同时只能被一个程序访问的共享资源,而分布式互斥就是多个服务以排它的访问方式来访问临界资源,或者是多个服务对临界资源的互斥访问方式。本文我们要分析的算法就是用来解决分布式互斥问题的。主要有以下3中:

1:集中式算法
2:分布式算法
3:令牌环算法

接下来分别看下。

2:分布式互斥算法

2.1:集中式算法

集中式算法的核心思想是,引入一个协调者的角色,所有需要访问临界资源的服务都需要通过该协调者获取访问资格,当有多个服务申请访问同一个临界资源时,协调者根据时间的先后来决定给哪个服务发放临界资源访问资格,其他的服务在队列中等待已获取临界资源访问资格的服务释放访问资格后再来访问,这个过程可能如下图:

在这里插入图片描述

此时程序3释放访问资格,协调者将访问资格发放给等待队列中中的程序4,同理,如果是程序4释放访问资格的话,协调者又会将访问资格发放给程序2。可以看到每个服务从申请临界资源访问授权到释放临界资源访问授权,经历了如下的3次交互:

1:服务向协调者发送临界资源申请请求
2:协调者给服务发放临界资源访问授权
3:服务将临界资源访问授权归还协调者

接下来我们看下集中式算法的优点和不足。

  • 优点
    协调者实现简单,服务申请资源访问需要的交互次数少。
  • 缺点
    服务的性能严重依赖协调者,当协调者压力大或出现问题时,服务相关接口或功能将不可用。当同时申请临界资源的服务器较多时,协调者将会承受比较大的请求压力,如有100个服务,同时会有100*3=300个请求到达协调者。

从以上可以看出该算法对协调者的要求较高,如果是协调者具备高可用,高性能特点的话,该算法是大有用武之地的,比如协调者的具体实现redis cluster 。

2.2:分布式算法

分布式算法的过程是,如果某服务想要获取一个临界资源访问权限的话则需要向其它所有其他服务发出申请,只有当所有的其他服务都同意之后才能获取临界资源访问权限,某服务在收到其他服务的访问请求后,如果是自己不需要或并未正在使用临界资源的访问权限,则返回同意,否则记录要申请的临界资源,申请资源服务ID,申请的时间等信息到自己的临界资源申请请求队列中,待自己释放临界资源的访问权限后,取出第一个服务申请,返回同意,如下程序1、2、3需要访问共享资源A。在时间戳为8的时刻,程序1想要使用资源A,于是向程序2和3发起使用资源A的申请,希望得到它们的同意。在时间戳为12的时刻,程序3想要使用资源A,于是向程序1和2发起访问资源A的请求:

在这里插入图片描述

因为程序1在时间戳8已经获取了临界资源A的访问权限,所以会将将程序3在时间戳12申请访问临界资源A的请求放到请求队列中,在自己使用完毕后,再返回给程序3同意的消息,如下图:

在这里插入图片描述

可以看到一个服务想要获取某临界资源访问权限的话需要经过如下交互:

1:向n-1个其他服务器发送申请
2:接收其他n-1个服务的同意响应

每次都需要2*(n-1)次交互才能获取某临界资源的访问权限,当n较大,即集群规模比较大时,这个沟通成本还是比较高的,接下来我们看下这种算法的优点和缺点是什么。

  • 优点
    实现简单,每个服务都能够按照时间顺序公平的访问临界资源。
  • 缺点
    当集群规模大,申请临界资源的服务较多时,容易产生信令风暴,即服务无法正常处理收到的请求,假设集群规模是100,同时有50个服务都要访问临界资源,则每个服务在向外发出99个临界资源申请请求的同时,并接受99个服务的响应,还要接收来自其他49个服务的临界资源请求。则总共是(99+99+49)*50,另外当某服务响应同意延迟时,会造成整个集群的阻塞,因此该算法可用性低。

经过以上分析,该算法适用于小规模集群,比如只有几个节点,如hadoop中的分布式文件系统HDFS就使用了该算法,比如有计算机1,计算机2,计算机3,假设计算机1要修改某临界资源文件,则需要向计算机2,计算机3发送请求,二者向其返回同意,然后计算机1开始修改,修改后再将修改的文件同步给计算机2和计算机3,这个过程如下图:

在这里插入图片描述

总结就是,该算法适用于临界资源使用频率低,并且集群规模小的场景中。

3.3:令牌环算法

令牌环算的过程是,所有的服务组成一个逻辑上的环状结构,然后令牌按照顺时针或者逆时针(方向无所谓)的方向在服务中挨个流转,如果是当前服务需要访问临界资源则使用该令牌开始访问临界资源,如果是不需要则流转到下一个服务节点,这个过程如下图:

在这里插入图片描述

这种算法要求每个节点都记录所有其他节点的信息,从而能够形成一个逻辑上的环状结构,并且因为是挨个传递,所以中间会存在大量的无效传递,即无效网络通信,是不必要的消耗,比如从服务节点1开始传递,而服务节点99需要令牌,则服务节点99就需要等待98次传递才能获取临界资源的访问权限,因为经过了97次无效传递的同时,所以需要等待较长的时间,会降低集群的整体性能。因此这种算法适用于每个服务节点访问临界资源的频率都很高(减少无效传递),并且使用令牌的时间都很短(减少每个服务节点获取令牌的时延)的场景。

写在后面

参考文章列表:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/112135.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何提高苹果商店ASA广告的展示份额

众所周知,APP获得曝光后,才会有用户的点击率和下载,接下来柚鸥ASO会告诉大家,如何在保障ROI(是指投入成本跟获得的收益的比值)的情况下,为ASA获得最大的展示份额。 CPM是指通过商家付费&#x…

【nowcoder】笔试强训Day2

目录 一、选择题 二、编程题 2.1排序子序列 2.2倒置字符串 一、选择题 1.A 派生出子类 B , B 派生出子类 C ,并且在 java 源代码有如下声明: 1. A a0new A(); 2. A a1new B(); 3. A a2new C(); 问以下哪个说法是正确的(&…

19. 【gRPC系列学习】拦截器Interceptor

无论客户端还是服务端在远程调用前后执行一些通用逻辑,例如Gin框架,实现日志、监控、认证、Recover等通用逻辑,gRPC也提供这样的机制。 拦截器分为:一元拦截器、流拦截器,这两种拦截器在客户端、服务端都可以使用。拦截器的执行流程如图:其中InHandlerx与outHandlerx是同…

1 月 25 日见|Flutter Forward 活动日程表正式发布!

2023 年 1 月 25 日 (正月初四),我们将在肯尼亚首都内罗毕举办 Flutter Forward 大会,并同时开启线上直播。本次活动将为展示最新的 Flutter 技术更新,包括一个主题演讲以及多个技术演讲和线上问答,全方位展示 Flutter 如何推动 U…

B+树 [数据结构与算法][Java]

B树 B树是B树的一种变形 我们通过一颗四阶B树来理解认识一下B树:(如下:) 我们其实从图上就可以看出B树和B树是有很多不同之处的 比如我们的B树中将叶子结点层的所有结点使用一个链表串联了起来B树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查…

离散数学数理逻辑部分

前言 本文创作的起因是,经历了离散数学的学习,深感学习离散之艰辛。所以产生了写一些内容帮助大家期末复习。虽然在csdn发表本文,有些不太合适,但是还是相信本文的质量和内容,可以给正在学习离散数学的大学生提供一些…

vscode使用shift+alt+f格式化html文件时不生效

关于vscode配置相关文章(方便作者之后复习): VScode如何在敲代码时自动导入包怎么在VScode中写代码模板【以创建express模板为例】如何根据项目的eslint去配置vscode的setting 1-1 下载Beautify插件 该插件已停止维护,输入下载其他插件 1-2 在…

【Linux】进程概念(上)

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉冯诺依曼体…

1754. 构造字典序最大的合并字符串

摘要 1754. 构造字典序最大的合并字符串 一 贪心算法分析 题目要求合并两个字符串 word1 与 word2,且要求合并后的字符串字典序最大。首先需要观察一下合并的选择规律,假设当前需要从 word1​ 的第 i 个字符和 word2​ 的第 j个字符选择一个字符加入到…

24. 【gRPC系列学习】gRPC安全认证-TLS认证

TLS认证是gRPC比较常见的方式,利用PKI体系,生成客户端证书、服务端证书、以及CA证书,在交互期间进行身份验证,经秘钥协商后,以对称秘钥进行加密通信,保证数据隐私。Basic、Jwt都是要自实现,TLS是官方支持,操作简单。 1. TLS原理 双向认证简单来讲:服务端验证客户端证书…

前端小知识:返回浏览器上一页(back、go、referrer)

官方文档(document.referrer): https://developer.mozilla.org/zh-CN/docs/Web/API/Document/referrer   官方文档(history.back) https://developer.mozilla.org/zh-CN/docs/Web/API/History/back   官方文档&#…

DaVinci:曲线之 HSL 曲线

调色页面:曲线Color:CurvesH 指的是色相 Hue,S 指的是饱和度 Saturation,L 指的是亮度 Luminance。DaVinci Resolve 的曲线调板中,除了自定义曲线,还提供了六种基于色相、饱和度或亮度的调节曲线&#xff0…

Akka 进阶(二)Mailbox 邮箱

目录一 默认邮箱配置二 内置邮箱三 自定义邮箱四 配置邮箱五 RequiresMessageQueue接口Actor中的邮箱是一个队列结构,所有发送过来的消息都会在该队列进行排队,在默认情况下,它遵循先进先出(FIFO)的模式,假…

如何将ppt图片压缩?统一压缩ppt图片的简单方法

日常生活中经常需要用到ppt,一份PPT少则十几页多则上百页,就很容易造成PPT过大不易传送的情况,其实我们可以先把ppt图片压缩(图片压缩到指定大小 图片压缩大小至指定kb以下-压缩图)之后再制作成ppt文件,那么…

【推荐收藏】这份图解算法数据结构的材料太良心

5年前发生的一件事,成为了我职业生涯的重要转折点。当时的我在交大读研,对互联网求职一无所知,但仍然硬着头皮申请了 Microsoft 实习生。面试官让我在白板上写出“快速排序”代码,我畏畏缩缩地写了一个“冒泡排序”,并…

Unity 3D Inspector 视图 || Unity 3D Scene View 视图 || Unity 3D Game View 视图

Unity 3D Inspector 视图 Unity 3D 的 Inspector 视图用于显示当前选定的游戏对象的所有附加组件(脚本属于组件)及其属性的相关详细信息。 视图布局 以摄像机为例,在 Unity 3D 的 Inspector 视图中显示了当前游戏场景中的 MainCamera 对象所…

腾讯云轻量应用服务器使用 Cloudreve 应用镜像搭建个人私有云盘!

Cloudreve 是一款开源的网盘软件,支持服务器本机及腾讯云对象存储 COS 等多种存储方式,提供离线下载、拖拽上传、在线预览等功能,能够帮助您快速搭建个人使用或多人共享的云盘系统。该镜像基于 CentOS 8.2 64位操作系统,已集成宝塔…

OpenAI | GPT-3新模型Davinci,将AI写作提升到新水平!网友惊呼:GPT-4要来了?

文 | 王思若20年,OpenAI推出了1750亿参数量的屠榜‘杀器’GPT-3,但基于大模型至今悬而未决的伦理和社会风险以及商业盈利等因素的考量,OpenAI将GPT-3以付费API的形式向公众开放。通过调用GPT-3的API,问答、语义检索、翻译、数学推…

消息队列RabbitMQ学习笔记(四)死信队列和延迟队列

1. 死信的概念 先从概念解释上搞清楚这个定义,死信,顾名思义就是无法被消费的消息,字面意思可以这样理 解,一般来说,producer 将消息投递到 broker 或者直接到queue 里了,consumer 从 queue 取出消息 进行…

【Linux】调试器gdb的使用

​🌠 作者:阿亮joy. 🎆专栏:《学会Linux》 🎇 座右铭:每个优秀的人都有一段沉默的时光,那段时光是付出了很多努力却得不到结果的日子,我们把它叫做扎根 目录👉什么是gdb…