【发布时间】:2016-04-29 13:04:06
【问题描述】:
我需要在服务器端实现一个运行异步操作的系统,在考虑了很多选项之后,我不确定哪个是最好的和更具可扩展性的,或者在这种情况下通常使用什么。我一定是遗漏了一些东西,因为没有一个解决方案可以完全解决问题。
上下文:对于某些上下文,我有一个移动应用程序,用户在其中向其他用户发送请求以启动活动。此操作在服务器端处理,如果请求没有来自其他用户的响应,它将在 15 分钟后过期并关闭。所以我在数据库中创建了一个记录,这个操作的开始时间,我需要在 15 分钟后更新它的状态,因此是异步操作。需要正好 15 分钟才能正确通知等待的用户。
可能的解决方案:
我正在使用 laravel,我正在考虑的解决方案是将延迟的作业推送到队列中。虽然一开始我认为这将是一个完美的解决方案,但我认为它可能无法扩展,因为此请求的频率可能会变得太高,并且会有太多的作业排队。此外,队列作业不能保证在达到延迟后准确执行,并且可能解决得太晚。
我想到的另一个解决方案是在每分钟运行的 cron 作业中处理所有这些问题,但是当请求量很高时它也会出现同样的问题。就性能而言,每分钟都这样做可能有点过头了,尤其是在活动不频繁的时候。
因此,基本上,这些都是小操作,可以相对较快地解决,但管理大量待处理操作的成本可能比操作本身更糟糕。是否有任何其他模式(甚至没有简化为 laravel 或 php)将任务的执行延迟到未来时间?
【问题讨论】:
标签: performance laravel asynchronous server jobs