`

《面向软件错误构建可靠的分布式系统》读后感

阅读更多
这篇文档是erlang创始者之一的Joe Armstrong所编写的博士论文,由段先德翻译、邓辉审校,感兴趣的同学可以从以下地址下载:
http://erlang-china.org/study/joe-armstrong_thesis_cn.html
Erlang在业界已经引起了不小的轰动,通读了下这篇博士论文,翻译的质量很高,:),所以读起来非常的顺畅,论文的内容对于erlang初学者而言绝对是堪称经典,写的非常的不错,点出了erlang的强项并详细的进行了解释。
Erlang以天生的支持并发、分布式和容错而闻名,由于erlang的诞生是为交换机而服务的,因此在并发、分布式、容错、动态代码升级等方面是实现的非常好的,其目前主要是应用在erission的交换机上,这对于erlang的那些天生的特性也是个很好的证明。
通过阅读这篇博士论文,让我对了erlang有了部分的认识,由于目前尚未实践过,只能根据论文本身对自己理解的erlang做个阐述。
Erlang采用的是虚拟机的方式,这个虚拟机和java的虚拟机类似的地方在于隔离了和操作系统相关的语言运行环境,也就是说基于erlang编写的程序是可以在所有操作系统中运行的,不同的地方在于erlang在这个虚拟机中还实现了进程管理、进程通讯等非常核心的技术,erlang的进程采用的并不是操作系统的进程,因此基于erlang编写的程序并不会因为每种操作系统的进程、进程通讯实现的机制不同而改动,正是因为这些,使得基于erlang可以很容易的编写跨操作系统的高并发、容错、可靠的分布式系统,来看看erlang对于这几个关键字是怎么支撑和理解的:
1、分布式
      分布式的支持对于所有的大型系统而言都是非常重要的,分布式涉及到的问题主要是远程通讯,Erlang本身已很好的实现了这个部分,在erlang中通讯的单位是进程,erlang已很好的透明化的处理了本地进程通讯和远程进程通讯,也就是说你可以像本地进程通讯一样的方式去进行远程进程通讯,在erlang中进程的通讯基于消息的方式,有点像MQ之类的东西。
2、高并发
      高并发这块通常采取的支撑方法是多进程的并行处理,在erlang中非常强调的一个原则就是进程的创建和销毁要非常容易,也就是说是不耗多少资源的,由于erlang中的进程并不是操作系统的进程,因此在支持高并发时就比较容易了,例如webserver,可以每接收一个请求就创建一个进程来进行并行处理,而同时由于erlang会合理的去分配这些进程对于CPU的抢占,避免出现某进程耗住CPU的现象。
3、容错
      容错首先要做到的是错误的隔离,erlang强调每个处理的单元都是进程,同时erlang要求进程间不共享任何资源,例如共享内存等,进程间仅通过消息来进行交互,因此某个进程出错自然是不会造成其他进程错误的,在进程出错时,erlang推荐的是采用速错(fast on fail)的方式,也就是迅速停止这个进程的运行,这样做是为了避免这个进程错误的执行造成更多的错误。
      容错方面,erlang推荐的实践方法是专门编写一个监督进程,这个进程负责接收被监督进程发出的错误的消息,并根据错误的情况来进行纠错,重启进程,或者将该进程恢复至其他的机器上去执行。
4、可靠

      可靠的分布式系统,这部分对于我的触动比较大,因为之前一直做这方面的事情,在论文中说到了很关键的一点,目前在基于面向对象的语言实现可靠的分布式系统时,多数是基于类似MQ的东西来实现的,在基于这个实现时,要做到可靠,基于的基础是消息的传递是可靠的,当然,erlang也是基于消息传递来实现分布式通讯的,但它的思路不同,它不认为消息的传递是可靠的,那么它是怎么来做到可靠的呢,是基于进程调用时构建的一个进程链的方式,进程链上的任意进程的错误都可通知到相关的进程,这样的话消息是否传递到相应的目的进程其实是很容易判断的,:),这个思路一定程度上颠覆了MQ中一直采用的发送--回执的方式,不过不同的也仅在于现在不用按通讯的方式去发回执,但事实上这个回执还是存在的。
从上面这几个特性可以看出,erlang确实挺吸引人,可以试用试用,不要告诉我用c也可以实现这些,何必冒出一种新语言去学习呢,没错,你是可以用c去实现,但那不是要自己写吗,除非你觉得自己在高并发、容错、分布式这些的理解上比这些博士还强,呵呵,不过就像论文中说的,erlang也还有很多需要发展的方面,例如如何更好的与其他语言的程序通讯。
在这篇erlang博士论文中还能学到的东西有很多,如构建并发式系统时应将并发、持久存储、进程消息传递、进程错误处理这些和应用系统的实现交由两组不同的人来实现,使得开发应用的人可以无需关注程序该怎么去支持高并发、怎么去和别的进程通讯什么的,和spring的pojo enhanced的概念是相同的。
和OSGi一样,也不一定就用erlang去实现实际的系统,但它为我们提供的这几点的最佳实践是值得学习的。
分享到:
评论

相关推荐

    面向软件错误构建可靠的分布式系统

    本论文所描述的成果源于1981年开始的一个研究项目,该项目的目的是探索更好的编写电信应用软件的方法。...我们假设这些程序不可避免地会含有错误,进而寻求在软件包含错误的情况下构建可靠系统的方法。

    面对软件错误构建可靠的分布式系统

    系统存在不完善的环节,但是我们希望我们的系统可靠,矛盾的要求,满足的条件两种解决方案,语言本身或者是方法库 在ERLANG中,对于上述的问题的解决方式采用语言+库一起作用的方式来解决,满足在程序有错误的情况下...

    【清华】 软件工程(完) 视频.txt

    《软件工程(原书第9版)》是系统介绍软件工程理论的经典教材,自1982年初版以来,随着软件工程学科的不断发展,不断更新版本,影响了一代又一代软件工程人才,对学科本身也产生了重大影响。本版保留了上一版中的软件...

    计算机毕业设计 - JAVA002打飞机游戏设计(程序+说明+论文),保证可靠运行

    Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。 5. 健壮性 Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存...

    写给大家看的面向对象编程书(第3版).[美]Matt Weisfeld(带详细书签).pdf

    此外,本书还讨论了各种与面向对象概念密切相关的应用主题,包括XML、UML建模语言、持久存储、分布式计算和客户/服务器技术等。  本书内容精炼,示例简单明了,适合各层次面向对象开发人员阅读,也是高校相关专业...

    第七章-《大数据导论》大数据处理平台.pdf

    数据复制多份存放不同节点以增加可用性和可靠性 特点:高容错性 + 高扩展性 Apache Hadoop Apache软件基金会下面的一个开源项目 一个分布式系统基础框架 HDFS: Hadoop分布式文件系统,负责数据存储 MapReduce:一种...

    matlab图代码-rsd-engineeringcourse:研究软件工程课程的课程材料

    内容:在本课程中,您将不只是编程,而是学习如何在协作环境中构建可靠,易读,高效的研究软件。 重点在于有效构建和维护复杂代码的实用技术,技巧和技术。 这是一门简短的课程(5个半天中需要15个小时),是密集而...

    基于JAVA超级玛丽游戏GUL 设计软件源码+WORD毕业论文文档.zip

    Java建立在TCP/IP网络平台上,提供了用HTTP和FTP协议传送和接收信息的库函数,使用其相关技术可以十分方便的构建分布式应用系统。 5. 健壮性 Java致力与检查程序在编译和运行时的错误,并自动回收内存,减少了内存...

    introducing erlang

    ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。 ● 热代码升级-Erlang允许程序代码在运行系统中被修改。...

    erlang-18.3.4.7-1.el6.x86_64.rpm

    ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。 ● 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。 ● 热代码升级-Erlang允许程序代码在运行系统中被修改。...

    Erlang安装手册

     ● 健壮性 - Erlang具有多种基本的错误检测能力,它们能够用于构建容错系统。  ● 软实时性- Erlang支持可编程的“软”实时系统,使用了递增式垃圾收集技术。  ● 热代码升级-Erlang允许程序代码在运行系统中...

    Java课件pptJava的学习资料

    7)安全(用Java可以构建防病毒和防篡改的系统) 9) 动态(Java可随意增加新的方法以及实例变量,而客户端却不需做任何的更改) 10)体系结构中立(字节码与计算机体系结构无关,只要存在运行时系统,可在多种处理器上...

    核心Java笔记(高清晰,自己亲自制作)

    7)安全(用Java可以构建防病毒和防篡改的系统) 9) 动态(Java可随意增加新的方法以及实例变量,而客户端却不需做任何的更改) 10)体系结构中立(字节码与计算机体系结构无关,只要存在运行时系统,可在多种处理器上...

    python-django:Django 框架的 OpenTracing 检测

    一旦生产系统应对真正的并发或拆分成许多服务,关键(以前很容易)的任务就会变得困难:面向用户的延迟优化、后端错误的根本原因分析、关于现在分布式系统的不同部分的通信等. 分布式跟踪从开始到完成从移动/浏览器...

    JAVA上百实例源码以及开源项目

    2个目标文件,FTP的目标是:(1)提高文件的共享性(计算机程序和/或数据),(2)鼓励间接地(通过程序)使用远程计算机,(3)保护用户因主机之间的文件存储系统导致的变化,(4)为了可靠和高效地传输,虽然用户...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。...

    基于J2EE框架的个人博客系统项目毕业设计论...

    Java是一门各方面性能都很好的编程语言,它的基本特点是简单、面向对象、分布式、解释的、健壮的、安全的、结构中立的、可移植的、性能很优异的、多线程的、动态的,特别适合在Internet环境上开发的应用系统。...

    Visual Basic 2008 2010 入门经典(第5版)5/5

    完整清晰 PDF 扫描文档 这个PDF文件是我花钱买来的,现在为了挣积分,拿出来与大家分享!! 书名:Visual Basic 2008入门经典(第5版...多年来,Thearon从事多种系统的开发工作,包括大型机系统和客户机—服务器系统。

    Visual Basic 2008 2010 入门经典(第5版)3/5

    完整清晰 PDF 扫描文档 这个PDF文件是我花钱买来的,现在为了挣积分,拿出来与大家分享!! 书名:Visual Basic 2008入门经典(第5版...多年来,Thearon从事多种系统的开发工作,包括大型机系统和客户机—服务器系统。

Global site tag (gtag.js) - Google Analytics