升级正在运行的Upstart + PHP + SWF活动脚本,直到活动完成



我正在尝试创建一个带有PHP守护进程(通过Upstart)的分布式系统,运行SWF决策程序和活动,以替换我们的许多cron作业和一些可以在后台异步运行的进程。

但是,有些事情我不确定:

    当这些脚本
  • 运行时(可能在多个服务器上)升级这些脚本的好方法是什么?

  • 如何确保在升级脚本和重新启动守护程序之前完成任何正在运行的活动

由于代码库,我必须坚持使用 PHP,但如果需要,这并不排除一些其他"包装"脚本。

在最坏的情况下,您永远无法保证活动工作者在您终止活动之前不会拾取活动。

您应该扭转问题 - SWF 活动应该是幂等的,即即使针对同一输入运行多次,也会给出相同的结果。如果您有长时间运行的活动(我假设您确实如此),请使用检测信号定期让 SWF 知道您的活动处于活动状态(如果您有较短的活动,则低活动超时本身就足够了)。现在,当部署来临时,一台计算机上的活动工作线程被终止,SWF 将安排在另一台计算机上处理已终止的活动(因为检测信号超时或活动超时已过期!

如果使用检测信号构建活动(对于长时间运行的活动和快速活动的小超时),则永远不必担心部署或计算机故障,因为每当活动工作线程因任何原因关闭时,SWF 都会将任务安排给其他工作线程。

按照这些思路,最好的部署方法是执行交错部署 - 在给定时间点部署到主机的某个部分,并根据主机的运行状况,继续执行更多部分,直到升级所有主机。这将为 SWF 提供空间来安排被要安排的部署终止的活动,并帮助您防止由于部署而快速检测到的错误传播到系统的其余部分。

最新更新