2

我们正在尝试在聊天应用程序中实现 Raft。据我所知,Raft 是用于复制的,仅此而已。那么当一个客户端想要连接到聊天服务器与另一个客户端聊天时,Raft 是否要求所有客户端都只连接到领导者?如果是,如果它连接到一个追随者,追随者可以将其重定向到领导者。但是然后呢?领导者是否再次将其分配给跟随者节点,即领导者本质上是否也充当负载平衡器,或者它是否通过在所有其他服务器上复制用户数据来完成所有工作?

4

1 回答 1

0

如果追随者告诉客户端当前领导者的地址,并且客户端必须重新连接到领导者,那么领导者就会超载。问题是领导者已经在为日志复制进行计算,并且所有客户端处理也发生在领导者上,而其他节点实际上是空闲的。此外,这严重限制了您拥有的客户端连接数。

另一方面,如果追随者接受客户端连接并将请求转发给领导者(通过长期存在的 tcp 连接),它会形成一种连接扇出,以减轻领导者的负载。您可以对追随者进行的处理越多越好。

扩展上述内容,我发现成功使一些节点对客户端不可见,并且这些节点更倾向于成为领导者。这样,它们就不会受到客户端处理的阻碍。

于 2017-10-25T05:46:50.977 回答