繁体   English   中英

Rails:我可以在不同的服务器上运行后台作业吗?

[英]Rails: Can I run backgrounds jobs in a different server?

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

可能的例子:

  1. 两个不同的EC2实例,一个与主服务器,另一个与排队服务。

  2. 在Heroku中托管应用程序并使用EC2实例和排队服务

那可能吗?

谢谢

当然是。 我们在工作的地方设置了delayed_job。

它有几个要求:

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

要做到这一点,您只需在两个(或所有,如果超过两个)服务器上拥有相同的应用程序,并在要处理作业的任何服务器上启动工作程序。 服务器仍然可以对作业进行排队,但只有运行工作程序的服务器才能实际处理它们。

例如,我们有一个interface服务器,一个db服务器和几个worker服务器。 interface服务器通过Apache / Passenger为应用程序提供服务,将Rails应用程序连接到db服务器。 虽然Apache没有运行,但是您无法通过http访问应用程序,因此workers具有相同的应用程序。 另一方面,他们确实有延迟工作的工人。 在常见情况下, interface服务器将db作业排队,并且worker服务器处理它们。

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

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

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

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

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

暂无
暂无

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

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