作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人可以用非常简单的术语描述您将如何扩展服务(假设服务非常简单并且是函数 X() )。
为了实现可扩展性,您是否可以为每个想要运行 X 的客户端启动一个新节点(最多取决于您的硬件)?
因此,如果我有四个硬件盒,我最多可以启动四个节点来运行服务 X(),在第 5 个客户端请求时,我将只在第一个节点上运行 X(),在第二个节点上运行第 6 个客户端,依此类推?
从这里开始,我知道如何在本地生成进程,但是如何让第一个和第五个客户端都使用同一个节点 1 - 是不是每次都在节点上为客户端远程生成一个进程?
欢迎提供任何简单的示例!
最佳答案
这在很大程度上取决于 X 是什么。如果 X 是完全独立的,例如 x() -> 37.
那么您甚至不需要连接您的节点。只需在您的系统(HAProxy、Varnish 等)前面放置一些标准的负载均衡器,然后忘记任何类型的分布式通信。事实上,没有必要为此使用 Erlang。用您选择的其他语言替换 Erlang。它同样好。
Erlang 的亮点在于几个 X 函数相互依赖的结果,以及 X 可能存在于另一台物理机器上的情况。在那种情况下,Erlang 可以与另一个 X 无缝通信,即使它位于不同的节点上。
如果你想在 Erlang 中实现循环方案,最简单的方法是拥有一个入口点,然后让它将请求转发到多个节点。但如果存在某个节点以所有长时间运行的进程结束的模式,这就很糟糕了。您需要建立一种反馈机制,以便了解如何对循环队列进行加权。
关于concurrency - 编写可伸缩代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11335811/
我是一名优秀的程序员,十分优秀!