在数据库中存储ejabberd状态信息

时间:2015-07-19 12:04:04

标签: redis erlang ejabberd

假设这个概念设置:

  • ejabberd集群(云中的实例或托管的SaaS)
  • ejabberd MySQL数据库(某些托管解决方案在其他地方)
  • 网站实例
  • 网站MySQL数据库(与ejabberd数据库相同,但数据库不同)

同样相关的是,目前网站实例已经直接访问ejabberd MySQL数据库,以便添加新用户(不需要名单和其他类似的东西,因此可以避免xml_rpc开销 - 尽管将来可能会改变)

现在我想编写一个模块,将存在信息存储在可以从网站访问的数据库中。

哪种解决方案更适合可扩展性和稳定性?

  1. 将新表添加到ejabberd MySQL表中,并使用ejabberd中其他地方使用的相同类型的代码与数据库进行通信以写入状态信息

  2. 分离http请求并让网络服务器进行写作

  3. 我不熟悉Erlang以及挂断/瓶颈可能在哪里......我猜这两种方法有些相似,数据库方法会更好,因为已经内部支持连接汇集...但只是想在开始编码之前检查。

1 个答案:

答案 0 :(得分:0)

您可以使用其他方法,或者:

  1. 查询ejabberd以从内存中获取存在。您可以使用XML,使用XML-RPC或Rest API。
    1. 使用Redis会话后端进行ejabberd并从Redis读取会话状态。您可能需要查看sm_db_type选项。出于性能原因,如果会话在线,它将仅存储记录,但不存储用户的实际存在。此Redis方法不会更改身份验证后端,并用于临时会话。
    2. 案例1效率更高,但可能不实际,具体取决于您计划如何使用状态。案例2效率稍低,但在所有情况下,都比使用MySQL或HTTP请求更有效。