这是一本罕见的站在核心设计者而非普通开发者角度介绍 Erlang/OTP 系统的书籍。两位作者均是深耕分布式计算领域超过20年的专家。本书内容兼具深度与广度,不仅带领读者通过一步步实践的方式深入剖析了 Erlang/OTP 中各类核心进程的行为模式的设计原理,并且还介绍了特殊进程、自定义行为模式、发行包制作等不错主题。除此之外,还用了大量篇幅向读者介绍了 Erlang/OTP 系统中的设计原则、架构分布式系统的方法,以及在此基础上实现容错和规模伸缩所需了解的相关知识。对于任何一位渴望基于 Erlang/OTP 构建出商业级的分布式、高伸缩性、容错型系统的开发者,本书都是不容错过的经典之作。
章 概述1
定义问题2
OTP4
Erlang6
工具和库7
系统设计原则9
Erlang节点10
分布式、基础设施、多核11
总结12
通过本书你将学到什么13
第2章 Erlang.简介.18
递归与模式匹配18
受函数式的影响22
玩转匿名函数22
列表推导:生成与测试23
进程与消息传递25
不怕出错30
用于监督的链接与监视器31
链接31
监视器33
记录34
映射组37
宏38
模块升级39
ETS:Erlang元素存储41
分布式Erlang44
命名与通信45
节点间的连接与可见性45
总结47
接下来是什么47
第3章 行为模式.49
进程的骨架49
设计模式52
回调模块53
抽取出通用的行为模式56
启动server57
client函数60
server循环62
server内部函数64
通用服务器65
消息传递:冰山之下68
总结71
接下来是什么72
第4章 通用型服务器.gen_server.73
gen_server73
behavior指令74
启动一个server75
消息传递77
同步式消息传递78
异步式消息传递79
其他消息81
未处理的消息82
同步客户端83
终止84
调用超时86
死锁89
通用型server的超时问题90
使behavior休眠92
全局化92
链接behavior94
总结94
接下来是什么95
第5章 深入控制OTP行为模式96
sys模块96
追踪与记录96
系统消息98
你自己的追踪函数98
统计信息和当前状态99
sys模块总结102
分裂时的可选项103
内存管理与垃圾回收104
分裂时应该避免使用的可选项108
超时109
总结109
接下来是什么109
第6章 有限状态机.110
Erlang风格的有限状态机111
CoffeeFSM112
硬件桩114
Erlang版咖啡机114
gen_fsm118
一个基于行为模式的例子119
启动FSM119
发送事件123
终止132
总结133
亲力亲为134
电话控制器134
让我们测试一下136
接下来是什么138
第7章 事件处理器.139
事件139
通用事件管理器/处理器141
启动/停止事件管理器141
添加事件处理器142
删除事件处理器144
发送同步的或异步的事件145
获取数据148
对错误以及无效返回值的处理150
交换事件处理器152
融会贯通154
SASL警报处理器157
总结159
接下来是什么159
第8章 监督者160
监督树161
OTP监督者165
监督者行为模式166
启动监督者166
监督者规格169
动态子进程176
非OTP兼容进程184
可伸缩性和短期进程186
确定性同步启动187
测试你的监督策略188
与传统方法相比又如何190
总结190
接下来是什么191
第9章 OTP.application192
OTPapplication是如何运行的193
OTPapplication的结构194
回调模块198
启动和停止application198
application资源文件202
基站控制器的application文件204
启动application205
环境变量208
application的类型与终止策略210
分布式application211
分阶段启动215
内含型application217
内含型application的分阶段启动217
将监督者与application组合到一起219
SASL应用220
进度报告224
错误报告225
崩溃报告226
监督者报告227
总结228
接下来是什么229
0章 基于特殊进程打造自己的behavior230
特殊进程230
互斥体231
启动特殊进程232
互斥体的状态235
处理退出236
系统消息237
跟踪与日志事件238
合在一起239
动态模块和休眠243
属于你自己的behavior244
创建behavior时的要求245
一个处理TCP流的例子245
总结249
接下来是什么250
1章 系统原则与发行包制作.251
系统原则252
发行包目录结构253
发行包资源文件257
创建发行包260
创建boot文件262
打包发行包271
启动脚本以及目标上的配置275
参数和标志277
init模块289
rebar3290
生成一个rebar3发行包项目292
使用rebar3创建发行包295
使用rebar3处理制作发行包时的项目依赖问题298
总结300
接下来是什么304
2章 发行包升级305
软件升级305
个版本的咖啡机FSM308
添加一个新状态311
为发行包创建升级314
负责升级的代码318
应用程序升级文件322
高级指令325
发行包升级文件328
低级指令330
安装升级332
发行包处理器334
升级环境变量338
升级特殊进程338
在分布式环境下升级339
升级模拟器和核心application340
使用Rebar3进行升级341
总结344
接下来是什么346
3章 分布式架构347
节点类型与家族348
联网351
分布式Erlang353
套接字与SSL359
面向服务和微服务的架构361
点对点362
接口364
总结366
接下来是什么367
4章 永不停止的系统368
可用性368
容错369
弹性370
可靠性371
数据共享375
一致性和可用性之间的权衡383
总结384
接下来是什么385
5章 水平规模伸缩386
水平规模伸缩与垂直规模伸缩386
容量规划390
容量测试392
平衡你的系统394
找寻瓶颈396
系统蓝图398
负载调节与背压399
总结401
接下来是什么403
6章 监视与抢救性支持404
监视405
日志406
指标411
警报414
抢救性支持416
总结418
接下来是什么420
索引421