在Heroku上为不同的服务器(Rails和Node js)使用不同的应用程序有什么缺点吗?

时间:2013-10-12 07:39:16

标签: ruby-on-rails node.js heroku socket.io

我写了一个实时网络应用程序,其中包含以下内容:

用于提供网页的Rails(侦听端口80) Nodejs处理实时逻辑(侦听端口8888) 因此,在我的rails应用程序提供的特定页面上,JS将使用socket.io建立与我的nodejs实例的连接,以允许实时http推送。

我将不得不为不同的服务器(Rails和Node js)部署单独的应用程序。 这是一个很好的解决方案(在Heroku上有多个应用程序)? 这会影响性能,是否会产生额外费用?

1 个答案:

答案 0 :(得分:1)

我对Python和节点应用程序做同样的事情。我能看到的两个缺点是:,就我目前所关注的而言,确实是一个很大的缺点:

  1. 如果你想防止dyno空转,你必须每个应用程序至少有2个dynos,这意味着更多的成本。您可以通过每小时至少一次“ping”(在http级别)每个应用程序来规避这一点。从pingdom或任何其他免费提供的服务中说出来。一个应用程序甚至可以ping另一个。

  2. 您的应用之间的通信并不像您希望的那样“直接”。那就是:它不是通过本地接口。我不在我的应用程序之间共享状态(没有Redis,没有数据库,没有amq),并且它们之间的通信是RESTful。所以我的Python应用程序必须通过Heroku http路由器才能进入我的节点应用程序(即:它必须转到my-node-app.herokuapp.com)。这只会增加一点延迟(我并不在乎),而且只是我的代码有点复杂:我的Python和节点应用程序现在有一个共享秘密,以便将我的Python应用程序验证到我的节点应用程序。这是为了防止“普通大众”联系我的节点应用程序。

  3. 总的来说,正如我所说,我认为这是一个相当不错的解决方案。