原文链接

标题可能有些误导,技术上说此文是Andrew Tanenbaum和David Wetherall关于RFC 1958的改变。此外,此文也简化了两位大师的思想(关于如何设计一个成功网络协议的原则)。

然而,我相信他们的思维大纲不但更具有普遍性,而且也适用于构建成功的产品,甚至包含了生活的哲理。

1.保证它能工作。不要发布设计或者标准直到多个原型已经成功的互相交互了。有太多时候,设计者一开始写了1000页的标准,使它通过了审核,然后发现它有着根深蒂固的缺陷而且不能工作。然后他们写了1.1版本的标准。这不是一个好主意。

2.保持简单。当你有疑惑的时候,使用最简单的解决方案。奥卡姆在14世纪的时候提出了这条原则(奥卡姆剃刀)。用现代人的话讲:如无必要,勿增实体。如果某一个特性不是最基本的,抛弃它,尤其当这个特性可以通过组合其他特性来达成的时候。

3.选择明确。如果有多种方法能够达成同一件事情,(只)选择一个。有两个或更多的方式去做同一件事情只会带来麻烦。标准通常有多种选择或者模式或者参数,只因为几个有权利的组织坚持各自坚持他们的方法才是最好的。设计者应该强烈地抵制这个趋势。果断对多选说NO。

4.使用模块化。这个原则直接导致了协议栈思想的产生,每一层协议都独立于其他层协议。通过这种方式,如果环境中某一个模块或者协议层发生改变,其他的部分将不会受到影响。

5.预估异构。不同的硬件,传输设备和应用程序都会出现在任何一个大型的网络当中。为了处理他们,网络设计必须保持简单,常规和灵活。

6.避免静态选项和参数。如果某些参数是必须的且是不固定的(比如:最大网络包长度),最好的方式是让发送者和接收者通过协商来得到一个值,而不是预先定义几个固定的选择。

7.追求好的设计;不要过分苛求完美。通常,设计者们都有一个不错的设计,但是这个设计却不能处理一些超乎常理的特殊情况。与其对设计修修补补,设计者们应该继续这个良好的设计,同时将担子交给那些有超乎常理需求的人自己去处理。

8.严于发送宽于接收。换句话说,发送那些严格遵从标准规范的包,但是容忍那些可能不完全遵守规范的回包,并且尝试去处理他们。

9.思考扩展性。如果一个系统要高效地处理数百万主机和数十亿用户,没有任何一个中央集权的数据库有能力承受的了,负载应该尽可能地均匀分布到所有可用的设备上。

10.考虑性能和开销。如果一个网络的能行低下或者开销高昂,那么没有人会去使用它。

iTran乐译参加活动,读好文章!