分布式系统的8个谬误

Table of Contents

The network is reliable(网络可靠)

为了建立一个可靠的系统,您必须理解并接受这样一个事实:任何特定的通信都可能失败;因此,我们需要为系统提供一种方法来处理这种潜在的错误通信。所以最终,这归结为重新传输,它可以有很多种形式。

一种这样的模式是存储转发模式。我们不是将数据直接发送到下游服务器,而是将其存储在本地或其他地方。这还允许在简单的重试循环缺乏此类保证的灾难性场景中进行恢复。

有大量的技术符合他的模式RabbitMQ,ActiveMQ和各种专有解决方案从您最喜爱的云供应商。

Latency is zero(延迟为零)

我喜欢把延迟看作完成任何请求的严格开销。消息可以很大,也可以很小,延迟不变。与带宽不同,延迟通常与光速和通信距离(或路径)有关。所以两个系统之间的距离在这里起着重要的作用。

延迟无处不在。它发生在所有的沟通。

理想情况下,此开销应尽可能小。延迟与从汽车上卸下杂货非常相似。 你从厨房到车里所花的时间 就是潜伏期。

你是想一趟能抢多少就抢多少,还是想把物品单独带上,往返几百趟才能卸完车?

什么是CDN?

内容交付网络和边缘计算本质上是在试图让冰箱和后备箱之间的距离尽可能地近。通过将数据复制到更靠近需要的位置,我们可以显著降低延迟。

Bandwidth is infinite(带宽无限)

假设您继续无限制地增加通道上的数据大小;可能是个错误。这个问题只有在规模困难进入对话,特定的沟通渠道达到极限时才会出现。

我第一次遇到这个问题是因为我不小心将我的主页所需的有效负载增加了10倍。这个特定的API是一个未缓存的调用,每次页面加载需要3 MB。这包括到数据库的往返以及整个有效负载。

我们很快就达到了系统的几个带宽限制,这使得网站很快就关闭了。

现在你可能在想 ,你刚刚告诉我在每次往返中尽可能多地服用,以减少延迟的影响。这是事实,但也有其局限性。这在很大程度上取决于您的系统设计和各自的优先级,但了解权衡是至关重要的。

The network is secure(网络安全)

假设您可以信任您所在的网络或您正在为其构建系统的人可能是一个严重的错误。

如今,随着众包漏洞赏金计划的出现和每天新闻中的重大漏洞利用,这一点变得更加明显。

在设计系统时采取安全第一的立场将在未来收获红利。甚至花时间评估您当前系统的安全漏洞也是一个很好的起点,并将很快产生一个简短的改进列表。

Topology doesn't change(拓扑不更改)

网络结构不会总是相同的。例如,如果基础设施的一个关键部分出现故障,流量是否可以继续流向适当的目的地?我们是否存在单点故障?

随着Docker和Kubernetes的出现,改变网络拓扑的容易性现在几乎使我们认为这是理所当然的,几乎是危险的。

工具如动物园管理员以及领事真正帮助解决服务发现方面的问题,并允许应用程序对布局和系统组成方面的变化做出反应。

构建能够对拓扑结构中的这些变化做出反应的系统可能是棘手的,但最终会产生更具弹性的系统。

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

这句话花了我一些时间才领会,基本上是说你不能控制一切。

随着系统的增长,它们将依赖于您无法控制的其他系统。所以 花点时间想想所有的依赖关系;您拥有从代码到运行它们的服务器的一切。

有一种清晰的方法来管理系统及其各自的配置是至关重要的。随着具有各种配置的系统数量的增加,管理和跟踪变得越来越困难。 基础设施即代码(IaC)可以帮助您将这些变化编入系统中。

有一个很好的方法来诊断问题时,他们出现,监视和可观察性将是关键的工具,可以保存您的时间。

适当的解耦还有助于确保整体系统弹性和正常运行时间。

Transport cost is zero(运输成本为零)

我们经常认为我们用于在系统之间发送数据的资源是一个简单的业务成本。现在,当事情很小时,这种开销和成本可以忽略不计。

尽管如此,随着系统的增长,优化消息格式(如JSON)的成本可能是值得的,与传输优化格式(如gRPC或MessagePack)相比,JSON可能有点沉重(双关语)。

了解这些费用至关重要;然而,它也有它的折衷。在短期内,这么做可能会带来比其价值更大的麻烦。

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

我写了我的公平份额shims在我的日子;获取一种格式的数据并将其转换为另一种格式。

我们喜欢一切都干净整洁,但真实的世界远非如此,互操作性是必不可少的。

这种灵活性可确保我们的系统在“新的热门框架”开始使用或您需要在不适合的环境中运行新系统时继续运行。(显然,互操作性有其局限性)

了解所有系统并不相同,并且不将您的解决方案耦合到某个方面,可以保存您的时间并减少以后的麻烦。

资源

Date: 2022-12-30 Fri 15:08

Author: yangk

Created: 2023-01-03 Tue 12:43

hello-world