谈谈分布式系统Faults & Partial Failures
本来是想着把相关的分布式系统问题都整理罗列下,但发现整理的知识还是挺多的,于是想拆分几个版本分别说明, 同样参考《设计密集数据系统》谈到分布式系统的问题做一个总结与思考.今天先主要聊下故障Faults 以及部分失效Partial Failures之间的区别与联系.
单机系统模型
在聊Faults 以及 Partial Failures之前, 我们先来看一个基于Python执行的简单计算操作,如下所示:
通过上述的终端我们可以看到, 当我在单机机器上通过python客户端发起 2+3
计算的请求, 那么这个时候返回的响应结果如何呢?
- 要么是正常响应返回5.
- 要么是崩溃异常
同样地在计算机层面存在这样的一个设计模型:
计算机的系统模型: 如果发生内部故障,我们更希望计算机完全崩溃,而不是返回错误的结果,因为错误的结果处理起来既困难又令人困惑。因此,计算机隐藏了它们所基于的模糊的物理现实,呈现出一种理想化的系统模型,该模型以完美的数学方式运行。一条CPU指令总是执行相同的操作;如果你将某些数据写入内存或磁盘,这些数据会保持完整,不会被随机损坏.
依照上述的模型简述, 我简单画了一个简易的单机系统运行软件的系统模型如下:
可见按照上述计算机的系统模型, 软件在我们单台计算机上运行方式一般是具备可预测性的, 要么正常运行, 要么崩溃不能运行而不是处于中间状态.
分布式系统模型
同样地我也举一个分布式系统例子来说明, 我登录Redis的6379节点上执行操作命令set k1 2+3
的计算请求,如下:
这个时候我们发现6379节点会将key = 'k1' 进行路由转发到6381节点进行处理执行, 由此我们也可以建立一个如下的分布式系统模型:
那么这个时候, 相比上述的单机系统, 我们的分布式系统引入了更多的服务节点以及网络因素, 此时返回的响应结果又会有哪些呢?
- 6379节点网线被拔, 请求直接丢失.
- 6379节点发送到网络上, 但是网络由于发生阻塞陷入队列排队等候
- 6381节点发生宕机或者是短暂的不可用停止响应无法处理请求
- 6381节点已经处理响应但是响应在发送到6379节点的过程丢失
- 6381节点已经处理并响应但由于网络过载导致排队响应延迟.
可见在分布式系统中, 由于多台机器是通过网络通信之间进行交互且分布在彼此之间的存储数据不共享的情况下, 由于网络故障的不确定, 比如网卡被拔、路由器配置重启甚至是电缆被挖断等实际不可预测因素导致分布式系统中部分组件或者服务无法正常工作, 即部分失效, Partial Failures.
关于Faults & Partial Failures
通过上述的分析, 引出两个概念, 一个是故障Faults, 另一个是Partial Failures. 可以看到在单机系统只有Faults, 而我们可以通过修复的方式来解决问题; 然而在分布式系统中不仅存在Faults, 还会因为故障Faults导致Partial Failures,可见Faults是根因, Failures是结果, 对此我也将两者总结如下:
Fault Tolerance
讲到这里, 我想我们对于计算机系统模型以及分布式系统模型有了一个新的认知, 计算机系统模型对响应结果具备可预测性, 即要么正常运行, 要么崩溃异常;
那么对于分布式系统而言, 如果出现故障, 整个分布式系统并不会整体崩溃, 但是会对外表现为部分组件不可用,那能否因为部分组件或者服务不可用直接让整个分布式系统崩溃?
显然不能,我们对比下云计算服务与超级计算服务:
- 对于超级计算服务: 拥有数千个CPU的超级计算机用于计算密集型的计算任务,并且在计算过程中一项任务会经常将其状态以checkpoint的方式进行持久化, 那么当其中一个节点发生故障的时候,一个常见的解决方案就是停止整个工作负载并在故障节点修复后重跑任务.因此HPC可以抽象为一个计算机系统模型.
- 对于云计算构建的分布式系统: 这个分布式系统是一个对外提供数据信息流的服务列表, 如果其中一台节点挂了, 对用户感知就是时而正常, 时而不可用, 产生不可用的原因是请求落到了故障节点上, 因此我们可以想办法将故障节点进行摘流甚至是用新的节点代替故障节点.而这样的策略我们称之为应对部分组件或者服务不可用的Fault Tolerance, 即容错机制.
由此可见分布式系统是由一系列存在不可靠的组件或者服务通过互联网的方式进行通信, 并在组件或服务之间构建容错机制形成一个具备高可用的系统. 总结起来就是一句话, 如果我们想要构建一个分布式系统, 就必须要接受部分组件或者服务失效(Parital Failures)的可能性, 并在组件或服务之间构建容错(Fault Tolerance)机制来保障整体系统的可用性.
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。原始发表:2025-04-13,如有侵权请联系 cloudcommunity@tencent 删除模型amppartial分布式系统服务
发布评论