分布式计算的八大谬论

在20世纪90年代Sun Microsystems的Peter Deutsch,James Gosling和其他人总结出了分布式计算的八个谬论。虽然已经过去了四十多年,但是这八个谬论仍有极大的参考意义,尤其是分布式应用盛行的今天。

一、网络是可靠的(The network is reliable)

在网络中,软件和硬件都可能出现故障,尤其是路由器,它们占所有故障的四分之一左右。“不间断”电源也可能会中断,人们可能会发生不明智的设备配置更改,并且可能存在网络拥塞,拒绝服务(DoS)攻击以及软件和固件升级或修补程序失败。
对于移动应用程序,各种各样的事情都可能会出错:网络请求将以不可预测的间隔失败,目标将不可用,数据将到达目的地但无法发回确认,数据将在传输中损坏或到达不完整。移动应用程序必须在网络可靠性范围的可怕范围内具有弹性,但所有分布式应用程序必须能够应对所有这些可能性,并且网络节点必须能够应对服务器故障。

二、延迟是零(Latency is zero)

延迟是等待响应所花费的时间。除了明显的处理延迟外,还有网络延迟,包括传播延迟节点延迟拥塞延迟。传播延迟随距离增加,传播路径中的节点数决定了节点延迟。通常,开发人员在内部网中构建分布式系统,这些系统具有无关紧要的延迟,因此进行频繁的细粒度网络调用几乎不会受到惩罚。这种设计错误只有在投入实时系统时才会变得明显。
高延迟的一个令人不安的影响是它不是恒定的。在糟糕的网络上,偶尔可以在几秒钟内计算出来。就其性质而言,无法保证网络服务单个数据包的顺序,甚至不能保证请求进程仍然存在。延迟会让事情变得更糟。此外,在应用程序通过发送多个同时请求进行补偿的情况下,可以通过对其的响应来加剧暂时高延迟。

三、带宽是无限的(Bandwidth is infinite)

随着公共网络带宽的增加,网络对使用视频和音频的服务的使用也一样快,而视频和音频曾经使用过广播技术。诸如社交媒体之类的新用途往往会吸收不断增加的带宽。此外,主要城市以外的许多地方都存在“最后一英里”的限制,并且丢包的可能性也在增加。
一般而言,我们需要谨慎地假设高带宽是一种普遍的体验。无论网络带宽如何令人印象深刻,它都无法接近共同托管进程可以通信的速度。

四、网络是安全的(The network is secure)

网络安全是网络环境中必需考虑的事情。网络攻击是IT生活的一部分:对开发人员来说很无聊,但却是必不可少的。部分问题是网络入侵检测往往是低优先级,因此并不总是意识到成功的网络攻击。
传统上,漏洞通常是配置不当的防火墙的结果。大多数防火墙都会经常被检测出来,因为你会立即发现你是否愚蠢地禁用它们。然而,这只是破坏网络和防火墙的一种方式中的一种,只是防御的一部分。在设计分布式系统时,必需假设网络是敌对的,而且安全性必须深入。这意味着需要将安全性构建到分布式应用程序及其主机的基本设计中。通过纵深防御,分布式系统的任何部分都需要具有访问其他网络资源的安全方式。安全带来了自身的复杂性。这将来自维护不同用户帐户,权限,证书,帐户等的管理开销。

五、网络拓扑不会改变(Topology doesn’t change)

网络拓扑不断变化,速度非常快。由于“网络敏捷性”的压力越来越大,这是不可避免的,以便与快速变化的业务需求保持同步。无论在何处部署应用程序,都必须假设大部分网络拓扑都可能无法控制。因此,依赖特定端点或路由的持久性是错误的。必须始终从任何分布式设计中抽象出网络的物理结构。常见的网络拓扑示例如下:
请添加图片描述

六、只有一个管理员(There is one administrator)

除非系统完全存在于小型局域网中,否则将有不同的管理员与网络的各种组件相关联。他们将拥有不同程度的专业知识,不同的职责和优先事项。如果出现导致服务失败的问题,这将很重要。您的服务级别协议将要求在一定时间内做出响应。 如果网络中有许多管理员,那么协调升级到网络或应用程序就更加困难,特别是当涉及到几个忙碌的人时。升级和部署必须协调完成,涉及的人数越多,这就变得越困难。

七、传输成本是零(Transport cost is zero)

运输成本是指通过网络传输数据的总体成本。此外,将数据从应用程序层传输到传输层需要CPU和其他资源。需要对结构化信息进行序列化(编组)或解析以将数据传输到线路上。这种性能影响可能大于带宽和延迟时间。

八、网络是同构的(The network is homogeneous)

同质的网络是罕见的,甚至比首次发现谬论时更为罕见!网络可能连接计算机和其他设备,每个设备具有不同的操作系统,不同的数据传输协议,并且所有设备都与来自各种供应商的网络组件相连。但是,异构网络没有什么特别的错误,除非它涉及需要专门支持,设备或驱动程序的专有数据传输协议。从应用程序的角度来看,如果数据以开放标准格式(如CSV,XML或JSON)传输,并且使用行业标准的查询数据(如ODBC)的方法,则会有很大帮助。如果所有组件都来自一个供应商,则可靠性更高,因为测试覆盖范围可能更大,但实际情况是组件的丰富组合。这意味着互操作性应该从任何分布式系统的设计开始就内置。常见网络一般是使用标准的网络协议,设备支持该标准协议(这也复合面向接口编程思想),示例如下:
请添加图片描述

总结

分布式计算的八大谬论,总结成一句话,就是网络是不可靠的,在设计分布式系统时,必须将这种不可靠性考虑在内

参考

https://ably.com/blog/8-fallacies-of-distributed-computing Navigating the 8 fallacies of distributed computing
https://blog.csdn.net/qq_34412985/article/details/119142810 分布式计算中的八大谬论
https://cloud.tencent.com/developer/article/1370391 分布式系统的八个谬论

猜你喜欢

转载自blog.csdn.net/wangxufa/article/details/124918859
今日推荐