繁体   English   中英

使用 Django 编写的单个 Web 界面监控多个 Amazon EC2 服务器上的 Python 抓取程序

[英]Monitor python scraper programs on multiple Amazon EC2 servers with a single web interface written in Django

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

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

所以下次当我更改程序时,我必须对所有副本都这样做。

所以,你可以看到冗余、管理和监控的问题。

因此,为了减少冗余和便于管理,我想将代码放在一个单独的服务器中,它可以在其他 EC2 服务器上执行,并监视这些 Python 程序,并通过位于 Django/Web 界面的日志创建它们这个服务器。

您至少要处理两个问题:

  • 监控抓取任务的执行
  • 将代码部署到多个服务器

他们每个人都需要不同的解决方案。

一般来说,我会建议使用任务队列进行这种分配(我已经尝试过并且对在 Amazon EC2 上运行的Celery感到非常满意)。

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

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

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

当涉及到将代码部署到多个服务器时,Celery 不支持。 这背后的原因具有不同的性质,例如参见此讨论 其中之一可能是它很难实施。

我认为没有它也可以生活,但如果你真的关心,我认为有一个相对简单的 DIY 解决方案。 将您的代码放在 VCS 下(我推荐Git )并定期检查更新。 如果有更新,请运行一个 bash 脚本,它会杀死您的工作人员,进行所有更新并重新启动工作人员,以便他们可以处理更多任务。 鉴于 Celerys 处理故障的能力,这应该可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM