【问题标题】:Is there any downside to using different apps for different servers (Rails and Node js) on Heroku?在 Heroku 上为不同的服务器(Rails 和 Node js)使用不同的应用程序有什么缺点吗?
【发布时间】:2013-10-20 08:06:29
【问题描述】:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我对 Python 和节点应用程序也是如此。我可以看到的两个缺点,就我目前而言,不是真正的大缺点是:

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

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

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

    【讨论】:

    • 它会导致多少延迟,因为我根本不想要任何延迟。我可能还需要共享数据库
    • 以毫秒为单位。如果这真的对您来说是个问题,那么您应该考虑使用共享资源,例如 Redis。
    • 我刚刚注意到我的原始回复中可能出现了语法错误。需要明确的是:就我而言,这些都不是大的缺点。当替代方案是在节点中编写所有 Ruby 逻辑只是为了拥有一个应用程序时,它们是值得的。
    • 另一种选择是使用 Pusher 或 PubNub,但它是付费的,但与部署 2 个应用程序的成本大致相同
    • 是的,你可以。为什么要投票?为什么不通过通知“轮询者”的服务写入数据库?通过 pubsub/redis?
    猜你喜欢
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    • 2016-06-19
    • 1970-01-01
    相关资源
    最近更新 更多