图解分布式计算的8大谬误

标签: 分布 计算 谬误 | 发表时间:2022-10-26 02:19 | 作者:frankinbj
出处:http://weekly.dockone.io

分布式计算的谬误是由L Peter Deutsch和Sun Microsystems公司的其他人所提出的一组断言,他们描述了不熟悉分布式应用程序的程序员总是会做出的一些错误的假设。

微服务的大规模普及迫使越来越多的工程师意识到这些错误的认识给他们的系统带来多么大的影响。

我们经常会看到一些人在讨论系统设计的时候,忽视或者淡化这8个谬误。

下面我来介绍一下这些谬误以及一些潜在的消减措施,希望大家能感兴趣。

网络是可靠的


为了构建一个可靠的系统,你必须理解并接受任何一种通信都可能会失败的事实。因此,我们需要为系统设计出一种方法来处理这种潜在的错误沟通。所以,最终需要用到重传,而且它可以有多种形式。

存储再转发(store and forward)就是这样一种模型。我们不直接将数据发送到下游服务器,而是将其存储在本地或其他地方,这也提供了能从灾难场景下恢复的保障。

有很多产品属于这种技术,如RabbitMQ,ActiveMQ以及来自云厂商的各种专有解决方案。

网络是零延迟的


图片的左边是在现代系统中直接访问内存的时间,右边是在世界各地往返所需的时间。

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

延迟是无处不在的。它发生在所有的通讯中。理想情况下,这种开销应该尽可能小。延迟的场景和从车上卸货非常相似,就是说,从厨房到车上的时间就是延迟。你是想一趟尽可能多地拿东西,还是想每次只拿一个东西,花几百次往返把车上的东西都卸下来?

带宽是无限的


假设持续无限制地增加信道上的数据大小,这显然是个很大的错误。这种情况只有在某种通讯彻底占满带宽与此同时无法扩容时才会出现。

我第一次遇到这个问题是我不小心将主页所需的有效负载增加了10倍时。这个特定的API是一个无缓存调用,每次页面加载3 MB,这也包括到数据库的往返。我们的系统很快就达到带宽限制,网站也就很快垮了。

现在你可能在想,你刚才告诉我,每次往返时尽可能多地带东西,以减少延迟方面的影响。这是事实,但它也有其局限性。这在很大程度上取决于你的系统设计和各自的优先级。就是说,能够意识到权衡至关重要。

网络是安全的


我们可以理所当然的信任我们所处的网络或为之构建的人,这可能是一个重大错误。如今,随着每天新闻中出现的社区漏洞赏金计划和重大漏洞攻击,这一点变得更加明显。在设计系统时就采取安全第一的方针会让你在未来获得回报。甚至花点时间评估当前系统的安全漏洞并很快产生一个简短的改进清单也是一个很好的开始。

网络拓扑永不改变


网络架构并不总是相同的。例如,如果基础设施的关键部分出现故障,流量能否继续流向适当的目的地?是否存在单点故障?

如今,随着Docker和Kubernetes的出现,更改网络拓扑的便利现在几乎让我们将其视为理所当然,这是非常危险的。像ZooKeeper和Consul这样的工具可以帮助解决服务发现方面的问题,并允许应用程序对布局和系统的变化做出反应。

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

只有一个管理员


这句话花了我一段时间去理解,本质上是说一个人无法控制所有的事情。

随着系统数量的增长,它们会依赖于不在我们控制范围的一些其他的系统,要知道我们只拥有从我们自己的代码到运行它的服务器这一部分。同时,有一个清晰的方法来管理你的系统以及各自的配置是至关重要的。然而,随着各种系统数量的增加,管理和跟踪变得越来越困难。由此诞生的基础设施即代码(IaC)可以帮助将系统中的这些变化代码化。

同时,当出现问题时,也需要有一个很好的方法来诊断问题,监控和可观测性将是可以节省时间的关键工具。

最后,适当的解耦还可以帮助确保整个系统的弹性和在线时间。

传输成本是零


我们经常认为,用于在系统之间发送数据的资源只是很微小的业务成本。当事情很小的时候,这种间接消耗和成本可以忽略不计。不过,随着系统的增长,优化像JSON这样的消息格式的成本可能是值得投入的,虽然与gRPC或MessagePack相比可能有点沉重。认识到这些开销是必不可少的;然而,它也有它的权衡。过早去做可能会在短期内带来更多的麻烦。

网络是同构的


我曾经写过很多关于shims的文章,有关将一种格式的数据转换为另一种格式。我们希望一切都干净整洁,但现实世界远非如此。具有互操作性是必不可少的。

这种灵活性确保了我们的系统能在最新最热的框架里继续发挥作用,也能在不适合的环境中继续运行。(即使,互操作性有其局限性)

如果能知道“所有的系统都是不一样的,不会将你的解决方案耦合到一个系统上。”可以在未来节省你的很多时间和烦恼。

原文链接: Fallacies of Distributed Systems(翻译:伊海峰)

相关 [分布 计算 谬误] 推荐:

图解分布式计算的8大谬误

- - DockOne.io
分布式计算的谬误是由L Peter Deutsch和Sun Microsystems公司的其他人所提出的一组断言,他们描述了不熟悉分布式应用程序的程序员总是会做出的一些错误的假设. 微服务的大规模普及迫使越来越多的工程师意识到这些错误的认识给他们的系统带来多么大的影响. 我们经常会看到一些人在讨论系统设计的时候,忽视或者淡化这8个谬误.

Hadoop与分布式计算

- 透明 - 丕子
写本文由leftnoteasy发布于http://leftnoteasy.cnblogs.com 本文可以被全部或者部分的使用,但请注明出处,如果有问题,可以联系wheeleast (at) gmail.com, 也可以加作者的新浪微博:http://weibo.com/leftnoteasy. 很久没有写写博客了,之前主要是换工作,耽误了很多的时间,让人也变得懒散,不想花大时间来写东西.

分布式计算开源框架Hadoop入门实践

- - ITeye博客
一、分布式计算开源框架Hadoop实践. 在 SIP项目设计的过程中,对于它庞大的日志在开始时就考虑使用任务分解的多线程处理模式来分析统计,在我从前写的文章《Tiger Concurrent Practice --日志分析并行分解设计与实现》中有所提到. 但是由于统计的内容暂时还是十分简单,所以就采用Memcache作为计数器,结合MySQL就完成了访问 控制以及统计的工作.

分布式计算Hadoop近期学习总结

- - ITeye博客
  一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算. Hadoop框架中最核心设计就是:HDFS和MapReduce,HDFS实现存储,而MapReduce实现原理分析处理,这两部分是hadoop的核心.

Spark:一个高效的分布式计算系统

- - IT技术博客大学习
标签:   Spark   分布式. Spark与Hadoop的对比. Spark的中间数据放到内存中,对于迭代运算效率更高. Spark更适合于迭代运算比较多的ML和DM运算. 因为在Spark里面,有RDD的抽象概念. Spark比Hadoop更通用. Spark提供的数据集操作类型有很多种,不像Hadoop只提供了Map和Reduce两种操作.

分布式计算框架-Spark初步理解

- - 互联网 - ITeye博客
    最开始关注Spark,是在csdn首页上看到一篇文件《Spark核心开发者:性能超Hadoop百倍,算法实现仅有其1/10或1/100》的,看着标题确实感觉比较年逼的. 后来稍微研究了一下,其实发现,这个描述有点问题. Spark是一个基于内存的纯计算框架,而hadoop是包括计算框架的mapreduce和分布式存储hdfs,所以应该描述为Spark性能超Hadoop的mapreduce计算性能百倍.

分布式计算系统 Spark 成为 Apache 顶级项目

- - 博客园_新闻
Apache 软件基金会今天宣布,Spark 项目已从孵化器毕业,成为 Apache 软件基金会的一个顶级项目. Spark 是一个高效的分布式计算系统,发源于美国加州大学伯克利分校 AMPLab 的集群计算平台. Spark 被称为“Hadoop 的瑞士军刀”,拥有非凡的速度和易用性. Spark 立足于内存计算,相比 Hadoop MapReduce,Spark 在性能上要高 100 倍,而且 Spark 提供了比 Hadoop 更上层的 API,同样的算法在 Spark 中实现往往只有 Hadoop 的1/10 或者1/100 的长度.

Spark:比Hadoop更强大的分布式数据计算项目

- - 标点符
Spark是一个由加州大学伯克利分校(UC Berkeley AMP)开发的一个分布式数据快速分析项目. 它的核心技术是弹性分布式数据集(Resilient distributed datasets),提供了比Hadoop更加丰富的MapReduce模型,可以快速在内存中对数据集进行多次迭代,来支持复杂的数据挖掘算法和图计算算法.

iPod产品中的随机谬误?

- stingzou - iHuby
前两天看到一篇Blog讲“如何避免思维的误区”,其中有一部分是讲“随机谬误模型”,并举了Apple的iPod播放器产品为例:. Ipod除了绚丽的外观,还有一项领先的功能,就是“真正的随机播放功能”. Apple通过完全随机的算法,向用户即时运算出下一首随机播放的歌曲. 但是不久Apple就接到了客户的投诉,投诉的内容是Apple所谓随机播放功能有问题,理由是它有时会连续播放同一首歌.

有哪些常见的逻辑谬误?

- - 知乎日报
科研工作者有哪些「新手常见错误」. 真知拙见KnowledgeHot. 科学家通过观察与实验,描述客观世界,获得科学事实. 常见的科研逻辑有分析与综合,归纳与演绎,比较与类比. 然而,并非每一种逻辑思维方法,都能保证获得的结论为真. 为了避免落入陷阱,作为新入行的科研工作者,尤其需要留心一些. 本文所举的例子,主要是生物医学领域的.