笔记系列
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