Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
升级正在运行的Upstart+;PHP+;SWF活动脚本,直到活动完成_Php_Linux_Cron_Upstart_Amazon Swf - Fatal编程技术网

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

升级正在运行的Upstart+;PHP+;SWF活动脚本,直到活动完成,php,linux,cron,upstart,amazon-swf,Php,Linux,Cron,Upstart,Amazon Swf,我正在尝试使用PHP守护进程(通过Upstart)创建一个分布式系统,运行SWF决策器和活动,以替换大量cron作业和一些可以在后台异步运行的进程 但是,有些事情我不确定: 当这些脚本运行时(可能在多台服务器上运行),有什么好的方法来升级它们 如何确保在升级脚本和重新启动守护进程之前完成任何正在运行的活动 由于代码库的原因,我不得不坚持使用PHP,但如果需要的话,这并不排除一些其他的“包装”脚本。在最坏的情况下,您永远无法保证活动工作人员不会在您杀死某个活动之前拾取该活动 您应该扭转这个问题

我正在尝试使用PHP守护进程(通过Upstart)创建一个分布式系统,运行SWF决策器和活动,以替换大量cron作业和一些可以在后台异步运行的进程

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

  • 当这些脚本运行时(可能在多台服务器上运行),有什么好的方法来升级它们

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


由于代码库的原因,我不得不坚持使用PHP,但如果需要的话,这并不排除一些其他的“包装”脚本。

在最坏的情况下,您永远无法保证活动工作人员不会在您杀死某个活动之前拾取该活动

您应该扭转这个问题-SWF活动应该是幂等的,即,即使为同一输入运行多次,也会给出相同的结果。如果您有长时间运行的活动(我假设您有),使用心跳让SWF周期性地知道您的活动处于活动状态并且运行良好(如果您有短时间的活动,低活动超时本身就足够了)。现在,当部署到来并杀死一台机器上的活动工作者时,SWF将安排杀死的活动在另一台机器上处理(因为心跳超时或活动超时已过期!)

如果使用心跳构建活动(对于长时间运行的活动和快速活动的小超时),则无需担心部署或机器故障,因为无论何时活动工作者出于何种原因停机,SWF都会将任务安排给不同的工作者


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

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

您应该扭转这个问题-SWF活动应该是幂等的,即,即使为同一输入运行多次,也会给出相同的结果。如果您有长时间运行的活动(我假设您有),使用心跳让SWF周期性地知道您的活动处于活动状态并且运行良好(如果您有短时间的活动,低活动超时本身就足够了)。现在,当部署到来并杀死一台机器上的活动工作者时,SWF将安排杀死的活动在另一台机器上处理(因为心跳超时或活动超时已过期!)

如果使用心跳构建活动(对于长时间运行的活动和快速活动的小超时),则无需担心部署或机器故障,因为无论何时活动工作者出于何种原因停机,SWF都会将任务安排给不同的工作者


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

只是一个小说明。SWF不要求活动是幂等的。它保证它们最多被调用一次。这取决于工作流的实现者是否只创建幂等活动,以及是否无条件地重试它们的决策器逻辑。只是一个小的说明。SWF不要求活动是幂等的。它保证它们最多被调用一次。工作流的实现者只能创建幂等活动,而决策者可以无条件地重试它们。