Erlang语言与分布式编程

来源 :数字化用户 | 被引量 : 0次 | 上传用户:wwwman
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】Erlang语言是一种函数式语言,使用面向并发的编程方法。Erlang与分布式系统天性互相吻合,决定了使用Erlang开发分布式系统具有得天独厚的优势。本文主要介绍了Erlang语言的来源和特性,以及如何使用Erlang进行分布式编程,并分析了Erlang语言的应用前景。
  【关键词】Erlang 分布式 并发 编程
  一、引言
  在计算机多核化发展日新月异、“云计算”“云存储”异常火爆的今天,一些主流语言面向对象的程序设计语言(C++、JAVA、C#等)对并发和分布式程序的支持不是那么得心应手。越来越多的锁、信号量、线程、同步、互斥之类的概念让程序日益复杂,出错概率大增。
  为了适应并行计算和分布式应用的大趋势,Java 5.0引入了concurrency库,C++有了标准化的OpenMP和MPI,微软发布了Parrallel FX和MPI.NET等一系列产品。然而,这些亡羊补牢的手段却不能弥补它们的“先天不足”——即这些语言在创作时就没有把并行化的问题放到优先的位置上去考虑。而天生面向并发的Erlang语言很好地解决了这个问题。
  二、Erlang语言简介
  Erlang是一种“函数式语言(Functional programming,FP)”,使用的是面向并发编程(COP,Concurrency Oriented Programmi ng)的方法。
  1987年,Erlang语言创始人Joe Armstrong在在爱立信做电话网络方面的开发工作时,出于对高性能和并发的需求,在Prolog的基础上增加了并发处理和错误恢复,从而诞生了Erlang语言。
  Erlang语言非常有特色,并发、分布、容错贯穿于程序的始终,具有许多与其它语言不同的特性:
  (一)跨平台性
  Erlang运行时环境是一个虚拟机,类似Java虚拟机,这样的代码一经编译,同样可以随处运行。当然,如果你需要更高效的话,字节代码也可以编译成本地代码运行。
  (二)并发性
  Erlang可以非常快地创建和销毁进程,一个Erlang程序可以由多达几百万个超轻量级的进程组成,这些进程可以运行于单处理器、多核处理器或者处理器网络上。Erlang进程之间高度隔离,没有共享任何数据,只能通过消息传递来进行交互,并且这种消息传递也是非常迅捷的。
  消除了共享内存以及进程之间通过消息进行通信是Erlang最明显的优势之一,这一特点为进行并行与分布式应用的开发提供了非常好的基础。
  (三)分布式
  Erlang被设计用于运行在分布式环境下。一个Erlang虚拟机作为一个Erlang节点。一个分布式Erlang系统是由多个Erlang节点组成的网络。使用Erlang来编写分布式应用要简单的多,因为它的分布式机制是透明的:对于程序来说并不知道自己是在分布式运行。
  (四)健壮性
  Erlang可以说是一门为健壮而生动语言。它不像其它语言一样假设不会发生错误,而是假定错误随时可能发生,并随时准备修正错误。
  在一个分布式系统中,如果一个进程出错,让这个进程自己修复错误有时并不可行,有时节点可能彻底崩溃(死机),因此将错误交给其他进程去处理是更恰当的选择。
  Erlang错误侦测的工作机制正是如此,通过进程间的相互“链接”来实现进程监控(这些进程可以运行于不同节点之上)机制,将错误进行分层处理,从而实现构造“容错系统”。Erlang引入了“速错(Fail fast)”的理念,在一个进程出错时不会试图自行处理,而是直接退出,并发出错误消息让其他进程进行错误处理、故障恢复等工作。
  (五)软实时性
  Erlang支持可编程的“软”实时系统,这种系统需要反应时间在毫秒级。而在这种系统中,长时间的垃圾收集(garbage collection)延迟是无法接受的,因此Erlang使用了递增式垃圾收集技术。
  (六)热部署(Hot swap)
  有些系统是不能够由于软件维护而停止运行的。Erlang允许程序代码在系统运行中被修改。旧第代码能被逐步淘汰而后被新代码替换。在此过渡期间,新旧代码是共存的。这也使得安装bug补丁、系统升级而不干扰系统运行成为了可能。
  (七)递增式代码装载
  用户能够控制代码如何被装载的细节。在嵌入式系统中,所有代码通常是在启动时就被完全装载。而在开发系统中,代码是按需装载的,甚至在系统运行时被装载的。如果测试到了未覆盖的bug,那么只有具有bug的代码需要被替换。
  (八)外部接口
  Erlang进程与外部世界之间的通讯机制与Erlang进程之间相同的消息传送机制相同。这种机制被用于和操作系统通讯、与其它语言编写的程序交互。如果出于高效率的需要,这种机制的一个特殊版本也允许例如C程序这样的代码直接链接到Erlang运行时系统中来。
  三、Erlang语言的分布式编程
  (一)分布式系统的特性
  George Coulouris认为:分布式系统是由位于网络中的一些计算机组成的系统,这些网络中的计算机之间只能通过传递消息来进行沟通和协调。Andrew S.Tanenbaum说:一个分布式系统是一些独立计算机的集合,但是对这个系统的用户来说,系统就像一台计算机一样。
  尽管分布式系统还没有一个公认令人满意的定义,但是所有分布式系统都有以下两个特点:一、系统的各个节点(计算机)是相互独立的;二、各个节点之间只能通过消息传递来进行沟通和协调。可以看到,分布式系统的这两个特点也正是Erlang程序的特点:各进程相互独立,且只能通过消息传递来进行交互。   Erlang与分布式系统天性互相吻合,决定了使用Erlang开发分布式系统具有得天独厚的优势。Erlang天生面向并发,在Erlang开发的分布式系统增加和删除节点非常简便,具有良好的伸缩性。
  (二)Erlang语言分布式编程的两种基本模型
  1. 分布式Erlang
  这种模型用于在一个紧密耦合的计算机集群上编写程序,几乎不需要额外操作,一切就像在单节点编程时一样:可以在任何一个节点创建进程,所有的消息传递和错误处理原语都可以照搬。分布式Erlang运行于一个可信任的环境中——因为任何节点都可以运行其他节点上的操作,这就需要一个高度信任的网络环境。
  2. 基于套接字的分布式应用
  使用TCP/IP套接字,可以编写运行在非信任环境中的分布式应用程序。这种编程模型的功能比分布式Erlang要弱一些,但是却更加可靠。
  四、Erlang语言应用前景
  Erlang已经有二十多年历史,利用它也成功地实现了一批项目,例如:Facebook用它重写了超大型聊天系统;Amazon用它开发了SimpleDB云存储系统;Yahoo!用它开发了Deliciou2.0……但是,Erlang迄今为止还是一门小众语言。
  Erlang至今未能广泛应用既有传统程序员固有的面向对象编程思维难以适应COP编程模式的原因,也有Erlang语言本身语法“怪异”,难以学习和理解等方面的原因。
  除了Erlang,还有其它一些面向并发的编程语言,例如Scala、Go、F#等。这些语言各有特点,很难分出高下。尽管不能断定Erlang是不是在并行领域是最优的语言,但至少目前来说Erlang是比较好的选择。Erlang凭借20多年的发展经验,在支持高并发、浓缩性和数据的持续性存储都有相当多的成熟库(OTP)和开源软件,使得它有极高的实用价值。此外,Erlang还有非常活跃和成熟的社区为开发者解疑释惑。
  目前,随着对高并发、分布部署、持续服务的需求日益增加,以及多核CPU的全面普及,Erlang必将得到越来越多广泛的应用。
  参考文献:
  [1]Armstrong Joe. Programming erlang [M]. Pragmatic Bookshelf, 2007.
  [2]Armstrong Joe. A history of erlang [C]. Proceedings of the third ACM SIGPLAN conference on History of programming languages. ACM, 2007:6-1.
  [3]Vinoski Steve. Concurrency and message passing in erlang [J]. 2012.
  [4]Armstrong Joe, Virding Robert, Wikstr Claes, Williams Mike. Concurrent programming in erlang [J]. 1996.
  [5]J?rleberg Anders, Nilsson Kim. Go, f# and erlang [J]. 2012.
  [6]陈寅秋. Erlang——一种支持大规模并发处理的高可靠性编程语言 [J]. 电脑与电信, 2009, 11: 030.
其他文献
【摘 要】对基于分子滤波的声图像分析进行了深入分析,同样对分析的办法及目的进行了探讨。  【关键词】分子滤波 声图像 分析  运动标点的检测与分析是视觉应用范围的一个重要的问题,对于视声觉范围而言,最后的目的也是要完成对水下标点的分析和确定。参考分子滤波的发展形势和分子滤波分析法容易完毕和强鲁棒性等优点,所以本文只对基于分子滤波的分析算法进行了研讨。  运动标点分析的目的即是找到同一标点在不同帧中
期刊
【摘 要】随着社会经济的发展,自动录播系统在在教学中的应用越来越广泛,自动录播系统可以将课堂教学过程进行网络直播,提高优质教学资源的共享程度和教育资源的利用效率。  【关键词】录播系统 目标定位 关键技术  一、 自动录播系统的关键技术  (一)目标跟踪定位技术  目标跟踪就是在图序列中识别出目标并对其进行精确定位,以获取目标的运动的各个参数,进而对运动目标进行处理与分析。目前,目标跟踪定位主要有
期刊
【摘 要】2000年国家信息产业部颁布了计算机信息系统集成资质管理制度,并制定了《计算机信息系统集成资质管理办法》,计算机系统集成是国际信息服务行业中发展势头最快的一个行业。本文从计算机系统集成概念的基础上,进一步分析探究计算机系统集成的特点,并提出了计算机系统集成在未来行业应用中的发展方向。  【关键词】计算机系统集成 管理办法 发展方向  随着社会的信息化、网络化进一步发展,计算机系统集成,简
期刊
【摘 要】ERP系统作为现代企业计算机管理中信息技术管理应用的一种,在企业的财务管理和财会变化中发挥着越来越重要的作用。随着当下企业竞争环境复杂多变,企业需不断加强财务管理的机制、体制构建。本文以ERP系统下的财务变化以及风险管理措施管控为目标,结合ERP系统下系统财务会计的变化发展现状,对财务管理中风险管理措施进行了分析及探讨,以期增强整体竞争实力。  【关键词】ERP系统 财会变化 风险管控 
期刊
【摘 要】计算机网络框架下,文件管理也愈来愈趋向信息化、网络化,大量的信息与数据需要进行系统化的整理收集与存储,这些工作只有在计算机系统中才能够得到精确完成,所以设计一个安全可行的网络文件管理系统式必要的,php技术基础上的系统式有众多优势的,本文将集中探讨基于这一技术的网络文件管理系统的设计。  【关键词】php技术 网络文件管理 系统设计  一、文件管理现状  就目前的文件管理来说,主要有三种
期刊
【摘 要】基于CBSE技术的发展,在SOFA、Fractal等学术型构件模型中对各种先进功能与特性的支持也较为成熟,但在主流工业构件模型的技术文档中鲜有对这些先进技术的应用。本文分析了几种学术模型的性能与发展,并以两种较为成熟的学术构件模型SOFA、Fractal为基础,对比它们与主流工业模型之间的差异并分析其原因,对构件技术更进一步的发展进行展望,以期促使CBSE技术得到更好更快的发展。  【关
期刊
【摘 要】高校毕业生就业难已经成为亟待解决的问题。采取一定的方法来缓解和解决就业难的问题具有重要意义。高校毕业生求职管理系统就是专门应对这一问题而开发设计的。本文就该系统设计的一些基础问题进行论述,其中包括:必要性分析 可行性分析以及所用到的一些关键技术的分析。通过分析对高校毕业生求职管理系统会遇到的各种问题进行总结,以便会其设计以及进一步的开发提供一定的理论基础。  【关键词】高校毕业生 就业管
期刊
【摘 要】随着证券市场的急速扩张,新的证券业务不断推出,证券行业对于IT设备、系统、基础设施和管理的需求不断膨胀,原有的IT整体技术架构出现了IT设备的资源利用率偏低、数据中心的业务连续性和灾备恢复无法满足业务需求等问题。而虚拟化的出现正好可以解决这些难题。本文首先介绍了虚拟化技术,之后介绍了证券市场应用虚拟化技术的意义,最后具体说明了虚拟化技术在证券公司IT系统中的应用。  【关键词】虚拟技术
期刊
【摘 要】本文主要介绍了乡镇数字电视机顶盒的概况,分析了有线数字电视机顶盒系统的常见的一些故障,并就目前机顶盒系统存在的这些故障,提出了作者对运营商进一步提高服务质量的看法和建议,本文对我过当前各地区乡镇数字电视机顶盒系统故障保护具有是十分重要的参考意义。  【关键词】数字电视 机顶盒 故障 分析  一、数字电视机顶盒简介  数字电视机顶盒实质上就是一种数字电视信号的转换设备,即把经过数字化压缩的
期刊
【摘 要】ViBe算法是实时性和鲁棒性都较好的一种运动检测算法。采用一帧对背景建模,速度快,但是ViBe背景建模的高速性的同时也有缺陷,一帧图片不可能良好的表现出背景,所建的背景模型中具有前景车辆运动物体,虽然背景的模型不断更新,背景里包含的前景误差会慢慢消除掉,但是短时间内对车辆的运动检测还是照成干扰,影响测量结果,造成不良的结果。本文提出了边缘特征与ViBe算法的结合,能良好的去除因为把前景当
期刊