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

2024-03-22

是否可以将应用程序托管在一台服务器上并在另一台服务器上对作业进行排队?

可能的例子:

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

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

那可能吗?

Thanks


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

它的工作有几个要求:

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

为此,您只需在两台(或所有,如果超过两台)服务器上拥有相同的应用程序,并在您想要处理作业的任何服务器上启动工作程序即可。任一服务器仍然可以对作业进行排队,但只有运行工作程序的服务器才会真正处理它们。

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐