concurrency - 编写可伸缩代码

标签 concurrency distributed distributed-computing

有人可以用非常简单的术语描述您将如何扩展服务(假设服务非常简单并且是函数 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/

相关文章:

arrays - PThread 的分布式计算不工作

amazon-web-services - AWS Kinesis,具有保证排序的并发 Lambda 处理

erlang - 分布式 RabbitMQ 节点无法相互识别

java - 分布式组件生命周期管理

haskell - 在集群上分布 Haskell

audio - 以分布式方式计算声学指纹,而不会将整个文件暴露给任何参与者

python - 如何将 spark 与 python 或 jupyter 笔记本一起使用

php - 如果 php 脚本想从锁定的表中读取,它会等待吗?

multithreading - 一个可变借用和多个不可变借用

java - 为什么 LogWriter 中的竞争条件会导致生产者阻塞? [实践中的并发]