Ben*_*Hao 6 erlang distributed erlang-otp
我刚刚完成了Erlang in Practice截屏(这里的代码),并对分发有一些疑问.
这是整体架构:

以下是监督树的样子:

阅读分布式应用程序让我相信,其中一个主要动机是故障转移/接管.
但是,例如,消息路由器主管及其工作人员是否可以在一个节点上,并且系统的其余部分可以在另一个节点上,而不需要对代码进行太多更改?
或者应该有3种不同的OTP应用程序?
此外,如何使该系统水平扩展?例如,如果我现在意识到我的系统可以处理100个用户,并且我已经将消息路由器确定为主要瓶颈,那么我怎样才能"添加另一个节点",现在它可以处理200个用户?
我只在学习期间开发了 Erlang 应用程序,但通常我们有许多小进程只做一件事并向其他进程发送消息。Erlang 的美妙之处在于,无论您是在同一个 Erlang VM 内还是在同一台计算机、同一 LAN 或通过 Internet 发送消息,调用和指向其他进程的指针看起来总是相同的。开发商。
因此,您确实希望系统的每一小部分都拥有一个应用程序。
话虽如此,它并没有使构建可扩展的应用程序变得更加简单。根据经验,如果您希望应用程序在 10 倍以上的节点上运行,则需要重写,否则消息传递开销将会太大。显然当你从1开始到2时你也需要考虑它。
因此,如果您发现瓶颈,即应用程序在处理太多客户端时特别慢,您希望第二次运行它,并且需要在启动第二个应用程序之前实施一些额外的负载平衡。
假设主管检查消息内容是否有不当内容,因此速度很慢。在这种情况下,每个人正在交谈的节点将是简单的路由器应用程序,它将以循环方式将消息转发到主管应用程序的不同实例。如果这 1 或 2 个实例还不够,您可以以某种方式编写路由器,以便您可以通过发送控制消息来操纵实例的数量。
然而,为了自动工作,您需要有另一个进程来监视服务器并发现它们是否过载或利用率不足。
我知道,当您听说动态添加和删除资源时,听起来总是很棒,但正如您所看到的,这是一项繁重的工作,您需要构建一些允许它的消息传递系统,以及可以监控的监控系统需求。
希望这能让您了解如何完成它,不幸的是,距离我编写上一个 Erlang 应用程序已经过去一年多了,而且我不想提供可能错误的代码。