编写分布式的 Erlang 程序:陷阱和对策
Hans Svensson
Dept. of Computer Science and Engineering
Chalmers University of Technology
Gothenburg, Sweden
hanssv@cs.chalmers.se
Lars- Åke Fredlund
*
Facultad de Informatica, Universidad Politecnica de
Madrid, Spain
fred@babel.ls.fi.upm.es
摘要
为了在 Erlang 运行时系统基础上开发更可靠的分布式系统和算法,我们研究了 Erlang 编程语言中
分布式的部分。使用 Erlang,把一个运行在单个节点上的程序转换成完全分布式(运行在多个节点
上)的应用程序可谓易如反掌(只需要修改对 spawn 函数的调用,使之在不同节点上产生进程);
但尽管如此,Erlang 语言和 API 中仍然有一些阴暗的角落可能在引入分布式运算时带来问题。在本
文中,我们将介绍几个这样的陷阱:在这些地方,取决于进程是否运行在同一个节点上,进程间通
信的语义会有显著的差异。我们同时还提供了一些关于“编写安全的分布式系统”的指导原则。
分类和主题描述
D.3.3
【编程语言】:
语言构造和特性
关键字:
可靠性
1.
简介
我们希望能够编写和调试用到 Erlang 的分布式进程通信机制的分布式算法,为此我们必须清楚
Erlang 的分布机制对进程间通信提供了哪些保障——要判断这些保障是否与我们的分布式算法的各
种需求相符,首先必须了解它们。很大部分的研究工作都是在为 Erlang 编程语言(包括分布机制)
开发形式化语义
[CS05]
。在实现“分布式 Erlang”的模型检查器
[FS07]
时,我们有几处无法完全肯定形式
化语义是否精确描述了 Erlang 分布层的行为。但由于并非所有关于分布式支持的重要部分都有文
档记录
1
,做一些试探工作自然是必不可少的。我们编写了大量程序来测试运行时系统的各种基本
特性,同时对运行时系统的源代码也做了检验,从而逐渐勾勒出 Erlang 语言中分布式部分的真实
行为。
我们得到的成果是另一篇关于精化 Erlang 分布式语义的论文
[SF07]
,以及本文:我们将在文中着重关
注 Erlang 目前提供的分布式支持带来的实际效果——我们将展示哪些代码会出错,并就“如何借
助 Erlang 的分布机制编写可靠的分布式应用”提出我们的建议。
*
该作者由西班牙教育与科学部提供的拉蒙卡哈基金(Ramón y Cajal grant)和
DESEFIOS(TIN2006-15660-C02-02)、PROMESAS(S-0505/TIC/0407)等项目共同资助。
1
当然了,有源代码,如果那也算文档的话……