Architecture 通过负载平衡器将后端服务器ip:端口发送回客户端是一种好做法吗

Architecture 通过负载平衡器将后端服务器ip:端口发送回客户端是一种好做法吗,architecture,scalability,distributed,Architecture,Scalability,Distributed,作为分布式系统学习的一部分,我正在构建一个聊天应用程序。目前,我的设计是让每台服务器都知道它们连接到的客户端(这是将使用一致算法复制的状态) 客户机最初连接到一个负载平衡器,负载平衡器与客户机随后应与之对话的服务器进行响应。来自客户端的后续命令直接转到已分配给它的实例。为了管理状态,我正在考虑使用Raft算法来达成共识。不确定为什么要在这里实现像Raft这样的共识算法。传统上,木筏是用来选举领导人的。听起来你不需要这个。比如: 客户端>负载平衡器(haproxy)>聊天服务器池 Haproxy(

作为分布式系统学习的一部分,我正在构建一个聊天应用程序。目前,我的设计是让每台服务器都知道它们连接到的客户端(这是将使用一致算法复制的状态)


客户机最初连接到一个负载平衡器,负载平衡器与客户机随后应与之对话的服务器进行响应。来自客户端的后续命令直接转到已分配给它的实例。为了管理状态,我正在考虑使用
Raft算法
来达成共识。

不确定为什么要在这里实现像Raft这样的共识算法。传统上,木筏是用来选举领导人的。听起来你不需要这个。比如:

客户端>负载平衡器(haproxy)>聊天服务器池

Haproxy(负载平衡器)可以对服务器池执行运行状况检查。如果服务器死亡,它将从池中删除。当服务器变得热/紧张时,它可能会“失败”从池中删除健康检查(后端服务器应通过健康检查抛出503 http状态),当流量停止时,服务器将重新添加回池中。您可以提醒/监视正常聊天服务器池成员的数量

在客户端处理错误。如果检测到错误,请重新连接负载平衡器并获取新服务器。所有聊天状态不应该保存在短暂的聊天服务器实例上,而应该保存在诸如Redis之类的全局数据存储上

这使您具有高度的可伸缩性。在极端规模下,Redis可能会出现数据存储问题,但这可以通过Redis群集或共享聊天来缓解