【问题标题】:How to balance MUC processes in an ejabberd cluster如何平衡 ejabberd 集群中的 MUC 进程
【发布时间】:2016-04-04 11:32:31
【问题描述】:

我们有一个包含大约 700,000 个持久聊天室的 ejabberd 集群。我们面临的问题是启动集群的第一个节点大约需要 1 小时,因为所有房间的 Erlang 进程都在该节点上启动。

即使在集群初始化并且我们说有 4 个节点正在运行之后,MUC 进程也不会在节点之间保持平衡。可以有一个节点使用 90% 的内存,而另一个节点使用 5%。

有没有办法一次启动一个集群的多个节点,让MUC负载从一开始就均匀分布,启动速度更快?

任何人都可以提出一种解决方案来平衡集群节点之间的 MUC 进程吗?

它现在的工作方式显然是不可扩展的,因为随着房间数量的增加,我们在集群中启动的第一个节点上需要越来越多的 RAM,而且启动时间也会增加。

非常感谢, 亚历克斯

【问题讨论】:

    标签: xmpp ejabberd


    【解决方案1】:

    在当前的 ejabberd 社区版中没有这样的功能。您将需要一个定制的 MUC 模块来匹配您特定的大量房间需求。更多的是跨集群对 MUC 进行负载平衡。您需要以牺牲存储和 CPU 为代价,积极地针对 RAM 进行大规模优化。

    【讨论】:

      【解决方案2】:

      您可以动态加载 MUC 房间。当需要时,您只需使用旧选项启动房间(永久房间意味着使用旧配置启动房间)。

      使用这种机制,这两个问题都将得到解决: 1)Ejabberd开始时间(不开始任何MUC房间,因为它是根据需要) 2)负载平衡(因为如果该房间的第一个请求转到其他节点,那么房间将在那里创建。

      【讨论】:

      • 嘿 Girdhar - 你能详细解释一下吗?这是我在某处遗漏的配置选项,还是您对模块进行的自定义?
      • 我的意思是在创建房间时只需检查该房间是否已经存在于数据库中?如果它存在于 db(persistent room) 中,则使用这些房间配置,否则创建新房间。Alwasys 在没有参与者时销毁房间。没有这样的配置。您必须为此更改模块。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-09-18
      • 2016-06-04
      • 2017-01-18
      • 2017-08-11
      • 1970-01-01
      • 2016-12-09
      • 1970-01-01
      相关资源
      最近更新 更多