关于伞app的问题〜>纳米/微服务,通讯

时间:2016-10-16 09:59:31

标签: elixir

- 背景

我正在努力用Elixir替换我们当前Rails rest API的一些端点。我开始爱上了一个伞的想法,其中包含一个HTTP端点(一个凤凰应用程序),以及一系列小型纳米应用程序;可以是完全负责与用户数据交互的用户应用程序。

- 问题

现在我希望能够独立扩展这些服务,比如说用户服务的负载是否更大。我们在当前的设置中使用Docker,理想情况下我会部署更多的用户应用容器。

这意味着我需要某种沟通,我目前使用GenServer创建了一个概念验证,它运行良好,但似乎包含了传递和更改状态的想法。而我只想传递一些数据,或者回复:如果操作成功,则确定。 我看了http://elixir-lang.org/getting-started/mix-otp/task-and-gen-tcp.html,结束了我应该用什么来沟通的困惑。 所以我的第一个问题是,我的应用程序之间最理想的通信方式是什么?

我也偶然发现了另一个痛苦,在开发过程中我仍然需要我的应用程序一起讨论,但这意味着我需要独立启动每个应用程序,并将它们传递给--cookie和--sname。现在这很好,因为我只有3个应用程序,但是当我有10个应用程序时,这是很多工作。我知道我从伞根开始整个项目,但是,如何将所需参数传递给个性化应用程序?

非常感谢一些许可。谢谢。

1 个答案:

答案 0 :(得分:3)

Erlang和协会Elixir创建了一个内置于该语言的通信层。使用伞形应用程序,您可以build a release最初包含单个节点中的所有应用程序,然后随着扩展需要针对伞中的特定应用程序,您可以为那些作为其他节点运行的应用程序构建一个版本(一个或多个)。

使用内置方法进行节点间通信并遵守一些规则将确保您不必更改现有代码,以便将节点分发到不同的计算机/ VM。

有关试验节点间通信的说明,请参阅this article

了解Erlang / Elixir中整体通信图片非常重要的其他概念:

http://erlang.org/doc/reference_manual/distributed.html

http://erlang.org/doc/man/epmd.html

http://erlang.org/doc/man/pg2.html

请记住,正如TCP或UDP网络通信一样,第一个要求是计算机必须能够通过网络进行通信,并且必须打开Erlang VM尝试使用的端口。

启动Erlang / Elixir应用程序时可以使用此命令行参数来限制使用的端口范围:

-kernel inet_dist_listen_min 30000 inet_dist_listen_max 30003

我相信您至少需要打开2个或3个端口才能正常运行。

祝你好运!