分布式系统谬误(Fallaciesofdistributedsystems)是Sun的LPeterDeutsch等人提出的一系列断言,描述了错误的假设刚接触分布式应用程序的程序员总是这样。微服务的大规模采用迫使更多的工程师了解这种架构决策对其系统设计的影响。在讨论基于微服务的分布式系统设计时,我们经常会看到这8个被忽视的谬误:1、网络可靠;2、网络延迟为0;3、带宽无限制;4、网络安全5、网络拓扑结构不变;6.总有一个管理员;7、网络传输成本为0;8、网络同质化。8分布式系统的谬误1.网络是可靠的在软件应用开发过程中很少处理网络错误。在网络中断期间,此类应用程序可能会暂停或无限期地等待确认数据包,从而永久消耗内存或其他资源。这些应用程序也可能无法重试任何停滞的操作,或者在出现故障的网络可用时需要(手动)重新启动。为了构建一个可靠的系统,您必须理解并接受这样一个事实,即任何特定的通信都有可能失败;因此,我们需要为系统提供一种方法来处理这种潜在的通信错误。所以最终,它归结为重新发送,它可以有多种形式。其中一种模式是存储转发模式。我们将数据存储在本地或其他地方,而不是直接将数据发送到下游服务器。这也允许在发生灾难时恢复数据,而简单的重试循环将缺乏这种保证。符合这种模式的技术有很多,比如K??afka、RabbitMQ、ActiveMQ等消息中间件都可以解决这个问题。误区1:网络可靠2.网络延迟为0忽略网络延迟及其可能导致的数据包丢失导致应用程序和传输层开发人员允许不受限制的流量,从而大大增加丢失数据包和浪费带宽。我们应该将延迟视为满足任何请求的绝对必要开销。消息可大可小,延迟是恒定的。与带宽不同,延迟通常与光速和通信距离(或路径)有关。因此,两个系统之间的距离在这里起着重要作用。延迟无处不在。它发生在所有通信中。理想情况下,此开销应尽可能小。延误与从汽车上卸下杂货非常相似。你从厨房到汽车的时间就是延误。你是想一次来回带走尽可能多的东西,还是想一个人背着这些东西跑上百次来回卸车?谬误2:网络延迟是03,带宽是无限的假设你可以无限增加通道上的数据大小可能是一个大错误。这个问题只有在规模达到一定程度,沟通渠道达到上限时才会出现。现在您可能会想,只需在每次往返中携带尽可能多的数据即可减少延迟的影响。这是事实,但也有局限性。在很大程度上取决于您的系统设计和各自的优先级,但了解如何平衡两者至关重要。谬误3:带宽是无限的4.网络是安全的假设您可以信任您所在的网络或您为其构建系统的人可能是一个严重的错误。随着众包漏洞赏金计划的出现和每天新闻中的重大漏洞,这一点在今天更加明显。在设计系统时采取安全第一的立场将在未来得到回报。即使花时间评估您当前系统的安全漏洞也是一个好的开始,这将很快产生一个简短的改进列表。谬误4:网络是安全的5.网络拓扑结构是不可变的网络结构并不总是相同的。网络拓扑的变化会对带宽和延迟问题产生影响。例如,如果基础设施的关键部分发生故障,流量能否继续流向适当的目的地?我们会有单点故障吗?随着Docker和Kubernetes的出现,改变网络拓扑的便捷性几乎让我们习以为常,这很危险。Zookeeper和Consul等工具确实有助于服务发现,并允许应用程序对系统布局和组成的变化做出反应。构建可以对这些拓扑变化做出反应的系统可能很棘手,但最终会产生更具弹性的系统。谬误5:网络拓扑结构是不变的6.总有一个管理员这个谬误本质上是说你无法控制一切。随着系统的发展,它们将依赖于您无法控制的其他系统。花点时间考虑一下所有的依赖关系;你拥有从你的代码到运行它们的服务器的一切。有一个清晰的方法来管理您的系统及其各自的配置是非常重要的。随着采用各种配置的系统数量的增加,管理和跟踪变得越来越困难。基础架构即代码(IaC)可以帮助对系统中的这些配置更改进行编码。拥有一种在问题出现时对其进行诊断的好方法,监控和可观察性将是可以节省时间的关键工具。此外,适当的解耦有助于确保整体系统的弹性和正常运行时间。谬误六:总有一个管理员7.网络传输成本为0我们常常把用于系统间发送数据的资源看作是一种简单的业务成本。当数据很小时,这些开销和成本可以忽略不计。尽管如此,随着系统的增长,与gRPC或MessagePack等传输优化格式相比,优化JSON等消息格式的成本可能有点高(双关语)。不过,随着系统的增长,与gRPC或MessagePack等传输优化格式相比,优化像JSON这样比较繁重的消息格式的成本是值得的。了解这些成本至关重要;但是,它也有其折衷。在短期内,过早的优化会导致更多的麻烦。谬误七:网络传输成本08.网络同质化。我们一定写过很多转换程序来将一种格式的数据转换成另一种格式。我们喜欢一切都干净整洁,但现实世界远非如此。互操作性是必不可少的。这种灵活性可确保我们的系统在“新的热门框架”出现时继续运行,或者当您需要在最初未考虑的环境中运行新系统时。了解所有系统都是不同的并且不将您的解决方案与特定方面的技术耦合可以节省您的时间和麻烦。谬误八:网络是同构的结论当我们广泛应用微服务架构时,必须认识到微服务架构本质上是一种分布式系统架构。作为分布式系统架构,我们不得不面对分布式系统面临的诸多挑战。了解“分布式系统的谬误”,可以避免我们在使用微服务架构时需要考虑的问题,而不是当这些问题不存在的时候!参考资料:https://architecturenotes.co/fallacies-of-distributed-systems/https://en.wikipedia.org/wiki/Fallacies_of_distributed_computing文章来自:热爱科学的Wesley,如需转载本文请联系Wesley热爱科学的人,今天头条号。
