Websocket 仅为使用通道而定制的Phoenix应用程序如何在多台机器上扩展?使用HAProxy?如何向所有节点广播消息?
我使用节点应用程序纯粹是为了Redis PubSub的socket.io通道,目前我已将其分布在3台机器上,由其中一台机器上的nginx负载平衡支持 我想用一个Phoenix应用程序替换这个节点应用程序,但我对erlang/Elixir还是很陌生,所以我还没有弄清楚一个Phoenix应用程序如何在多台机器上运行。在谷歌上搜索所有可能的扩展和负载平衡术语,结果一无所获 关于渠道,委员会提到了这一点: 即使在计算机集群上,您的消息也会自动跨节点广播 1) 因此,我基本上是将我的应用程序部署到N台服务器上,在每台服务器上启动牛仔服务器,类似于我处理node和node的方式,我将它们绑定到nginx/HAProxy 2) 如果是这种情况,如发行说明所述,如何在所有节点上广播频道消息? 编辑3:回答澄清了并没有Phoenix应用程序,而是Elixir/Erlang应用程序,我更新了搜索词,发现了一些关于扩展和负载平衡的有趣结果Websocket 仅为使用通道而定制的Phoenix应用程序如何在多台机器上扩展?使用HAProxy?如何向所有节点广播消息?,websocket,socket.io,publish-subscribe,elixir,phoenix-framework,Websocket,Socket.io,Publish Subscribe,Elixir,Phoenix Framework,我使用节点应用程序纯粹是为了Redis PubSub的socket.io通道,目前我已将其分布在3台机器上,由其中一台机器上的nginx负载平衡支持 我想用一个Phoenix应用程序替换这个节点应用程序,但我对erlang/Elixir还是很陌生,所以我还没有弄清楚一个Phoenix应用程序如何在多台机器上运行。在谷歌上搜索所有可能的扩展和负载平衡术语,结果一无所获 关于渠道,委员会提到了这一点: 即使在计算机集群上,您的消息也会自动跨节点广播 1) 因此,我基本上是将我的应用程序部署到N台服务
- 一本免费的书:
- Erlang池库
编辑:是第一个提到inter Elixir通信的,但它与Phoenix本身无关,也不清楚它与负载平衡以及每个Phoenix节点与其他节点通信的关系。除非我误解了您的用例,您仍然可以使用应用程序的节点版本所使用的精确缩放技术。只需将Phoenix应用程序部署到>1台机器上,并使用配置为将请求转发到众多应用程序机器之一的Nginx负载平衡器
Erlang的内置节点通信等用于以不同于web应用的方式扩展的应用程序。例如,分布式数据库或队列。Phoenix不是应用程序,当您生成Phoenix项目时,您创建了一个Elixir应用程序,而Phoenix只是一个依赖项(实际上是一系列使构建应用程序的web部件更容易的事情) 因此,您需要进行的任何节点分发仍然可以在Elixir应用程序中进行 您可以使用Phoenix进行web路由,然后将数据传递到您的基础Elixir应用程序,以处理跨节点的分发 值得一读(如果您还没有读过的话),它解释了Phoenix频道如何使用PubSub进行分发(可以配置为使用不同的适配器) 另外,您是否正在通过运行mix phoenix.server在部署服务器上启动cowboy 如果是这样的话,我建议您看看EXRM 这将把您的Elixir应用程序捆绑到一个自包含的文件中,您可以简单地将其部署到生产服务器(如果愿意,可以使用Capistrano),然后启动应用程序 这也意味着您不需要在生产机器上安装任何Erlang/Elixir依赖项 总之,Phoenix不像Rails,Phoenix不是应用程序,也不是堆栈。它只是一个为Elixir应用程序提供有用功能的依赖项。请看 这是凤凰内部拥有通道通信位的地方 它目前有两个适配器:
- PG2-使用分布式长生不老药,在服务器之间直接交换通知。(这要求您以elixir/erlang分布式集群方式部署应用程序。)
- Phoenix.PubSub.Redis-使用Redis在服务器之间交换数据。(这应该类似于socket.io和其他文件中的解决方案)