我有面向用户的端点,例如 xmpp.host.com。但是,在内部,我想在 xmpp1.host.com、xmpp2.host.com 之间分配负载……如果不将此逻辑移到 xmpp 服务器本身内部,最好的方法是什么
顺便说一句,我现在正在使用 ejabberd。
答案1
我建议使用基于 DNS 的负载平衡。通过定义多个SRV 记录,您不仅可以实现负载平衡,还可以按照您的意愿进行分配(例如,您可能希望将 60% 的负载放在容量较大的服务器上,将剩余的负载放在容量较小的服务器上),还可以定义故障转移服务器。
像 ejabberd 这样的 XMPP 服务器的 SRV 查询可能看起来像:-xmpp_client._tcp.yourdomain
答案2
最好的方法是让 xmpp.host.com 成为负载均衡器上的 VIP,并设置某种粘性负载平衡或基于客户端 IP 的哈希,以便来自客户端的请求返回到他们之前登录的同一服务器,这样您不必在 XMPP 服务器之间传输状态信息。