自己实现了下ReadIndex,但在TestSplitConfChangeSnapshotUnreliableRecoverConcurrentPartition3B这个测试中会导致只读请求报Request Time(跑了四五百次确认只有只读请求超时),概率大概是1/20的样子,看Log发现测试的Request中出现大量not_leader的问题,因为网络不稳定导致Leader经常退位。
自己分析原因是如果我只读请求通过Log同步,就算切换Leader我的Log还是有可能提交然后返回的,但是我做了ReadIndex以后切换Leader会让只读请求直接报错重发,导致了只读请求在不稳定的网络环境中一直在重发。
感觉可能是这个原因,如果是的话是不是不能做ReadIndex,或者请问大佬们有什么好的想法吗
这个问题可能是由于实现了 ReadIndex 导致的。ReadIndex 的实现确实会在切换 Leader 时导致只读请求直接报错重发,因为 ReadIndex 会强制要求 Leader 处理读请求,而不是将其转发给新的 Leader。因此,在不稳定的网络环境中,这可能会导致只读请求一直重发,从而导致超时和 not_leader
的问题。
如果您想要解决这个问题,可以考虑使用 Lease Read。与 ReadIndex 不同,Lease Read 不会强制要求 Leader 处理读请求,而是将其转发给新的 Leader。这样,在切换 Leader 时,只读请求可以继续被处理,而不会直接报错重发。另外,您还可以考虑优化网络环境,以减少 Leader 退位的频率,从而减少只读请求的重发次数。
此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。