本文主要阐述对<<Fallacies of Distributed Computing Explained>>白皮书的理解。
8条关于分布式计算谬论的总结如下:
- 网络永远是可靠的。(The network is reliable)
- 网络延迟为0。(Latency is zero)
- 带宽是无尽的。(Bandwidth is infinite)
- 网络是安全的。(The network is secure)
- 网络拓扑是不会改变的。(Topology doesn't change)
- 唯一管理者。(There is one administrator)
- 传输代价为0。(Transport cost is zero)
- 网络是同质的。(The network is homogeneous)
1.网络永远是可靠的(The network is reliable)
网络永远是可靠的是第一个谬论,你可以查看一下交换机的平均失败时间间隔(MTBFS, Mean Time Between Failure)。
如果你的应用程序是要长期稳定运行的,那么你将必定会遇见网络不可靠的问题。此外还有其他的问题,例如电源故障、有人剪断网线或者大量用户突然链接网络等等。那么硬件不能满足的时候,软件就需要相应的容错处理。
如果你跟外面公司合作,你对外提供服务。那么此时他们的链接行为不会收到你的控制,当有大量链接过来时,服务器将感受到DDOS攻击一样的链接。
这对你的设计有什么帮助?
- 在基础设施方面,你需要考虑冗余备份的硬件以及软件,来防止突发事件的产生。
- 在软件方面,你需要考虑如何保证信息可靠、有序的传输等问题。
在信息传输方面有多个规范,来保证传输信息的安全可靠。这方面必须要花精力去保证消息的完整、安全以及可靠。
总结起来,网络是不可靠的。这方面设计者必须要注意。
2.传输延迟为0
第二个谬论就是传输延迟为0。延迟就是数据从一个节点传输到另一个节点的时间。在LAN网络上,延迟相比着WAN网络比较小,但是仍然存在着。
延迟的问题要比宽带更加严重。如果你觉得可以将你的应用部署在LAN网络环境下,而不用考虑延迟的问题。那么你就想错了。
延迟是无法避免的,我们只能尽量减少网络上的传输。
3.带宽是无穷的
支持这个谬论的两个重要理由是:
- 带宽无限增长,我们传递的数据块也在不断的增加。
- 带宽较小时的丢包问题。
既然已知带宽不是无尽的,并且延迟是无法避免的,那么我们应该在每次传输时尽可能传递更多的数据。
4.网络是安全的
随着网络的不断扩大,网络越来越不安全。你需要多层次的解决方案来处理网络安全问题。
5.拓扑结构是不变的
在网络实验室中,网络的拓扑结构可能是不变的。但是在外界的网络中,网络拓扑结构是不断变化的。
这对我们的启示是,在我们的应用中采用位置透明性或者应用服务发现机制来动态查找对应的服务,而不要依赖特定的路由或者节点。
6.唯一的管理者
当你的系统规模较小并且在孤立的网络环境时,你采用唯一管理者方式可能不存在问题。但是在企业复杂的系统时,这种方式就存在很多问题。
在企业中IT团队可能有不同的管理者,感觉不同的功能需要。这是一种简单的解决方案。如果你的企业软件需要跟外界进行结合开发等,这时就会出现问题。这时简单的解决方案,会出现其他的管理者不会收到你的控制,并且它们会有自己的规则。
为了防止administrators的问题,我们需要注意:
- 在系统小的时候,就提供工具来监控系统操作
总结起来,当我们面对多administrator的时候,必然会收到administrator的约束,我们能做的就是帮助他们管理自己的应用。
7.传输代价为0
我们可以从多个方面去解释上面结论是谬误
其中一个我们从从应用层到传输层的数据传递,我们需要对数据进行编码,会消耗time and resources
第二个方式则是设置和运行网络都需要代价,我们需要很多很多money 买买买!
8.网络是同质的
网络是同构的,这是最后一个谬论。我们需要注意不用去依赖一些自营的协议,这样后续在集成的时候会遇到大麻烦。
总结
分布式系统虽然已经发展好多年了,但是面临的问题却一直是那么多,但是可怕的是好多架构师在设计时候却仍然忽略了其中的一些问题,希望上面的列举出来的谬论能帮助架构师在设计的时候,避免一些问题。