分布式系统 死锁检测
在本文中,您将了解分布式系统中的死锁检测及其方法、处理策略、问题和解决方案。
什么是分布式死锁
当分布式系统中使用分布式事务或并发控制时,可能会发生分布式死锁。它可以通过分布式技术(如边缘追踪)或通过从死锁检测器的本地等待图(WFG)创建全局等待图来进行识别。虚拟死锁在分布式系统中被识别但由于内部系统延迟而不存在。
在分布式系统中,无法防止或避免死锁,因为系统规模太大。因此,只能进行死锁检测。分布式系统死锁检测技术需要以下内容:
1. 进展
该方法可以检测系统中的所有死锁。
2. 安全
该方法必须能够检测到所有系统死锁。
检测分布式系统中死锁的方法
检测分布式系统中死锁的各种方法如下:
1. 集中式方法
集中式方法只有一个资源负责检测死锁,它简单易用。但缺点包括单个节点的过载和单点故障(即整个系统依赖于一个节点,如果该节点发生故障,整个系统会崩溃),使系统不太可靠。
2. 分层方法
分层方法是集中式和分布式方法在分布式系统中的整合。在这种策略中,一个节点处理一组选定的节点或负责死锁检测的节点群集。
3. 分布式方法
在分布式技术中,多个节点一起工作来检测死锁。由于工作负载在所有节点之间平均分配,因此不存在单点故障。它还有助于提高死锁检测的速度。
处理死锁的策略
分布式系统中处理死锁的各种策略如下:
- 处理死锁主要有三种方法:死锁预防、死锁避免和死锁检测。
- 在分布式系统中,处理死锁变得更加复杂,因为没有任何站点对系统的当前状态具有完全的了解,并且每个站点之间的通信都涉及有限且不可预测的延迟。
- 操作系统使用死锁避免方法来确定系统是否处于安全或不安全状态。进程必须向操作系统报告最大资源数,进程可以请求完成其执行。
- 通常通过在开始执行之前实现一个同时获取所有必要资源的进程,或者通过抢占已经拥有资源的进程来实现死锁预防。
- 在分布式系统中,这种方法效率低下且不实际。
- 存在循环等待时,需要检查进程资源交互的状态来检测死锁。
- 在分布式系统中处理死锁的最佳方式似乎是死锁检测。
死锁检测的问题
分布式系统中死锁检测的各种问题如下:
- 基于死锁检测的死锁处理需要解决两个基本问题:首先,检测现有的死锁;其次,解决检测到的死锁。
- 检测死锁涉及解决两个问题:维护等待图(WFG)和搜索WFG以确定是否存在环路。
- 在分布式系统中,一个循环可能包含多个站点。对环路的搜索高度依赖于通过整个系统表示的WFG。
解决死锁检测
在分布式系统中,死锁检测的各种方法如下:
- 死锁解决包括在系统的WFG中打破现有的等待依赖。
- 它包括解除多个死锁进程并将它们的资源分配给死锁的阻塞进程,以便它们可以继续执行。
分布式系统中的死锁检测算法
在分布式系统中的死锁检测算法如下:
- 路径推送算法
- 边缘追踪算法
- 扩散计算算法
- 基于全局状态检测的算法
路径推送算法
路径推送算法通过保持显式全局WFG来检测分布式死锁。主要的概念是为每个分布式系统站点创建一个全局WFG。当这个类的算法中的一个站点执行死锁计算时,它将其本地WFG发送给所有相邻站点。路径推送算法这个术语是为了突出全局WFG路径的发送。
边缘追踪算法
边缘追踪方法通过沿着图的边缘发送特殊的消息(称为探测)来验证分布式图结构中的循环。这些探测消息与请求和响应消息不同。如果一个站点接收到与其之前发送的匹配探测消息,则可以取消循环的形成。
扩散计算算法
在这个算法中,死锁检测计算通过系统的WFG进行扩散。这些技术使用回声算法来检测死锁,并且基于这个计算叠加了底层的分布式计算。如果这个计算失败,发起者将报告死锁全局状态检测。
基于全局状态检测的算法
基于全局状态检测的死锁检测算法利用以下事实:
- 可以在不冻结底层计算的情况下获取分布式系统的一致快照。
- 如果在快照收集开始之前系统中存在稳定属性,它将被保留。