To avoid reading from stale data , besides reading directly from the leader , is it also possible that the follower broadcast the read request through all the nodes , then select the lastest marjority confirmed version of data as the one needed and return it to client ? That is :
1> Client send the read requests randomly to the nodes, whether it's a leader or a follower.
2> Each follower has a seperate RPC interface named like 'InnterRead' specifically for this purpose. It returns the lastest version of data from its replicated log ,not the committed state machine.
3> If a follower receive a read request from client ,broadcasting it among the cluster, pick up the lastest majority confirmed version of data , return it to the client. Since it is majority confirmed and lastest, it must be the same with the version in leader's state machine.
This can help leader to reduce a great amount of reading payload , but also introduce great traffics(increasing linearly as #nodes grows) inside the cluster. I think this is a tradeoff suitable for a fifty-fifty read-write application.
Are there implementations done like this ?