本来是想着把相关的分布式系统问题都整理罗列下,但发现整理的知识还是挺多的,于是想拆分几个版本分别说明, 同样参考《设计密集数据系统》谈到分布式系统的问题做一个总结与思考.今天先主要聊下故障Faults 以及部分失效Partial Failures之间的区别与联系.
单机系统模型
在聊Faults 以及 Partial Failures之前, 我们先来看一个基于Python执行的简单计算操作,如下所示:
通过上述的终端我们可以看到, 当我在单机机器上通过python客户端发起 2+3
计算的请求, 那么这个时候返回的响应结果如何呢?
同样地在计算机层面存在这样的一个设计模型:
计算机的系统模型: 如果发生内部故障,我们更希望计算机完全崩溃,而不是返回错误的结果,因为错误的结果处理起来既困难又令人困惑。因此,计算机隐藏了它们所基于的模糊的物理现实,呈现出一种理想化的系统模型,该模型以完美的数学方式运行。一条CPU指令总是执行相同的操作;如果你将某些数据写入内存或磁盘,这些数据会保持完整,不会被随机损坏.
依照上述的模型简述, 我简单画了一个简易的单机系统运行软件的系统模型如下:
可见按照上述计算机的系统模型, 软件在我们单台计算机上运行方式一般是具备可预测性的, 要么正常运行, 要么崩溃不能运行而不是处于中间状态.
分布式系统模型
同样地我也举一个分布式系统例子来说明, 我登录Redis的6379节点上执行操作命令set k1 2+3
的计算请求,如下:
这个时候我们发现6379节点会将key = 'k1' 进行路由转发到6381节点进行处理执行, 由此我们也可以建立一个如下的分布式系统模型:
那么这个时候, 相比上述的单机系统, 我们的分布式系统引入了更多的服务节点以及网络因素, 此时返回的响应结果又会有哪些呢?
可见在分布式系统中, 由于多台机器是通过网络通信之间进行交互且分布在彼此之间的存储数据不共享的情况下, 由于网络故障的不确定, 比如网卡被拔、路由器配置重启甚至是电缆被挖断等实际不可预测因素导致分布式系统中部分组件或者服务无法正常工作, 即部分失效, Partial Failures.
关于Faults & Partial Failures
通过上述的分析, 引出两个概念, 一个是故障Faults, 另一个是Partial Failures. 可以看到在单机系统只有Faults, 而我们可以通过修复的方式来解决问题; 然而在分布式系统中不仅存在Faults, 还会因为故障Faults导致Partial Failures,可见Faults是根因, Failures是结果, 对此我也将两者总结如下:
Fault Tolerance
讲到这里, 我想我们对于计算机系统模型以及分布式系统模型有了一个新的认知, 计算机系统模型对响应结果具备可预测性, 即要么正常运行, 要么崩溃异常;
那么对于分布式系统而言, 如果出现故障, 整个分布式系统并不会整体崩溃, 但是会对外表现为部分组件不可用,那能否因为部分组件或者服务不可用直接让整个分布式系统崩溃?
显然不能,我们对比下云计算服务与超级计算服务:
由此可见分布式系统是由一系列存在不可靠的组件或者服务通过互联网的方式进行通信, 并在组件或服务之间构建容错机制形成一个具备高可用的系统. 总结起来就是一句话, 如果我们想要构建一个分布式系统, 就必须要接受部分组件或者服务失效(Parital Failures)的可能性, 并在组件或服务之间构建容错(Fault Tolerance)机制来保障整体系统的可用性.
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有