我使用节点应用程序纯粹用于与Redis PubSub的socket.io通道,目前我将它分布在3台机器上,由其中一台机器上的nginx负载平衡支持.
我想用Phoenix应用程序替换这个节点应用程序,我仍然是erlang/Elixir世界的新手,所以我仍然没有弄清楚一个Phoenix应用程序如何跨越多台机器.谷歌搜索所有可能的缩放和负载平衡术语没有产生任何结果.
在1.0版本说明提到这一点对于渠道:
即使在一组计算机上,您的消息也会自动在节点间广播
1)所以我基本上将我的应用程序部署到N个服务器,在每个服务器中启动Cowboy服务器,类似于我如何处理节点,我将它们绑定到nginx/HAProxy?
2)如果是这种情况,如何在发布说明中提到的所有节点上广播频道消息?
编辑3:采用Theston的答案澄清了凤凰应用程序没有这样的东西,而是Elixir/Erlang应用程序,我更新了我的搜索术语,并发现了一些有关缩放和负载平衡的有趣结果.
一本免费的大书:Stuff Goes Bad:Erlang in Anger
Erlang汇集库推荐
编辑2:从Elixir的创建者那里找到:
Elixir为进程分组和全局进程(节点之间共享)提供了便利,但您仍然可以使用Consul或Zookeeper等外部库进行服务发现,或者依靠HAProxy为基于HTTP的前端进行负载均衡.
编辑:在同一局域网上连接Elixir节点是第一个提到Elixir通信的节点,但它与Phoenix本身无关,并且不清楚它与负载平衡和每个Phoenix节点与另一个节点通信的关系.
Phoenix不是应用程序,当你生成一个Phoenix项目时,你创建了一个Elixir应用程序,其中Phoenix只是一个依赖项(实际上是一堆使你的应用程序的Web部分更容易构建的东西).
因此,您需要执行的任何Node分发仍然可以在Elixir应用程序中进行.
您可以使用Phoenix进行Web路由,然后将数据传递到基础Elixir应用程序以处理跨节点的分发.
值得一读http://www.phoenixframework.org/v1.0.0/docs/channels(如果你还没有),它解释了Phoenix通道如何使用PubSub进行分发(可以配置为使用不同的适配器) ).
另外,你是否通过运行mix phoenix.server在部署服务器上激活牛仔?
如果是这样,那么我建议您查看EXRM https://github.com/bitwalker/exrm
这会将您的Elixir应用程序捆绑到一个自包含文件中,您只需将其部署到生产服务器(如果您愿意,可以使用Capistrano),然后启动应用程序.
这也意味着您不需要在生产计算机上安装任何Erlang/Elixir依赖项.
总之,Phoenix并不像Rails,Phoenix不是应用程序,不是堆栈.它只是一个依赖项,为您的Elixir应用程序提供有用的功能.