xnnyygn / xraft

xnnyygn's raft implementation
MIT License
229 stars 108 forks source link

关于心跳 #9

Closed HsuChungYuan closed 4 years ago

HsuChungYuan commented 4 years ago

心跳间隔如果设置为1秒,会有如下两种现象:

  1. 实际的心跳间隔为2秒,猜测一秒太短来不及执行?
  2. kvstore-set指令返回极慢,猜测由于心跳命令走的相同的链路,导致set指令得不到执行 如果心跳间隔设置为10秒(相应地增加超时时间),则不会有上述两种现象 心跳间隔设置为10秒则实际地心跳间隔也为10秒 上述情况不知是否是我机器的问题 G@HJDHA(2J B2WEU)_5V@SP
HsuChungYuan commented 4 years ago

经过更进一步的测试发现上述情况会在集群配置的机器部分宕机时发生,如配置三台机器只有两台在线,如果集群配置的机器全部正常,则实际心跳间隔正常

HsuChungYuan commented 4 years ago

测试发现kvstore-set响应极慢也是由于实际心跳间隔不正确导致的,故问题的实质为机器部分宕机时通信行为耗时过长

HsuChungYuan commented 4 years ago

就是这个函数在获取channel失败时需要耗费2秒钟,导致实际心跳间隔为2秒 HF9MA0XH@W %C(441 $5{5Q OutBoundChannelGroup#getOrConnect

HsuChungYuan commented 4 years ago

我为获取连接设置了一个超时时间,现在即使部分机器宕机也能正常工作了,这个超时时间具体为多少可以修改,只需要满足一个条件,小于心跳间隔 {ZUO9Y GPGYM}PC6E` ITX5

xnnyygn commented 4 years ago

谢谢。我不是很清楚ChannelFuture的await是否等价于连接超时。Netty的bootstrap的channel options里可能有一个connection timeout。如果有的话,你可以做一个Pull Request,我这边review一下合并到master。