分布式Erlang聊天系统

分布式Erlang聊天系统,erlang,distributed,otp,Erlang,Distributed,Otp,我刚刚完成了Erlang的实践屏幕广播(代码),并对发行版提出了一些问题 以下是总体架构: 下面是监督树的外观: 阅读让我相信,故障切换/接管是主要动机之一 但是,例如,消息路由器主管及其工作人员是否可能位于一个节点上,而系统的其余部分位于另一个节点上,而不需要对代码进行太多更改 或者应该有3种不同的OTP应用程序 此外,如何使该系统水平缩放?例如,如果我现在意识到我的系统可以处理100个用户,并且我已经将消息路由器确定为主要瓶颈,那么我如何“仅仅添加另一个节点”,现在它可以处理200个用户

我刚刚完成了Erlang的实践屏幕广播(代码),并对发行版提出了一些问题

以下是总体架构:

下面是监督树的外观:

阅读让我相信,故障切换/接管是主要动机之一

但是,例如,消息路由器主管及其工作人员是否可能位于一个节点上,而系统的其余部分位于另一个节点上,而不需要对代码进行太多更改

或者应该有3种不同的OTP应用程序


此外,如何使该系统水平缩放?例如,如果我现在意识到我的系统可以处理100个用户,并且我已经将消息路由器确定为主要瓶颈,那么我如何“仅仅添加另一个节点”,现在它可以处理200个用户

我只在学习期间开发了Erlang应用程序,但通常我们有许多小进程只做一件事,并向其他进程发送消息。Erlang的美妙之处在于,无论您是在同一个Erlang VM内还是在同一台计算机、同一个LAN或通过Internet发送消息,调用和指向其他进程的指针对于开发人员来说都是一样的

因此,您确实希望系统的每个小部分都有一个应用程序

这就是说,构造一个可以扩展的应用程序并没有使它变得更简单。根据经验法则,如果希望应用程序在10倍多的节点上工作,则需要重写,否则消息传递开销将太大。很明显,当你从1岁开始到2岁的时候,你也需要考虑它。 因此,如果您发现瓶颈,即处理太多客户端时速度特别慢的应用程序,您需要再次运行它,然后需要在启动第二个应用程序之前实现一些额外的负载平衡

假设主管检查消息内容是否有不适当的内容,因此速度较慢。在这种情况下,每个人都在交谈的节点将是一个简单的路由器应用程序,它将以循环方式将消息转发给主管应用程序的不同实例。如果这1个或2个实例还不够,您可以让路由器以某种方式编写,您可以通过发送控制消息来操纵实例的数量

但是,为了自动工作,您需要另一个进程来监视服务器,并发现服务器过载或未充分利用

我知道动态添加和删除资源听上去总是很不错的,但正如您所见,这是一项大量的工作,您需要构建一些消息传递系统来支持它,以及一个能够监控需求的监控系统


希望这能让您对如何实现这一点有所了解,不幸的是,我编写上一个Erlang应用程序已经一年多了,我不想提供可能出错的代码。

您使用了什么工具绘制顶部图表?我没有绘制,这是一个屏幕截图。但它来自OmniGaffle。谢谢你的回答!我特别喜欢最后的第二段。至少我没有遗漏一些明显的东西。我没有——我让erlang做了所有这些,因为这只是一个小任务。一般来说,Erlang和TCP可以做很多事情,如果对您来说还不够的话,您必须在应用程序之上实现一个额外的系统来检测网络和节点故障。