1

我有一个托管在 Heroku 上的 Rails 应用程序。我必须对 mySQL 数据库进行长时间的后端计算和查询。

我的理解是使用DelayedJob 或Whenever gems 调用后端进程仍然会对Rails(前端)服务器性能产生影响。因此,我想设置两个不同的 Rails 服务器。

第一个服务器用于前端(响应用户的请求),就像在常规 Rails 应用程序中一样。第二台服务器(也是 Rails 服务器)仅用于后端查询和计算。它只会从 mySQL 中读取,进行计算,然后将结果写入另一个 Redis 服务器。

我的感觉是,没有很多 Rails 开发人员这样做。他们更喜欢在 Rails 服务器上运行后台作业并根据需要添加更多工作人员。我的服务器结构是一个好的设计,还是矫枉过正?有什么我应该注意的陷阱吗?

谢谢你。

4

1 回答 1

3

我看不出有任何理由说明为什么像 DelayedJob 这样的后台作业会比另一台服务器对您的主应用程序造成更多的开销。DelayedJob 在它自己的进程中运行,因此您的主应用程序的测功机不会受到影响。唯一的影响可能是对数据库查询的影响,但无论是来自后台作业还是访问同一数据库的另一个应用程序,这都是相同的。

我建议在您的主要应用程序上使用 DelayedJob 和工作人员。它使事情变得简单,并且在性能方面不应该变得更糟。

如果您真的担心性能,要考虑的另一件事是拥有一个数据库“追随者”,这实际上是第二个数据库,可以使自己与主数据库保持同步,但只能用于读取(而不是写入)。可能有更好的文档,但你可以在这里https://devcenter.heroku.com/articles/fast-database-changeovers#create_a_follower得到这个想法。然后,您可以让这些冗长的后台作业从此处读取数据,而使您的主数据库完全不受影响。

于 2012-04-16T06:08:39.393 回答