• 请不要在回答技术问题时复制粘贴 AI 生成的内容
eric_zyh
V2EX  ›  程序员

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

  •  
  •   eric_zyh ·
    ericzyh · Apr 11, 2016 · 3208 views
    This topic created in 3687 days ago, the information mentioned may be changed or developed.
    场景:具有优先级设置的消息系统,目前准备基于 kafka 实现。

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

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

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

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

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


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

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

    作为 phper 接触到进程管理的概念也比较少,希望有同学能指点一下~~
    3 replies    2016-04-11 21:24:19 +08:00
    Zuckonit
        1
    Zuckonit  
       Apr 11, 2016
    每次进程取数的时候可以选个随机数决定取那个队列,保证选择到的随机数概率和优先级成正比就 ok 了,把优先级转化为概率问题。比如
    从数组[1,1,1,1,1,1,1,2,2,2,2,3,3,3]里面选到 1 的概率大一些
    xujif
        2
    xujif  
       Apr 11, 2016
    遍历一次队列,选取优先级最高的处理,然后剩下的优先级+1 ,入队优先级根据需要设置
    ynztyl10
        3
    ynztyl10  
       Apr 11, 2016
    可参考 linux 的 IO 调度算法
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   868 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:29 · PVG 04:29 · LAX 13:29 · JFK 16:29
    ♥ Do have faith in what you're doing.