OTP监控树笔记
这是Learn You Some Erlang中的Building an Applications with Otp的笔记.
在文中, OTP被戏称为Onion Theory Platform, 监控树像洋葱一样, 一层又一层.
OTP的哲学是工人-监工, 工作进程做错事就让它死掉, 监督进程再开启新的工作进程来干活. 这样做有个让人觉得很麻烦的问题: 工作进程死掉了, 它的状态怎么办? 文中进行了讨论. 状态可以分成三类:
-
静态的状态. 这从配置文件读回来就可以, 没什么问题.
-
动态但可重新获取的状态. 就是那些可以利用初始状态计算而来的东西, 重新算就行了.
-
动态且不可重新获取的状态. 比如说用户的输入, 外部事件等等.
如果工作进程只有前两类状态, 用监工的方法很容易的处理, 死了重启, 恢复状态就可以了.
第三类的状态需要放到不允许出错的地方(error kernel), 其实就是用try...catch包起来.
作者示范了一个进程池的设计.
所谓进程池, 就是可以容纳一定数量的进程同时运行, 当同时运行的进程数达到限制时, 把工作放入队列进行排队, 等待有空位时再开始新的任务.
做这么一个进程池, 需要有一个服务进程来计数同时运行的工作进程数 …
more ...