4

是否可以在一台服务器中托管应用程序并在另一台服务器中排队作业?

可能的例子:

  1. 两个不同的 EC2 实例,一个用于主服务器,第二个用于排队服务。

  2. 在 Heroku 中托管应用程序并将 EC2 实例与队列服务一起使用

那可能吗?

谢谢

4

2 回答 2

14

当然是。我们在我工作的地方以这种方式设置了延迟工作。

它的工作有几个要求:

  1. 服务器必须具有同步时钟。只要服务器时区都设置​​为相同,这通常不是问题。
  2. 服务器都必须访问同一个数据库。

为此,您只需在两台(或所有,如果多于两台)服务器上拥有相同的应用程序,然后在您想要处理作业的任何服务器上启动工作人员。任一服务器仍然可以对作业进行排队,但只有运行工作人员的服务器才能实际处理它们。

例如,我们有一台interface服务器,一台db服务器和几worker台服务器。服务器通过 Apache/Passenger 为应用程序提供interface服务,将 Rails 应用程序连接到db服务器。它们具有相同的workers应用程序,尽管 Apache 没有运行并且您无法通过 http 访问该应用程序。另一方面,他们确实让 delay_jobs 工作人员在运行。在一个常见的场景中,interface服务器在 中排队作业db,然后worker服务器处理它们。

提醒一句:如果您依赖应用程序中的物理文件(附件、日志文件、下载的 XML 或其他任何内容),您很可能需要像 S3 这样的解决方案来保留这些文件。原因是各个服务器可能没有实际文件。例如,如果您的用户将他们的个人资料图片上传到您的面向 Web 的服务器上,则文件可能会存储在该服务器上。如果您随后有另一台服务器来调整个人资料图片的大小,则该图像将不存在于工作服务器上。

于 2011-01-07T01:57:50.060 回答
5

只是为了提供另一个可行的选择:您可以使用像IronWorker这样的新工作服务,它完全依赖于 EC2 内的弹性云服务器场。

通过这种方式,您可以对作业进行排队/调度以运行,并且它们将在跨越多个服务器的大量线程中并行化——所有这些都无需担心基础架构。

但与数据库的处理相同 - 它需要从外部访问。

全面披露:我帮助建立了IW

于 2011-02-07T09:25:33.807 回答