使用Django编写的单个web界面监控多个AmazonEC2服务器上的python scraper程序

2024-05-02 12:05:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python编写的web scraper(命令行脚本),可以在4-5个Amazon-EC2实例上运行

我要做的是将这些python脚本的副本放在这些EC2服务器中并运行它们

所以下一次当我改变程序时,我必须对所有的副本进行修改

因此,您可以看到冗余、管理和监视的问题

So, to reduce the redundancy and for easy management , I want to place the code in a separate server from which it can be executed on other EC2 servers and also monitor theses python programs, and logs created them through a Django/Web interface situated in this server.


Tags: andtheto实例命令行in服务器脚本
1条回答
网友
1楼 · 发布于 2024-05-02 12:05:38

您至少要处理两个问题:

  • 监控报废任务的执行情况
  • 将代码部署到多个服务器

每一个都需要不同的解决方案

一般来说,我建议使用任务队列进行此类分配(我已经尝试过,并且非常满意Celery在AmazonEC2上运行)

任务队列的一个优点是,它从实际执行任务的工作者那里抽象出任务的定义。因此,您将任务发送到队列,然后由数量可变的工作人员(具有多个工作人员的服务器)通过一次请求一个来处理这些任务。如果空闲,每个工人都将连接到队列并请求一些工作。如果它收到它(一项任务),它将开始处理它。然后它可能会将结果发回,并要求执行另一项任务,依此类推

这意味着许多工人可以随着时间的推移而改变,他们将自动处理队列中的任务,直到没有更多的任务要处理为止。这方面的用例是使用Amazon的Spot实例,这将大大降低成本。只需将您的任务发送到队列,创建X点请求,并查看服务器正在处理您的任务。你真的不需要关心服务器在任何时候的涨跌,因为价格高于你的出价。那很好,不是吗

现在,它隐式地负责监控——因为芹菜有监控队列和处理的工具,它甚至可以使用django-celery与django集成

当涉及到将代码部署到多个服务器时,芹菜不支持这一点。这背后的原因性质不同,例如,见this discussion。其中之一可能是,它很难实现

我认为没有它生活是可能的,但如果你真的在乎,我认为有一个相对简单的DIY解决方案。将您的代码放在VCS(我建议Git)下,并定期检查更新。如果有更新,请运行bash脚本,该脚本将杀死您的工作人员,进行所有更新并重新启动工作人员,以便他们可以处理更多任务。考虑到芹菜处理故障的能力,这应该很好

相关问题 更多 >