我在Heroku上托管了一个Rails应用程序。我必须对mySQL数据库进行长后端计算和查询。
我的理解是使用DelayedJob或Whenever gems来调用后端进程仍会对Rails(前端)服务器性能产生影响。因此,我想设置两个不同的Rails服务器。
第一台服务器用于前端(响应用户的请求),就像常规的Rails应用程序一样。 第二台服务器(也是Rails服务器)仅用于后端查询和计算。它只会读取mySQL,进行计算,然后将结果写入其他Redis服务器。
我的感觉是没有很多Rails开发人员这样做。他们更喜欢在Rails服务器上运行后台作业,并根据需要添加更多工作者。我的服务器结构是一个好的设计,还是一个矫枉过正?我应该注意哪些陷阱?
谢谢。
答案 0 :(得分:3)
我没有看到任何理由为什么像DelayedJob这样的后台作业会导致主应用程序上的开销比其他服务器更多。 DelayedJob在其自己的进程中运行,因此主应用程序的dyno不会受到影响。唯一的影响可能是数据库查询,但无论是来自后台作业还是完全访问同一数据库的其他应用程序,都是相同的。
我建议在主应用上使用DelayedJob和worker。它保持简单,不应该是任何更糟糕的性能。
如果你真的担心性能,另外要考虑的是拥有一个数据库“跟随者”,这实际上是第二个数据库,它使自己与主数据库保持同步,但只能用于读取(而不是写入) )。可能有更好的文档,但你可以在这里得到这个想法https://devcenter.heroku.com/articles/fast-database-changeovers#create_a_follower。然后,您可以从这里读取这些冗长的后台作业数据,使主数据库完全不受影响。