将后端服务器ip:port通过负载均衡器发送回客户端是一种好的做法

时间:2017-01-08 17:44:10

标签: architecture scalability distributed

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

客户端最初连接到负载均衡器,负载均衡器响应客户端随后应该与之通信的服务器。来自客户端的后续命令直接转到已分配给它的实例。为了管理国家,我考虑使用Raft algorithm达成共识。

1 个答案:

答案 0 :(得分:0)

不确定为什么要在这里实施像Raft这样的共识算法。传统上RAFT用于选举领导者。听起来不像你需要这个。类似的东西:

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

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

处理客户端错误。如果检测到错误,请重新连接到负载均衡器并获取新服务器。所有聊天状态不应保留在临时聊天服务器实例上,而应保留在Redis等某种全局数据存储中。

这使您可以高度扩展。在极端规模下,您可能会遇到Redis的数据存储问题,但可以使用Redis Cluster或分享聊天来缓解这些问题。