Concurrency 编写可伸缩代码

Concurrency 编写可伸缩代码,concurrency,distributed,distributed-computing,Concurrency,Distributed,Distributed Computing,有人能用非常简单的术语描述一下如何扩展服务(假设服务非常简单,并且是函数X()) 为了使它具有可伸缩性,您是否会为每个想要运行X的客户机启动一个新节点(最大值取决于您的硬件) 因此,如果我有四个硬件盒,我可能会启动多达四个节点来运行服务X(),在第五个客户端请求时,我只会在第一个节点上运行X(),在第二个节点上运行第六个客户端,等等 从这里开始,我知道如何在本地生成进程,但是如何让第一个和第五个客户端使用同一个节点1?是否每次都在节点上远程为客户端生成一个进程 任何简单的例子都是最受欢迎的 这在

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

为了使它具有可伸缩性,您是否会为每个想要运行X的客户机启动一个新节点(最大值取决于您的硬件)

因此,如果我有四个硬件盒,我可能会启动多达四个节点来运行服务X(),在第五个客户端请求时,我只会在第一个节点上运行X(),在第二个节点上运行第六个客户端,等等

从这里开始,我知道如何在本地生成进程,但是如何让第一个和第五个客户端使用同一个节点1?是否每次都在节点上远程为客户端生成一个进程


任何简单的例子都是最受欢迎的

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

Erlang的亮点是当多个X函数相互依赖时,以及当X可能位于另一台物理机器上时。在这种情况下,Erlang可以与另一个X无缝通信,即使它位于不同的节点上


如果要在Erlang中实现循环方案,最简单的方法是使用一个入口点,然后让它将请求转发到多个节点。但是,如果存在这样一种模式,即某个节点以所有长时间运行的进程结束,那么这是不好的。你需要建立一个反馈机制,这样你就知道如何权衡循环队列。

我不确定我是否理解。是否需要一种通过节点循环的技术?如果是,您可以使用Nodes=[node()| Nodes()],list:nth(长度(节点)-(计数器rem长度(节点)),Nodes在列表中循环。或者诸如此类的东西。@Isac,我只对需要哪些函数和基本代码才能将任务卸载到远程节点感兴趣,就像您在扩展代码时一样。所以我的函数X()如果我想在不同的盒子上运行X(),我会怎么做?谢谢