为云构建Erlang应用程序



我正在研究一个将部署到AWS的套接字服务器,到目前为止,我们已经建立了基本的OTP应用程序,其结构类似于Erlang in Practice中的示例项目,但我们希望避免使用全局消息路由器,因为这将无法很好地扩展。

在看了《Learn You Some Erlang》中关于分布式应用程序的OTP设计指南和相应的章节(distribuomicon和分布式OTP)之后,似乎内置的分布式应用程序机制是面向内部部署解决方案的,在这种解决方案中,您已经知道主机名和ip,并且集群配置提前确定。而在我们预期的设置中,应用程序需要动态伸缩,节点的IP地址将是随机的。

对不起,这是一个冗长的构建,我的问题是是否有分布式Erlang应用程序的设计指南部署到云,需要处理所有的动态缩放?

谢谢,

有几种可能的方法:

  • 在Erlang和OTP In Action中,提出的一种方法是使用一个或两个具有已知域或ip的中心节点,并让所有其他节点连接到该节点以发现彼此
  • 像https://github.com/heroku/redgrid/tree/logplex这样的应用程序需要有一个中央redis节点,所有Erlang节点都需要注册自己,并进行成员管理
  • 第三方服务,如Zookeeper和whatnot做类似的事情
  • 无论人们会推荐什么

请注意,除非您需要保护您的通信,否则可以通过将分发协议切换为使用SSL,或使用AWS安全组等来限制谁可以访问您的网络。

我刚刚学习Erlang,所以不能提供我自己的任何实用建议,但听起来你的情况可能需要一种"资源发现"类型的方法,就像我在Erlang中读到的那样;OTP在行动

Erlware也有一个应用程序来帮助这一点:https://github.com/erlware/resource_discovery

除了Fred的聪明答案之外,其他愚蠢的答案包括:

  1. 使用Route53并以名称而不是IP为目标
  2. 在AWS KMS或AWS秘密管理器中保留IP地址,并连接到该IP地址(关于此的好处是它可以更新而无需重新构建)
  3. 环境变量:祸害还是必要的邪恶?
  4. 将其填充在文本文件中,在一个模糊的,有密码保护的s3桶
  5. vpn
  6. 硬编码和更新CI/CD中的构建

我主要做#2

最新更新