分布式计算中的八大谬论
时间:2022-09-24 18:00:00
构建分布式系统是一项复杂的工作。分布式系统的成功是架构、设计、编码和测试的关键。任何失败都可能导致性能下降、频繁故障、成本超标和客户流失。在20世纪90年代Sun Microsystems的Peter Deutsch,James Gosling总结了分布式计算的八个谬论。随着时间的推移,IT人员对这些谬论的认识可能已经消退,所以想要提醒下大家。
八大谬论是:
- 网络可靠。 The network is reliable.
- 延迟为零。 Latency is zero.
- 带宽是无限的。 Bandwidth is infinite.
- 网络安全。 The network is secure.
- 拓扑不会改变。 Topology doesn’t change.
- 只有一个管理员。 There is one administrator.
- 运输成本为零。 Transport cost is zero.
- 网络是同质的。The network is homogeneous.
网络可靠
网络在局域内可能看起来坚如磐石。毕竟现在网络组件失败多久?即使单个组件出现故障,也有很多冗余?因此,随着网络变得越来越复杂,网络管理越容易出错,大多数都是配置错误。在某些情况下,多达三分之一的网络变化会导致影响网络可靠性的错误。软件和硬件都可能出现故障,尤其是路由器,约占所有故障的四分之一。不间断电源也可能中断,人们可能会改变不明智的设备配置,可能会有网络拥塞,拒绝服务(DoS)软件和固件升级或修复程序的攻击失败。网络遭受自然灾害和非自然灾害,设计一个弹性网络需要技能。超出你控制范围的广域链接很容易出错。
最近几个月,Azure事件很痛苦,这种失败率是主要云服务提供商的典型特征。对于移动应用程序,各种事情都可能出错:网络请求将在不可预测的间隔内失败,目标将不可用,数据将到达目的地,但不能返回确认,数据将在传输中损坏或不完整。移动应用程序必须在网络可靠性范围内具有弹性,但所有分布式应用程序都必须能够理所有这些可能性,网络节点必须能够处理服务器故障。
延迟为零
延迟不同于带宽。延迟是等待响应的时间。除了明显的处理延迟外,还有网络延迟,包括传输延迟、节点延迟和拥塞延迟。传输延迟随距离增加:约30 ms。欧美之间。节点数决定了节点延迟。
通常,开发人员在内部网络中建立分布式系统,这些系统有无关紧要的延迟,因此频繁的细粒度网络呼叫几乎不受惩罚。这种设计错误只有在投入实时系统时才会变得明显。
高延迟的一个令人不安的影响是它不是恒定的。在糟糕的网络上,偶尔可以在几秒钟内计算出来。就其性质而言,它不能保证单个数据包的顺序,甚至不能保证请求过程仍然存在。延迟会让事情变得更糟。此外,当应用程序发送多个请求进行补偿时,可以通过响应加剧暂时的高延迟。
带宽是无限的
虽然大多数现代电缆可以处理几乎无限的带宽,但我们还没有找到如何构建足够快的连接设备(集线器、交换机、路由器等),以确保所有连接用户的高带宽。典型的企业内部网络仍将有限制带宽的区域。
随着公共网络带宽的增加,视频和音频服务的使用速度也同样快,视频和音频曾经使用过广播技术。社交媒体等新用途往往吸收不断增加的带宽。此外,主要城市以外的许多地方都有最后一英里的限制,丢包的可能性也在增加。
一般来说,我们需要仔细假设高带宽是一种常见的体验。无论网络带宽多么令人印象深刻,它都无法接近共同托管过程的通信速度。
网络安全
遗憾的是,基于网络的系统仍然存在基本的安全漏洞。网络攻击逐年增加,好奇心、恶意和犯罪已经超越了它们的原始根源,成为国际冲突和政治行动的一部分。网络攻击是IT生活的一部分:对开发者来说很无聊,但却是必不可少的。有些问题是网络入侵检测往往是低优先级,所以我们并不总是意识到网络攻击的成功。
传统上,漏洞通常是防火墙配置不当的结果。大多数防火墙经常被检测到,因为你会立即发现你是否愚蠢地禁止它们。然而,这只是破坏网络和防火墙的一种方式,只是防御的一部分。Wi-Fi使用自己的设备通常是一个弱点(BYOD)虚拟化和软件定义网络可以通过损坏的设备进行入侵(SDN)也是如此。越来越多的DevOps对快速变化的基础设施的需求使得保持必要的控制措施更加困难。僵尸网络伙伴的入侵,企业网络中的僵尸网络是一个持续的问题。
你需要假设网络是敌对的,安全性必须深入。这意味着在分布式应用程序及其主机的基本设计中构建安全性。
通过深度防御,分布式系统的任何部分都需要一种安全的方式来访问其他网络资源。
安全带来了它自己的复杂性。这来自于维护不同用户账户、权限、证书、账户等的管理费用。主要的云网络中断是由更新前的权限到期引起的。
拓扑不会改变
网络拓扑不断变化,速度非常快。由于网络敏捷性的压力越来越大,与快速变化的业务需求同步是不可避免的。
无论您在哪里部署应用程序,您都必须假设大多数网络拓扑可能无法控制。网络管理员将一次性更改,因为它可能不符合您的利益。他们将移动服务器并更改网络拓扑以获得性能或安全性,并在服务器和网络故障时更改路由。
因此,依赖特定端点或路由的耐久性是错误的。网络的物理结构必须从任何分布式设计中抽象出来。
只有一个管理员
除非系统完全存在于小型系统中LAN否则,不同的管理员将与网络的各种组件相关联。他们将有不同程度的专业知识、不同的职责和优先事项。
服务失败的问题很重要。您的服务级别协议将要求在一定时间内做出响应。第一阶段将是确定问题。除非有问题的网络管理员是你开发团队的一部分,否则可能不容易。不幸的是,这不太可能。在许多网络中,问题可能是另一个组织的责任。若云组件是应用程序的重要组成部分,且云中断,则无法确定优先级。你所能做的就是等待。
如果网络中有很多管理员,就更难协调升级到网络或应用程序,尤其是当涉及到几个忙碌的人时。升级和部署必须协调完成。涉及的人越多,就越难!
运输成本为零
运输成本是指通过网络传输数据的总成本。我们可以参考时间和计算机资源,也可以参考财务成本。
需要将数据从应用程序层传输到传输层CPU以及其他资源。结构化信息需要序列化(编组)或分析,以将数据传输到线路上。由于带宽和延迟时间的影响可能大于带宽XML冗长和复杂XML占用JSON的两倍。
金融运输成本不仅包括创建网络的硬件和安装成本,还包括监控和维护网络服务器、服务和基础设施的成本,如果发现带宽不足,或者您的服务器实际上无法处理足够的并发请求。我们还需要考虑租赁线路和云服务的成本,由带宽支付
网络是同质的
今天的同质网络是罕见的,甚至比第一次发现谬误更罕见!网络可以连接到计算机和其他设备,每个设备都有不同的操作系统、不同的数据传输协议,所有设备都连接到各种供应商的网络组件。
然而,异构网络除非涉及设备或驱动程序的专有数据传输协议,否则没有特殊错误。从应用程序的角度来看,如果数据以开放的标准格式(如CSV,XML或JSON)传输和使用行业标准查询数据(如ODBC)方法,会有很大的帮助。
如果所有组件都来自供应商,则更可靠,因为测试覆盖范围可能更大,但实际情况是组件的丰富组合。这意味着互操作应该从任何分布式系统的设计开始。
结论
虽然这个指导是在20年前制定的,但我们今天仍然犯了这些错误。这些错误显示为不安全的端点,由于大对象的序列化、事务丢失、性能下降等原因。避免这些错误意味着这些谬误需要在每次设计和代码审查中考虑。