我有一个用Python编写的web刮刀程序(命令行脚本),运行在4-5个Amazon-EC2实例上。
我所做的就是将这些python脚本的副本放在这些EC2服务器中并运行它们。
所以下一次,当我改变程序的时候,我必须为所有的拷贝做它。
因此,您可以看到冗余、管理和监视的问题。
因此,为了减少冗余和便于管理,我希望将代码放在一个单独的服务器中,从服务器上可以在其他EC2服务器上执行代码,并监视这些python程序,并通过位于此服务器上的Django/Web接口创建日志。
发布于 2012-10-25 01:11:12
至少有两个问题你正在处理:
他们每一个都需要一个不同的解决方案。
通常,我建议在这种分配中使用任务队列(我已经尝试过,并且对运行在AmazonEC2上的芹菜非常满意)。
任务队列的一个优点是它从实际执行任务的工作人员中抽象出任务的定义。因此,您将任务发送到队列中,然后可变数量的工作人员(具有多个工作人员的服务器)一次请求一个任务来处理这些任务。每个工作人员,如果它空闲,将连接到队列,并要求一些工作。如果它接收到它(一个任务),它将开始处理它。然后,它可能会将结果发回,然后它将请求另一个任务,等等。
这意味着许多工作人员可以随着时间的推移而改变,他们将自动处理队列中的任务,直到没有更多的任务需要处理为止。这方面的用例是使用亚马逊的Spot实例,这将大大降低的成本。只需将任务发送到队列,创建X spot请求,并查看处理任务的服务器。你真的不需要关心服务器在任何时候上升和下降,因为价格超过你的出价。太好了,不是吗?
现在,这隐式地负责监视--因为芹菜有监视队列和处理的工具,它甚至可以使用姜戈-芹菜与django集成。
当涉及到将代码部署到多个服务器时,芹菜不支持这一点。这背后的原因是不同的性质,参见例如这一讨论。其中之一可能是它很难实现。
我认为没有它是可以生存的,但是如果你真的在乎的话,我认为有一个相对简单的DIY解决方案。将您的代码放在VCS下(我推荐Git),并定期检查更新情况。如果有更新,运行bash脚本将杀死您的工作人员,进行所有更新,并再次启动工作人员,以便他们能够处理更多的任务。考虑到塞勒尔处理失败的能力,这应该工作得很好。
https://stackoverflow.com/questions/13059762
复制相似问题