绪论
我们如何去编写在有软件错误的条件下有合理行为的软件呢?这是我这篇论文想要回答的核心问题。大型的系统往往在交付的时候还存在着许多软件错误,然而我们却奢望它们能够运行正常。
系统有不完善的环节,而我们又希望它可靠,这就对系统提出了一定的要求。这些要求是能够被满足的,要么在所采用的编程语言中,要么在应用程序所调用的标准库中。
在本文中,我会列举出我认为的可容错系统所必须具备的本质特性,我还将展示这些特征在我们的系统(Erlang/OTP)中如何被满足。
某些本质特性是在我们的编程语言(Erlang)中被满足的,而另外一些则是在用Erlang编写的库模块中被满足的。语言和库合起来构成了构建可靠软件系统的基础,使得即使存在编程错误,系统仍然能够按照合理的方式运行。
说了本论文是关于什么的,我也该说说本文是不关于什么的。本论文并没有详述作为构造可容错系统的构建块的诸多算法的细节,因为算法本身并不是本文所关注的重点,本文关注的是用以表达这些算法的编程语言。本文也不关注构建可容错系统在硬件方面和软件工程方面的要求。
本文真正关注的是软件的容错性在语言、库和操作系统方面的要求。Erlang属于一种纯消息传递语言——即一种基于独立性很强的并行进程的语言,我们的编程模型广泛使用了速错(fail-fast)进程。这项技术在构建可容错系统的硬件平台中被普遍使用,但是在软件设计方面却用得不多。这主要是因为传统的编程语言并不允许不同的软件模块以彼此互不干扰的方式存在。当前普遍使用的是多线程的编程模型,该模型中资源是共享的,这样就造成了线程很难真正隔离起来,就可能导致一个线程中的错误会传播到另一个线程中,这就破坏了系统内部的坚固性。
1
1.1 背景介绍
本文介绍的工作始于1981年的Ericsson计算机科学实验室(CSLab)。我是1985年加入CSLab的。这里介绍的是我在1981年至2003年间的工作,在此期间,我和我的同事们开发了Erlang编程语言和OTP,也用Elrang写过一些其它应用程序。
Erlang/OTP系统取得今天的成果,归功于许多人的集体努力。没有他们的出色才干和来自用户们的反馈,Erlang也不可能有今天的成就。由于系统包含如此之多的部分,所以很难准确地说到底是谁在什么时候做了什么,是谁最初提出了某一项革新思想。在致谢中我将尽我所能地对大家的每一份贡献致以谢意。
Erlang/OTP系统纪年表如下: