编写可扩展的代码

时间:2012-07-04 21:56:53

标签: concurrency distributed distributed-computing

有人可以用非常简单的术语描述如何扩展服务(假设服务非常简单并且是函数X())。

为了使这个可扩展,您只需为每个想要运行X的客户端启动一个新节点(最多取决于您的硬件)?

因此,如果我有四个硬件盒,我可以激活四个节点来运行服务X(),在第五个客户端请求我将在第一个节点上运行X(),在第二个节点上运行第六个客户端等?

接下来,我知道如何在本地生成进程,但是如何让第一个和第五个客户端使用相同的节点1-它是通过​​每次在客户端的节点上远程生成进程?

欢迎任何简单的例子!

1 个答案:

答案 0 :(得分:3)

这在很大程度上取决于X是什么。如果X完全独立,例如x() -> 37.,那么您甚至不需要连接节点。只需在系统前放置一些标准的Load Balancer(HAProxy,Varnish等),然后忘记任何类型的分布式通信。事实上,没有必要使用Erlang。用您选择的其他语言替换Erlang。同样好。

Erlang闪耀的地方是当几个X函数对彼此的结果有依赖关系时,以及当X可能存在于另一个物理机器上时。在这种情况下,Erlang可以无缝地与其他X通信,即使它位于不同的节点上。

如果要在Erlang中实现循环方案,最简单的方法是使用单个入口点,然后将请求转发到多个节点。但是,如果存在某个节点以所有长时间运行的进程结束的模式,则这很糟糕。您需要构建一个反馈机制,以便了解如何对循环队列进行加权。