我对heroku没有多少经验,对凤凰来说更少,所以这可能是一个愚蠢的问题......但是要确保我在托管上做出了不错的选择:)
根据我的理解,扩展phoenix的方式是添加另一台服务器,启动另一个节点并连接它们,然后让BEAM / OTP发挥其神奇作用来处理工作负载平衡。在heroku上,dynos无法真正通过本地网络进行通信,根据我的理解,这是BEAM需要集群的东西。因此,添加dynos将导致更“传统”的缩放模型,其中您有一个外部负载平衡器,用于平衡未连接节点之间的连接,db是共享状态。
我的问题是这会产生多大的影响?当你达到严重的负载/规模水平时,它是否只是一个问题,还是意味着在基础设施上花费更多的钱是必要的?
答案 0 :(得分:7)
You'll get the best performance on a host that supports clustering, but Phoenix has a PubSub adapter system exactly for deployments like heroku: https://github.com/phoenixframework/phoenix_pubsub
One line config change and mix.exs deps entry and you'll have multinode channels on heroku via our Redis adapter.
答案 1 :(得分:2)
这是一个非常开放的问题,所以我相信我的答案并不全面。
在您的情况下,最重要的问题是:凤凰会使用频道吗?
如果使用普通的旧HTTP,它可能主要是无状态的。有许多方法可以模拟有状态连接,例如在cookie中存储会话。在一天结束时,您的后端服务器是否彼此连接并不重要,因为它们中的每一个都在进行独立计算。您的负载均衡器可以随机选择任何服务器,它将始终有效。 http的这个很酷的功能使这个协议可以很好地扩展。你肯定可以在那个场景中使用Heroku,它会很好用。
如果您使用Phoenix频道,事情会变得复杂。您仍然希望能够连接到任何服务器,但您可能会实时向其他用户发送消息,并且可以将消息连接到其他服务器。 Phoenix通过使用BEAM进行聚类来解决这个问题,这对Heroku来说很难。甚至不可能。
总结:这不是小规模/大规模的问题。这是一个功能问题。扩展通道将需要群集,缩放普通的旧HTTP不会。