Erlang 系统中的可扩展性、监督策略与应用管理
1. 可扩展性与短生命周期进程
在典型的 Erlang 设计中,系统里每个真正并发的活动都会创建一个进程。例如,若系统是数据库,每次查询、插入或删除操作都会生成一个进程;若为即时通讯服务器,每个入站和出站消息、状态更新、登录和注销操作也都会有一个进程。不过,并发模型会受系统资源的限制,比如实际中可能只有一个数据库连接,这就成了瓶颈,会使请求串行化。
当有大量动态子进程在短时间内频繁启动和终止时,主管(supervisor)可能会成为瓶颈。简单的 simple_one_for_one 策略扩展性更好,因为它使用 dict 键值库模块,而非像其他主管类型那样将子进程规范存储在列表中,但它也有其局限性。动态子进程的启动和终止速率难以给出通用标准,这取决于底层硬件、操作系统、核心以及进程自身的行为等因素。
若主管的消息队列增长到数千条消息,就说明遇到了问题,可采用以下两种方法解决:
- 创建主管池 :确保每个主管处理的子进程数量在其能力范围内。左边的进程作为调度器,负责主管之间的协调,必要时启动新的主管。可使用轮询、一致性哈希或随机等算法选择主管池中的主管。
graph LR
A[调度器] --> B[主管1]
A --> C[主管2]
A --> D[主管3]
B --> E[子进程1]
B --> F[子进程2]
C --> G[子进程3]
D --&g
超级会员免费看
订阅专栏 解锁全文
4

被折叠的 条评论
为什么被折叠?



