笔记系列

Erlang环境和顺序编程
Erlang并发编程
Erlang分布式编程
Yaws
Erlang/OTP

日期              变更说明

2014-12-21  A Outline, 1

Agenda

0 Scope

围绕OTP设计原则,分别记录行为模式、监督树概念、应用、发布和部署,以及[3]中一个产品级缓存解决方案。

1 OTP Design Principles

Erlang Doc: OTP Design Principles User's Guide

OTP设计原则阐述的是如何以进程、模块和目录组织Erlang代码。

1.1 监督树(Supervision Trees)

Erlang/OTP中监督树是一种进程组织模型,该模型的两个核心实体是:工作者(worker)监督者(supervisor)

工作者:执行计算类实际工作的进程;

监督者:监督工作者行为的进程,发生异常时可以重启工作者;

监督树:将代码按照工作者和监督者组织成层次结构,借此试图设计和实现高容错性的软件。

下面是一个监督树示例,正方形表示监督者,圆形表示工作者。

1.2 行为模式(Behaviours)

在监督树中,很多进程有着类似的结构,正式的说,它们的行为遵循类似的模式。例如,监督者之间的区别可能只是它们负责监督的工作者不同,工作者则表现出类似于server/client、有限状态机(finite state machine)或事件处理器(event handler)的基本行为。

Erlang/OTP给出的方案是将进程的代码分为两部分:一部分是通用的(由行为模块负责实现),另一部分是各进程的特殊处理部分(由回调(callback)模块负责实现)。

行为模块隶属于Erlang/OTP。标准的Erlang/OTP行为包括:

gen_server      实现server/client中的server

gen_fsm           实现有限状态机

gen_event       实现事件处理功能

supervisor       实现监督树中监督者

要实现监督者模式,只需要实现监督者行为模块导出的预先定义的一系列回调函数。有点类似于template method设计模式啊,更重要的是,Erlang/OTP负责管理诸如监督者进程与工作者进程通信、交互等复杂而枯燥的功能的代码实现、调试、产品级优化等等“脏活儿”,而我们只需要开开信息的关注于业务级的实现细节。

1.3 应用(Applications)

实现一些特定功能的组件在Erlang/OTP的词汇中被称为应用(applicaiton)。例如Mnesia、Debugger等。最小的Erlang/OTP系统由Kernel和STDLIB应用构成。

应用的概念适用于程序结构(进程)和目录结构(模块)。

最简单的一类应用不含任何进程,仅由函数模块构成,这类应用称为库应用(library application),例如STDLIB。

涉及进程的应用可以通过使用标准行为的监督树实现。

1.4 发布(Releases)

发布(release)是一个完整的系统,系统中包含Erlang/OTP应用和用户特定的应用。

如何在目标环境(target environment)中安装发布在系统原则的目标系统一节中阐述(见 Erlang Doc: System Principles User's Guide)。

1.5 发布处理(Release Handling)

发布处理的含义是在运行系统中如何在不同发布版本中升级/降级。

2 行为模式

3 应用

4监督树式容错

5 发布和部署

6 Erlang中的集成

参考文献

[1] Cesarini F., Thompson S.著,慕尼黑Isar工作组 杨剑译.

Erlang编程指南.

北京: 机械工业出版社.2011.

[2] Armstrong J.著,牛化成 译.

Erlang程序设计(2).(Programming Erlang, Second Edition – Software for a Concurrent World).

北京: 人民邮电出版社.2014.

[3] Logan M., Merritt E., Carlsson R.著,连城 译.

Erlang/OTP并发编程实战.(Erlang and OTP in Action).

北京: 人民邮电出版社.2012.

Code: https://github.com/erlware/Erlang-and-OTP-in-Action-Source

Erlang 104 OTP的更多相关文章

  1. Erlang Materials Outline

    Motivation 因The Erlang Run-Time System迟迟没有出版,不等了. 梳理一下学习Erlang过程中的学习笔记,以准备一个关于Erlang的small but tight ...

  2. Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令

    Erlang Rebar 使用指南之三:Rebar和OTP程序约定和命令 全文目录: https://github.com/rebar/rebar/wiki 本章位置: https://github. ...

  3. erlang OTP gen_server 图解分析

    http://www.hoterran.info/otp-gen_server-sourcecode 在阅读erlang的otp源码gen_server.erl的时候,一直想写点什么,用一种最好的方式 ...

  4. [Erlang 0115] 2014值得期待的Erlang两本新书

    在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份公布了这本书的写作 ...

  5. Erlang 102 Erlang并发编程

    笔记系列 Erlang环境和顺序编程Erlang并发编程Erlang分布式编程YawsErlang/OTP 日期              变更说明 2014-11-02 A outline 2014 ...

  6. 不是语言之争--Go vs Erlang

    因为 云巴 系统对高并发.低延迟的需求,我们对各个语言.平台做了很多的调研比较工作.这自然就包括致力于开发高并发应用的 Go 和 Erlang. 并发 Go 对高并发的支持通过 goroutine 实 ...

  7. Erlang官方站点

    YOUR ERLANG COMMUNITY SITE Welcome to erlangcentral.org, the Erlang community site where you can rea ...

  8. 2014值得期待的Erlang两本新书

    在2014年的开头就有这样一个令人振奋的好消息,Erlang有一本新书即将出版 <The Erlang Runtime System>,其作者happi在2013年3月份发布了这本书的写作 ...

  9. Go vs Erlang - 转

    From http://zhang.hu/go-vs-erlang/ Go vs Erlang 因为 云巴 系统对高并发.低延迟的需求,我们对各个语言.平台做了很多的调研比较工作.这自然就包括致力于开 ...

随机推荐

  1. (转) C/C++中const关键字详解

    文章转自  http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777416.html 为什么使用const?采用符号常量写出的代码更容易维 ...

  2. springMVC,mybatis配置事务

    首先应该对context:include-filter和context:exclude-filter有一个了解,include是包含这个,而不是只包含,下面会有例子看看: 这是我最开始配置的MVC的配 ...

  3. iOS开发 百度坐标点的计算

    BMKMapPoint point1 = BMKMapPointForCoordinate(_userGps); BMKMapPoint point2 = BMKMapPointForCoordina ...

  4. laravel Ajax post方式的使用

    以jquery ajax 的post的方式为例 验证邮箱输入格式是否正确 html <div class="fl"> <input type="emai ...

  5. LayoutInflater和inflate()

    LayoutInflater LayoutInflater抽象类是用来加载XML布局文件(UI界面)的. 作用: 1.对于一个没有被载入或者想要动态载入的界面,都需要使用LayoutInflater. ...

  6. Selenium WebDriver中一些鼠标和键盘事件的使用

    转自:http://www.ithov.com/linux/133271.shtml 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击 ...

  7. bugfree安装

    1.下载xampp文件:xampp-linux-x64-5.5.30-3-installer.run 2.安装此文件,用root账号安装,安装命令:./xampp-linux-x64-5.5.30-3 ...

  8. 读javascript高级程序设计09-BOM

    一.window 1.在全局作用域中定义的变量和函数会被归在window对象. var a=1,b=2; function add(a,b){ return a+b; } console.log(wi ...

  9. H5页面左图右边文字如何布局

    <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8&qu ...

  10. 20135203齐岳信息安全系统设计基础——实验四&实验五实验报告

    见20135217孙小博的博客:http://www.cnblogs.com/sunxiaobo/p/4991861.html