PHP中的编码理论:需要为多个队列引导流量(多路复用)
作者:互联网
我正在为我们的员工整理一个界面,上传他们需要行业统计数据的产品列表(目前一次手动执行一个).
然后,每个产品将通过webservice api提供给我们的stat引擎.
我会回复. Stat的引擎将从我的api请求“下一个受害者”.
用户上传的每个列表将包含50到1000个产品,并且将成为自己的队列.
目前,队列/列表可能每天增加10-20次(并通过完成删除)aprox.
如果成功,流量可能会在几个月后升级到每天700-900个列表.
我们计划采用简单的循环方法,将流量均匀地引导到队列中.
多路复用器将从列表A,然后是列表B,然后列出C等依次抓取顶部项目,直到再次循环回到列表A …请记住,列表/队列可以随时添加/删除.
我面临的问题只是概念化管理.
我想过将每个队列存储为一个平面文件,并通过关系数据库(MySQL)管理轮换.考虑做反过来.想要完全平坦的文件或完全关系的DB …底线,我很灵活.
无论如何,当我试图通过循环旋转无状态地融合参与者的变量列表时,我的大脑只是蒸汽锁定(我刚从快节假日回来,我不认为我的大脑已经回家了;)
有没有人做过这样的事情?
你是怎么处理的呢?
如果你不得不再做一次,你会有什么改进?
任何&欢迎提供所有提示/建议/建议.
注意:由于我们的stat引擎/工具的每个请求都会被隔开很多秒,如果不是几分钟,我需要保持这种无状态.
解决方法:
列表数据肯定应存储在数据库中.您的PHP端应该有一个视图,给出系统的状态,以及添加列表的表单.
由于每个请求都成为自己的队列,并且所有请求队列在优先级上都被认为是相同的,因此理想的表数可能是三个.一个用于列出请求及其相对于另一个的优先级(以确定循环中接下来是谁)和处理状态,另一个用于列出尚待处理的每个请求的内容(列表项),以及第三个表列出每个队列中的已处理项目.
您还需要一个执行实际处理的脚本,该脚本不是由用户请求驱动,而是由定期执行的系统调度作业(根据您的需要限制).这当然也可以是PHP.您可以在此处设置10个一次列表检查和更新.
处理将类似于:
>从最高优先级队列中选择最多10个项目的下一组.
>处理它们,在完成时更新其DB状态.
>更新上述队列的优先级,使其成为最低优先级.
如果添加了新队列,则会添加最低优先级.
优先级可以用整数表示.
您的用户需要耐心等待他们的列表进行处理,然后查看或下载结果.您可以在视图页面上为此设置自动刷新脚本.
标签:php,multiplexing 来源: https://codeday.me/bug/20190709/1414410.html