当前位置:  开发笔记 > 程序员 > 正文

Phoenix应用程序如何仅针对在多台计算机上使用通道规模进行定制?使用HAProxy?如何向所有节点广播消息?

如何解决《Phoenix应用程序如何仅针对在多台计算机上使用通道规模进行定制?使用HAProxy?如何向所有节点广播消息?》经验,为你挑选了1个好方法。

我使用节点应用程序纯粹用于与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节点与另一个节点通信的关系.



1> TheStoneFox..:

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应用程序提供有用的功能.

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有