在20世纪90年代Sun Microsystems的Peter Deutsch,James Gosling和其他人总结出了分布式计算的八个谬论。虽然已经过去了四十多年,但是这八个谬论仍有极大的参考意义,尤其是分布式应用盛行的今天。

一、网络是可靠的(The network is reliable)

在网络中,软件和硬件都可能出现故障,尤其是路由器,它们占所有故障的四分之一左右。“不间断”电源也可能会中断,人们可能会发生不明智的设备配置更改,并且可能存在网络拥塞,拒绝服务(DoS)攻击以及软件和固件升级或修补程序失败。
对于移动应用程序,各种各样的事情都可能会出错:网络请求将以不可预测的间隔失败,目标将不可用,数据将到达目的地但无法发回确认,数据将在传输中损坏或到达不完整。移动应用程序必须在网络可靠性范围的可怕范围内具有弹性,但所有分布式应用程序必须能够应对所有这些可能性,并且网络节点必须能够应对服务器故障。

二、延迟是零(Latency is zero)

延迟是等待响应所花费的时间。除了明显的处理延迟外,还有网络延迟,包括传播延迟节点延迟拥塞延迟。传播延迟随距离增加,传播路径中的节点数决定了节点延迟。通常,开发人员在内部网中构建分布式系统,这些系统具有无关紧要的延迟,因此进行频繁的细粒度网络调用几乎不会受到惩罚。这种设计错误只有在投入实时系统时才会变得明显。
高延迟的一个令人不安的影响是它不是恒定的。在糟糕的网络上,偶尔可以在几秒钟内计算出来。就其性质而言,无法保证网络服务单个数据包的顺序,甚至不能保证请求进程仍然存在。延迟会让事情变得更糟。此外,在应用程序通过发送多个同时请求进行补偿的情况下,可以通过对其的响应来加剧暂时高延迟。

三、带宽是无限的(Bandwidth is infinite)

随着公共网络带宽的增加,网络对使用视频和音频的服务的使用也一样快,而视频和音频曾经使用过广播技术。诸如社交媒体之类的新用途往往会吸收不断增加的带宽。此外,主要城市以外的许多地方都存在“最后一英里”的限制,并且丢包的可能性也在增加。
一般而言,我们需要谨慎地假设高带宽是一种普遍的体验。无论网络带宽如何令人印象深刻,它都无法接近共同托管进程可以通信的速度。

四、网络是安全的(The network is secure)

网络安全是网络环境中必需考虑的事情。网络攻击是IT生活的一部分:对开发人员来说很无聊,但却是必不可少的。部分问题是网络入侵检测往往是低优先级,因此并不总是意识到成功的网络攻击。
传统上,漏洞通常是配置不当的防火墙的结果。大多数防火墙都会经常被检测出来,因为你会立即发现你是否愚蠢地禁用它们。然而,这只是破坏网络和防火墙的一种方式中的一种,只是防御的一部分。在设计分布式系统时,必需假设网络是敌对的,而且安全性必须深入。这意味着需要将安全性构建到分布式应用程序及其主机的基本设计中。通过纵深防御,分布式系统的任何部分都需要具有访问其他网络资源的安全方式。安全带来了自身的复杂性。这将来自维护不同用户帐户,权限,证书,帐户等的管理开销。

五、网络拓扑不会改变(Topology doesn’t change)

网络拓扑不断变化,速度非常快。由于“网络敏捷性”的压力越来越大,这是不可避免的,以便与快速变化的业务需求保持同步。无论在何处部署应用程序,都必须假设大部分网络拓扑都可能无法控制。因此,依赖特定端点或路由的持久性是错误的。必须始终从任何分布式设计中抽象出网络的物理结构。常见的网络拓扑示例如下:

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

除非系统完全存在于小型局域网中,否则将有不同的管理员与网络的各种组件相关联。他们将拥有不同程度的专业知识,不同的职责和优先事项。如果出现导致服务失败的问题,这将很重要。您的服务级别协议将要求在一定时间内做出响应。 如果网络中有许多管理员,那么协调升级到网络或应用程序就更加困难,特别是当涉及到几个忙碌的人时。升级和部署必须协调完成,涉及的人数越多,这就变得越困难。

七、传输成本是零(Transport cost is zero)

运输成本是指通过网络传输数据的总体成本。此外,将数据从应用程序层传输到传输层需要CPU和其他资源。需要对结构化信息进行序列化(编组)或解析以将数据传输到线路上。这种性能影响可能大于带宽和延迟时间。

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

同质的网络是罕见的,甚至比首次发现谬论时更为罕见!网络可能连接计算机和其他设备,每个设备具有不同的操作系统,不同的数据传输协议,并且所有设备都与来自各种供应商的网络组件相连。但是,异构网络没有什么特别的错误,除非它涉及需要专门支持,设备或驱动程序的专有数据传输协议。从应用程序的角度来看,如果数据以开放标准格式(如CSV,XML或JSON)传输,并且使用行业标准的查询数据(如ODBC)的方法,则会有很大帮助。如果所有组件都来自一个供应商,则可靠性更高,因为测试覆盖范围可能更大,但实际情况是组件的丰富组合。这意味着互操作性应该从任何分布式系统的设计开始就内置。常见网络一般是使用标准的网络协议,设备支持该标准协议(这也复合面向接口编程思想),示例如下:

总结

分布式计算的八大谬论,总结成一句话,就是网络是不可靠的,在设计分布式系统时,必须将这种不可靠性考虑在内

参考

https://ably.com/blog/8-fallacies-of-distributed-computing Navigating the 8 fallacies of distributed computing
https://blog.csdn.net/qq_34412985/article/details/119142810 分布式计算中的八大谬论
https://cloud.tencent.com/developer/article/1370391 分布式系统的八个谬论

分布式计算的八大谬论相关推荐

  1. 分布式计算中的八大谬论

    构建分布式系统是一项复杂的工作.架构,设计,编码和测试对分布式系统的成功都至关重要.任何一点的失败都可能导致性能下降,故障频发,费用超标以及最终导致客户流失.在20世纪90年代Sun Microsys ...

  2. 2020年软件测试的八大谬论

    原创:缪斯 出现软件测试谬论的主要原因是: 缺乏权威的事实: 不断发展的行业性质: 人为逻辑的一般缺陷. 八大谬论及事实: 谬论:质量控制=测试. 事实:测试只是软件质量控制的一个组成部分.质量控制包 ...

  3. 分布式/微服务理论知识

    分布式系统和微服务架构越来越流行,特意卖了一本<SpringCloud微服务与分布式系统实战>来给自己充充电,也是掌握技术的必经之路. 一.分布式系统 大数据.高并发和快响应已经成为互联网 ...

  4. PHP开发人员的8个分布式计算谬论

    Seven fallacies of developing distributed computing applications were coined in 1997 by Peter Deutsc ...

  5. 从分布式到微服务,深挖Service Mesh

    摘要:在前一段时间,我们CSDN推出了<深度剖析Service Mesh服务网格新生代Istio>一文,大家应该深刻理解了Istio的架构和功能,该篇文章可以看作是这篇的前传,本文由易到难 ...

  6. 为什么工作三年的程序员还不懂APM与调用链技术?

    服务调用链技术 服务调用链技术是微服务架构中对服务进行监控的重要环节,它可以帮助我们清晰地了解当前系统的运行情况,同时帮助我们定位问题,解决分布式网络下服务交互追踪的问题. APM与调用链技术 在单体 ...

  7. B站 全套java面试(200道)问题MD(题目+答案)

    Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...

  8. Java面试题大全(总结)

    Java常见面试题大全 **Java面向对象有哪些特征,如何应用** HashMap原理是什么,在jdk1.7和1.8中有什么区别 ArrayList和LinkedList有什么区别 高并发中的集合有 ...

  9. java_B站_面试题

    Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想.万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的 ...

最新文章

  1. Gartner 2015新兴技术发展周期简评:大数据实用化、机器学习崛起
  2. C# 11 预览,又增加了实用的语法糖
  3. ADHD-注意力缺陷多动症
  4. Datawhale-零基础入门NLP-新闻文本分类Task03
  5. 小程序解决方案 Westore - 组件、纯组件、插件开发
  6. TinyMC编辑器简介
  7. object-c的静态变量(static)
  8. 常见笔顺错误的字_易错汉字笔画顺序 你全都会吗?
  9. 马士兵java学习之路
  10. 【java】使用一维数组实现评委打分功能
  11. Machine Learning Basics(2)
  12. 基于FPGA的呼吸灯设计
  13. spring-xxx-xxx-0.0.1-SNAPSHOT.jar中没有主清单属性完美解决
  14. 爬虫-模拟点击,实现加载页面全部内容
  15. 0 公式 0 基础学习电磁兼容 — 1. EMC 测试类型简介
  16. 使用ThreeJs从零开始构建3D智能仓库——第五章(添加货架、货物与侧边栏)
  17. 家用是买轿车还是suv_SUV的完整形式是什么?
  18. 西邮linux兴趣小组网络,西邮Linux兴趣小组2012纳新笔试题
  19. 霍尔电流传感器在直流列头柜的应用
  20. 物联网常用协议:MQTT、CoAP、LwM2M、HTTP、LoRaWAN和NB-IoT

热门文章

  1. 飞行模式待机电流分析详解
  2. linux文件打包发给别人,linux下的文件打包和解压
  3. 华软资源共享--免费下载380套大型企业管理源码
  4. 【自动化测试不求人】selenium ddt数据驱动模块
  5. ABAP动态编程-动态生成子例程和本地类-GENERATE SUBROUTINE POOL
  6. 笔记本gtx1650最好用驱动_5000元价位,GTX 1650入门游戏独显究竟表现怎么样?
  7. 北风设计模式课程---访问者模式(Visitor)
  8. 如何根据美国的邮编带出对应的州呢
  9. 小白入门计算机视觉(二) : 图像基本处理----灰度图和二值化
  10. 从办理社保卡的过程,说说办理流程的潜在风险