![](https://csdnimg.cn/release/download_crawler_static/1045718/bg2.jpg)
译 感
近年来,“多核”、“分布式计算”、“集群计算”、“大并发量处理”等名词逐
步从实验室中的概念走向了大众社会的应用,并给许多公司带来了商业上的巨大
成功。一个新的信息处理时代已经悄然来临,召唤着新的适应这个时代的软件开
发方法和工具。其实早在 1986 年,在 Ericsson 就有一些专家开始了如何编写出
可靠的分布式系统方面的探索和研究。这些研究成果,成就了可靠性达到
99.9999999%的目前世界上最复杂的 ATM 交换机,并给我们带来了 Erlang/OTP
这套开源的开发工具和平台。Joe Armstrong 先生就是 Erlang 的主要发明人,而
本文就是 Joe Armstrong 的博士论文。
之初学习 Erlang 编程的时候,为了深入了解一下 Erlang 的设计哲学,我决
定把这篇论文精读一遍。我想无一遗漏地精读的方式,就是把它翻译一回。邓辉
先生(《敏捷软件开发——原则、模式与实践》中文版译者)鼓励我说,翻译吧,
也算是给国内的 Erlang 这个小圈子做点贡献。于是似乎有了一些责任。既然是
要公开出来的,任何细节就更不能毛糙了,也就迫使我查阅了许多背景资料,而
这些论文以外的知识对于我平时的 Erlang 编程颇有助益,算是意外之得了。
跟其他的理工类博士论文不一样,本论文并没有堆砌大量的公式推导,而是
以平铺直叙的方式,在解答“如何在存在软件错误的情况下编写出具有合理行为
的软件?”这一核心问题的过程中,详细地阐述了 Erlang/OTP 的设计哲学。论
文分析了构建可靠的分布式系统的一些系统需求、语言需求、库需求,介绍了完
全针对这些需求而打造的 JAM 系统、Erlang 语言和 OTP 开发库。本论文的重点
不在于 JAM 的设计,不在于 Erlang 语言的描述,也不在于 OTP 库的介绍,虽然
这些方面都有很多值得讨论的课题。本论文把重点放在了可容错的架构上,如何
构建软件运行的模型?如何进行错误检测和恢复?如何实际编写出可容错的系
统?本文的重点在于探讨这一系列的设计思想的问题。这是一门软件开发哲学,
也是一个软件世界观。
不得不提的是“一切皆进程”的 Erlang 世界观。作者把软件所有要处理的
事务划分成一系列层次化的任务,每个任务有一个“强隔离的进程”来执行,进
程之间没有任何共享状态,只能通过“消息传递”来通信。这种“强隔离的进程”
![](https://csdnimg.cn/release/download_crawler_static/1045718/bg3.jpg)
不仅可以更真实地描述现实世界的信息处理过程,还成为软件错误发生时保护系
统的可靠性的最有力模型。
也要说说本论文关于故障处理的论述。由于业务处理都在一个个“强隔离的
进程”中——作者把它们称为“工作者”,就防止了一个进程出错会传播到其他
的进程。业务处理进程的运行状况由另外专门的进程来看护——作者把它们称为
“监视者”。“工作者”和“监视者”组成一个层次化的监督模型,使得一个进程
发生故障时,整个系统可以作出相应的调整,保障系统最大限度地提供服务。
还要说说 behaviour。本论文无意中介绍了 OTP 库集中的 behaviour 库的设
计思想,即将程序的并发处理和顺序化处理分开。本文还以 gen_server 为例,展
示了如何把并发部分抽象出来,如何让程序从最初的“脆弱”演化到“可容错”,
体味一下,会受到启发。
罢了罢了,关于本论文的内容我不能说太多,言多必失,恐怕淡漠了任何一
方面,也许每个人看到的重点都不一样。总之,非常感谢 Joe Armstrong 给我们
奉献了这篇论文。
在本译稿完成的时候,Joe Armstrong 关于 Erlang 编程的的新书《Programming
Erlang》也已经出版面世了,引起了软件开发主流们不小的震动,Ralph Johnson
甚至预言 Erlang 会是下一个 Java。不管这种预言会不会成真,想深入学习 Erlang
编程的朋友一定不要错过这部伟大的著作。
非常感谢邓辉先生,他详细地审阅了本译文的初稿,提出了许多宝贵的意见,
使得本译文更贴合论文原意。
无论我怎么努力,终究水平有限,肯定还存在许多对原文理解错误或中文表
达欠妥之处,恳请读者指正。译者联系方式:
sanderisme@hotmail.com。
段先德
2007 年 9 月 上海
![](https://csdnimg.cn/release/download_crawler_static/1045718/bg4.jpg)
面对软件错误构建可靠的
分布式系统
(Making reliable distributed systems in the presence of software errors)
2003 年 11 月 20 日最终修订版
Joe Armstrong
本论文作为工学博士
学位之要件提呈皇家技术研究院
瑞典·斯德哥尔摩
皇家技术研究院
2003 年 12 月
微电子与信息技术学部
![](https://csdnimg.cn/release/download_crawler_static/1045718/bg5.jpg)
献给
Helen
、
Thomas
和
Claire
I
评论0