JDY一面挂
写了一个Raft的玩具,然后遇到了一个做分布式基架的,直接被问到G了。
问:Follower处于少数的Network Partition中会一直让TermID递增,这样有什么问题,能怎么解决?
我的回答:这样对Raft集群的工作来说是没事的,只是会导致出现很多的空的TermID。后面得知有一种预选举的优化。
问:如果旧Leader处于一个Network Partition中,然后出现了一个新的Leader,此时如果读旧的Leader的话,会导致脑裂吗?
我的回答:不会,因为在我的实现里面Read也是要添加到日志中的,旧的Leader无法做到这一点,所以会一直超时。面试官对这个回答不满意,因为Read走日志的话会导致性能问题。
后面查资料,了解到了Leader的退位机制,但是其实我的那种方案也是存在的(Read as Proposal),估计是面试官看不上这样的实现。
总之就是挂了,但是还是学到了一些关于Raft的东西。