gpt4 book ai didi

erlang - 分发 Erlang 聊天系统

转载 作者:行者123 更新时间:2023-12-02 06:58:35 27 4
gpt4 key购买 nike

我刚刚完成 Erlang 实践截屏视频(代码 here ),并且有一些关于分发的问题。

这是整体架构:

architecture

以下是监督树的样子:

supervisortree

阅读Distributed Applications让我相信主要动机之一是故障转移/接管。

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

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

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

最佳答案

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

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

话虽如此,构建可扩展的应用程序并没有变得更加简单。根据经验,如果您希望应用程序在 10 倍以上的节点上运行,则需要重写,否则消息传递开销将会太大。显然当你从1开始到2时你也需要考虑它。

因此,如果您发现瓶颈,即应用程序在处理太多客户端时特别慢,您希望第二次运行它,并且需要在启动第二个应用程序之前实现一些额外的负载平衡.

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

但是,为了自动工作,您需要有另一个进程来监视服务器并发现它们是否过载或利用率不足。

我知道,当您听说动态添加和删除资源时,听起来总是很棒,但正如您所看到的,这是一项繁重的工作,您需要构建一些允许它的消息传递系统以及监控系统可以监控需求。

希望这能让您了解如何完成它,不幸的是,距离我编写上一个 Erlang 应用程序已经过去一年多了,而且我不想提供可能错误的代码。

关于erlang - 分发 Erlang 聊天系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21458643/

27 4 0
文章推荐: Django Channels Nginx 制作
文章推荐: java - EWS Java API 1.1 创建约会 - 缺少 TimeZoneDefinition
文章推荐: django - Django中获取特定半径内的所有点
文章推荐: select - React,无法选择