请教一个关于多进程设计的问题~

2016-04-11 10:26:57 +08:00
 eric_zyh
场景:具有优先级设置的消息系统,目前准备基于 kafka 实现。

希望实现:
1. 多进程的统一管理调度
2. 保证优先级高的消息,优先处理
3. 保证优先级低的消息,不会因为优先级高的消息处理失败而堵塞

======================================

一个不太优的方案:
1. 将不同的消息类型定义为主题,具有优先级(1-10)属性。
2. 配置最大处理进程数

启动进程(主进程)获取到所有定义的主题,按照优先级生成不同的监听进程。
生成一个进程监控 1 个优先级为 1 的主题
生成一个进程监控 2 个优先级为 2 的主题
。。。
生成一个进程监控 10 个优先级为 10 的主题

当优先级低于 3 的监控进程,没有消息处理的时间超过一定阈值(按照优先级设定),就通知主进程过一定时间后重启。


缺点:
当优先级高的消息处理时,进程数没有到达最大处理进程数的时候,也不会开启进程处理
当主题变多的时候,需要进程数也变多,很容易造成瓶颈。

=========================================

作为 phper 接触到进程管理的概念也比较少,希望有同学能指点一下~~
2603 次点击
所在节点    程序员
3 条回复
Zuckonit
2016-04-11 13:23:01 +08:00
每次进程取数的时候可以选个随机数决定取那个队列,保证选择到的随机数概率和优先级成正比就 ok 了,把优先级转化为概率问题。比如
从数组[1,1,1,1,1,1,1,2,2,2,2,3,3,3]里面选到 1 的概率大一些
xujif
2016-04-11 14:11:18 +08:00
遍历一次队列,选取优先级最高的处理,然后剩下的优先级+1 ,入队优先级根据需要设置
ynztyl10
2016-04-11 21:24:19 +08:00
可参考 linux 的 IO 调度算法

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/270080

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX