分布式系统之10容错性
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分等级的可靠多播
主要问题: 树的建立,很多情况下树是动态建立的
当把进程失败的情况考虑进来,就需要用原 子多播。
在分布式系统中对进程组多播时,经常需要 保证消息要么发送给所有进程,要么就不向 任何进程发送。有时还需要按相同的顺序发 送给所有进程。这种方式多播就是原子多播。
客户端不能定位服务器 由应用程序抛出异常来处理
请求消息丢失 超时重发机制
两种情况,但对客户来说,都是超时 执行之后崩溃 执行之前崩溃 三种处理方式 在服务器重启之前等待并再次尝试操作 立即放弃并报告失败 什么都不保证
也是依靠客户端的超时重发机制处理 问题:转帐
另一种方法: 为每个客户请求配一个序列号,这样服务器 就能分辨客户的新请求与重发的请求,当服 务器收到重发的请求时,不执行重复操作
基本概念 故障 使用冗余掩盖故障
容错即意味着系统能在故障发生的情况下继续提供服务。 几个相关概念
可用性:系统可以工作,即可被使用 可靠性:指系统可以无故障地持续运行 安全性:系统在偶然出现故障的情况下可以正确操作而 不会造成任何灾难。 可维护性:系统发生故障后,恢复的难易程度
可以分为暂时的、间歇的和持久的。
最大问题:孤儿进程的产生 RPC调用中,客户进程与它调用的服务器计算之
间是父子关系,当客户崩溃后,驻留在服务器中 继续运行的计算变得毫无意义,而且没有进程等 待它、需要它。这个计算就变成了孤儿 (Orphan)。
孤儿会引起许多问题: 首先,它的计算毫无意义,因为已经没人需要 它的结果 孤儿浪费系统资源,包括计算、存储和其他资 源 当客户恢复并重发请求时,孤儿返回的结果则 会引起混淆
平等组和简单等级组
平等组 没有单独故障点 决策效率低
等级组 有单个故障点 决策效率高。
基本问题 加入与离开组 成员故障处理
使用组管理服务器(集中式 方法) 所有进程要加入或者离开 组都向它申请
优点:直接,高效,易于 实现
分布式方法 进程加入和离开组需要给所有 成员发请求,共同作出决定 当成员发生故障崩溃时,需要 通过一些协议来重建组
简单的可靠多播
简单方法致命问题 当接受者数量庞大时,大量的反馈消息将淹没发送者, 引起反馈拥塞。
解决方法一:只在消息丢失Байду номын сангаас反馈 问题:发送者只好永远在历史缓存器中保留消息,因为 不知道消息是否送达。而且即使否定反馈依然可能拥塞。
方法二:无等级反馈控制 接受者不发送成功确认 当丢失消息时向组中其他成员多播其否定反馈 而其他成员如果也丢失了消息,则在收到这个 丢失反馈后不再向发送者发送丢失反馈 保证了只有一个重发请求送往发送者。
可以进一步分为以下类型:
故障类型
崩溃性故障
遗漏性故障
接收遗漏 发送遗漏
定时故障
响应故障
值故障 状态转换故障
随意性故障
说明
服务器停机,但停机之前工作正常
服务器不能响应来到的请求 服务器不能接收消息 服务器不能发送消息 服务器未能按时响应
服务器响应不正确 响应值不正确 服务器偏离了正确的控制流
服务器可能在随意的时间产生随意的响应
分布式系统容错的目的 对其他进程或客户隐藏故障(故障透明性)
容错手段:使用冗余掩盖故障 三种冗余方法:
信息冗余:添加额外的位以使错误的位恢复。 时间冗余:多次重复一个操作,适合临时性或间歇性故 障。 物理冗余:物理上添加备份
进程组 平等组和等级组 组成员的管理
进程组
把多个相同的进程组织到一个逻辑的组中 当组中某个成员进程遭遇故障而不能工作时,组中 其他成员可以接管它
缺点:单一失败点
分布式系统通信的可靠性设计的重点在于掩盖 崩溃性故障 遗漏性故障 随意性故障—通过重复消息的形式排除。
对于点到点通信,如TCP通信,崩溃性故障只能 由分布式系统重新建立连接。
在RPC调用中,有5种失败形式: 客户不能定位服务器 客户到服务器的请求消息丢失 服务器在收到请求之后崩溃 从服务器到客户的响应消息丢失 客户在发送请求之后崩溃
第一种方法是消灭 在RPC调用之前写日志 客户在崩溃中恢复后根据日志杀死孤儿
缺点: 代价高,每个RPC都需要写日志 孤儿本身有可能进行RPC调用而产生后代,杀死孤儿后, 其后代成为更难跟踪处理的孤儿。
第二种方法是再生 对时间分段并编号 当客户重启时,向所有机器广播声明一个新时期开始 其他机器收到该消息后,杀死所有与这个客户有关的远 程计算 但对于广播不能到达的地方,孤儿还有可能存活
最后一种方法是到期 每个RPC都被给定一个期限T来工作 到期后如不能结束就需要申请宽期 否则被认为抛弃子女,与其相关的远程计算将 被当作孤儿杀死
多播:发送到进程组的消息被传送到组中所有成员。 多播面临的问题:
通信期间,有进程加入组 通信期间组中有成员崩溃 最简单解决方法:对进程组每个成员建立点到点的连接 一种简单有效的方法如下页图示。
目的
允许把进程的集合作为逻辑上单一的对象来处理, 增加系统的容错性
进程组特性 组本身可以是动态的 组成员可以是动态的 一个进程可以从属于多个组
类型:平等组和等级组
平等组 对应分布式概念 所有成员地位都是 相同的 所有决定都是共同 作出的
等级组 对应集中式概念 一般有一个协调者进 程,其他则是工作者 组内关系和动作由协 调者做决定
无等级反馈抑止
无等级反馈的实际应用中还是有困难: 首先要确保只有一个重发请求发送到发送者, 需要所有接受者对反馈进行准确的调度,这在散 布在广域网中的进程组是难事。 其次多播反馈有可能中断其他成功接收消息的 进程。
方法三:分等级反馈控制 接收进程组的成员数量非常大 接受组被划分为许多子组,这些子组组织成树的形式, 包含发送者的子组构成了树的根 在每个子组内,可以选用任意一种可靠多播方案 每个子组都指定一个本地协调者,负责处理子组的接收, 以及本地的重发 本地协调者具有自己的历史缓存