是否有任何开源项目或教程可以作为将 erlang 项目扩展到多个节点时的最佳实践示例?
例如,我想研究一个在一台计算机上启动服务器的项目,我可以通过简单地连接更多节点并使用 net_adm:ping 连接其他计算机来扩展 Web 应用程序。尽可能接近那个。我知道 manning erlang 书对这个主题进行了一些探讨。
最佳答案
谈到可扩展性,有很多方法可以实现它,而 Erlang/OTP 只是提供了一组通用工具和机制来更简单地实现它们,这样您就可以简单地使您的 Erlang 运行时成为分布式节点可以向其他节点的进程发送消息或调用其函数。
Erlang提供的机制如下:
- Erland Distributed Protocol
- Erlang Port Mapper Daemon (EPMD)
- Erlang Internal DBMS (Mnesia)
- Erlang RPC
- Erlang C Interface (C Node)
- Erlang Java Interface (Jinterface)
使用 Erlang/OTP 工具和机制来使其产品可扩展的著名项目有 Riak , RabbitMQ , Ejabberd , CouchDB和其他一些。我们来谈谈 Riak 和 RabbitMQ。
里亚克:
Riak是一个高可用的NoSQL数据库,是基于Amazon Dynamo Paper实现的这是环形拓扑上的节点集群。 分区容忍、可用和最终一致的节点同时使用复制和分区> 风格,它需要大量的节点间通信。 Riak 通过其 Gossip 协议(protocol)使用 Erlang 分发机制进行大多数节点间通信。 Riak 使用 Erlang Port Mapper Daemon 将节点标识符解析为给定计算机上的 TCP 端口。
RabbitMQ
RabbitMQ 是一个消息代理,为了实现消息的可靠性以及扩展负载和吞吐量,使用复制。这样,可以选择在多个节点之间对队列进行镜像。每个镜像队列由一个主队列和一个或多个从队列组成。 RabbitMQ 使用 Erlang/OTP 提供的分发工具和机制,例如,它将消息存储在 Mnesia 上,并使用其功能来复制数据。
<小时/>如果您正在寻找如何使用基本 Erlang 分发机制的简单教程,我建议使用 this one这是两个节点之间的乒乓球。
关于erlang - 哪些项目是轻松将 erlang Web 服务器扩展到多台机器的好例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34499230/