持续21年的《分布式计算的八个谬误》(2025)
你可能会认为,网络现在被理解得足够透彻,以至于人们不再提出自网络诞生以来我们几乎已知的错误假设。然而,作为用户、开发者和网络管理员,我们似乎仍然无法奇怪地放弃长期以来的信念。关于网络的误解中,最著名的可能是分布式计算的八个谬误。网络是可靠的延迟为零带宽是无限的网络是安全的拓扑结构不会改变只有一个管理员传输成本为零网络是同质的这个列表是从哪里来的?这个列表最初由比尔·乔伊和汤姆·莱昂收集,包含四个原始谬误(列表中的前四个),他们是Sun Microsystems的八位创始人和员工之一。Sun集成了高速图形、UNIX操作系统和工作中的互联网协议栈,这导致了桌面计算的爆炸性发展,他们迅速崛起,最终被Oracle收购。当你使用伯克利软件分发(BSD)变体、Linux发行版甚至Android时,你正在使用来自Sun Microsystems的技术。想想ZFS文件系统、网络文件系统(NFS)用于网络文件存储的协议和Java等。后来,L·彼得·德意志在Sun工作时增加了另外三个谬误,最终谬误由詹姆斯·戈斯林创造,他同样在Sun工作,这使我们来到了现在所知道和喜爱的八个谬误。随着时间的推移,这些观念已经沉淀并激发了其他谬误列表,例如围绕日期和时间的谬误,或人们对名字的信念的谬误。如果没有更多这样的例子,那我会感到惊讶。我们在填写表单或与网络或应用程序中的资产进行交互时,经常会遇到这些日期和名称错误。分布式计算的八个谬误是我们使用网络下埋藏的“常量”。作为网络运营商,无论是在协议和软件设计中,还是在它们如何影响用户日常生活中,都值得思考。记住这些谬误,我们能够更好地应对在线中因这些谬误而产生的行为。这个列表面向编写网络软件的人:调用网络的应用程序、从网络调用的服务和网络协议。它提供了实践指导,即使呈现得比较抽象,关于如何考虑通过网络发送数据及应该问的问题。例如:数据是否确实被发送了?数据是否被接收了?你怎么知道?可以再发送一次吗,还是数据已经丢失?它甚至需要再发送吗?你有时间处理这个数据吗?这将如何影响你程序的其他部分?尽管网络复杂,网络的表现是否在你真正理解的范围内?逐个看待这些谬误以下是我个人对分布式计算的八个谬误每一个的理解,涉及网络对我和我的服务的行为。其他人可能有不同的看法,我可能会有一些错误。图1 — 分布式计算的八个谬误。1. 网络是可靠的从整体上测量,互联网可能在任何时间对某些用户来说都在某处出现故障。我们单独体验它作为可靠可用是一种希望战胜经历的胜利。“五个九”的可靠性声称常常导致我们表现得好像“这不会发生在我身上”。更具体地说,人们通常假设一旦数据包被发送,它就会被接收。大多数情况下是如此。但我们仍然必须设计协议来处理数据未被接收的情况。考虑网络行为的三个经典指标中的第一个:丢失、延迟和抖动。“丢失”只是说“可靠性差”的另一种说法。如果你的协议没有考虑到数据可能丢失的事实,它将遇到问题。传输控制协议(TCP)和QUIC层的许多部分专门设计用于识别数据包丢失并处理它。互联网协议(IP)——无论是版本四还是版本六——都不保证交付。如果它们有能力,则由更高层负责。2. 延迟为零延迟包含上面提到的其他两个网络问题:延迟和抖动。延迟有时仅仅是距离的函数,考虑光速——但即使这样也可能被误解,因为光在光纤中的速度比在真空中的速度慢。当将信号从铜转为光纤并沿光纤光链发送时,还会出现额外的延迟。因此,通过微波、无线电甚至激光在卫星之间发送数据,有时可能比通过光纤发送更快。抖动,即延迟的可变性,是游戏和流应用协议中的主要挑战。延迟和丢失是Netflix等服务同时进行数据缓冲和使用纠错码的原因。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡