php 开启 队列扩展,php – 用于大规模任务调度的可扩展作业队列系统

场景:

TL; DR – 我需要一个队列系统,用于根据未来的时间戳触发作业,而不是根据插入的顺序触发作业

我有一个条目的MySQL数据库,它根据时间戳以精确的顺​​序详细说明需要执行的特定事件(主要包括一系列算术计算和数据库插入/更新).插入条目的时间和“执行”事件的时间没有相关性,并且由外部因素决定.该表还包含第二列毫秒,这增加了计时精度.

此表是作业“队列”的一部分,该队列将包含设置为在将来几秒到几天之间的任何位置执行的条目,并且每秒可能最多添加数千个条目.需要不断地解析队列(每秒?) – 可能通过选择在此秒期间已过期并按毫秒排序的所有时间戳,然后执行条目详细说明的每个事件.

问题

目前,后端完全用PHP编写在带有MySQL的apache服务器上(即标准LAMP架构).现在,我能想到实现我已经指定的唯一方法是编写一个自定义的PHP作业队列脚本,它将执行解析和执行,每秒使用this method循环.没有其他作业系统我是知道哪个可以根据指定的时间戳/毫秒而不是输入时间来排队作业.

然而,即使在纸面上,这种方法听起来也是不可行的CPU – 我必须每秒执行一次巨大的MySQL查询,并为检索到的每一行执行某种功能,并且可能会在执行时间的一秒钟内运行,这将导致延迟解析时间并弄乱循环脚本.

我当然正在尝试创建一个可扩展的解决方案,如果系统上有大量流量,这个解决方案会失败,因为随着条目数量的增加,它将继续落后.

问题

我更喜欢坚持使用标准的LAMP架构,但是有没有其他技术可以很好地集成到堆栈中,以便更好地处理我在这里尝试做的事情?

是否还有另一种方法可以在指定的未来日期准确地触发事件,而不会使用常量队列检查进行混乱的调整?

如果以上两个选项都不合适,是否有更好的方法在后台循环PHP脚本?在最糟糕的情况下,我可以接受较长的执行时间,并在多个“工人”之间分配任务.

更新

RabbitMQ是一个很好的建议,但遗憾的是,它不会在“任期到期”后立即执行任务 – 它必须首先通过队列并等待前面尚未过期的任何任务.到期时间在几秒到几天之间有很大的范围,并且每次添加新事件时都需要以某种方式对队列进行排序,因此到期时间总是在队列中按顺序排列.就我在RabbitMQ中所知,这是不可能的,并且听起来效率也不高.是否有替代方案或程序修复方案?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值