编写分布式的Erlang程序陷阱和对策(中文版)p37svenssoncn.pdf

编写分布式的Erlang程序陷阱和对策(中文版)p37svenssoncn.pdf

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编写分布式的Erlang程序陷阱和对策(中文版)p37svenssoncn.pdf

编写分布式的 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 然了,有源代码,如果那也算文档的话…… 2. 节点内编程 Erlang 节点内编程的基本工具可说是人所共知了:用send 和receive 来实现通信;用链接 (link) 和监视器(monitor)来构造健壮的、在单个进程失败时也不会崩溃的应用程序。 正如前文所说 ,链接 (link)和监视器(monitor)是编写具有高容错性的 Erlang 程序的基本工具 : 借助这两种语言特性, 一个进程终止时,它可以向另一个进程发送失败信息。在分布式应用开发 中有一个常见的抽象机制叫做失败侦测器(failure detector ),其用途跟 Erlang 的链接和监视器毫 无二致。 请注意 ,“链接和监视器”机制——监视同一节点上的另一个进程——并不保证被监视的进程在语 义上正确:被监视的进程有可能在等待一个永远不会到来的消息 ,这时它实际上等于已经死掉了, 但监视它的进程永远也不会收到“进程终止”的消息。为此(以及其他一些原因)有必要用计时器 (timer )来限制进程通信的等待时间,即便各个进程都在同一节点内。 下面我们将逐一展示节点内通信能够得到的基本保障。 2.1 基本消息传递保障:流语义 节点内消息传递的基本保障是:由一个进程发送给另一个进程的消息 ,只要消息能够送达而没有丢 失或重复 ,就必定是按发送顺序送达的。在这里 ,“将一条消息送达进程 P”意味着这条消息被放 入进程P 的收件箱 ;同时只要消息 m 被送达 P ,我们就说 P 收到了消息 m 的值——这并不代表 P 在此时用receive 语句从收

文档评论(0)

ziyouzizai + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档