美文网首页jraft
jraft源码阅读7一一致性读

jraft源码阅读7一一致性读

作者: 黄云斌huangyunbin | 来源:发表于2019-04-13 10:18 被阅读0次
一致性读就是java的vaoilet的意思,就是写入之后再去读,一定能读到刚刚写入的值。

这就意味着读也只能去leader,因为follower是有延时的,不能保证马上读到最新的值。

但是问题来了,raft中对leader的角色是不确定的。你认为的leader在你发给他请求的时候,可能已经不是leader了,那要怎么办呢?

解决方法1 问下其他节点,确定自己是不是leader,只要半数以上认可自己是leader,那就是ok的。这里的问,其实就是心跳了
解决方法2 为了提高性能,不用每次都问其他的节点,设定一个比较短的时间,认为这个短时间内leader是不会变的。

看看源码是怎么做的:

解决返回一:
接受一致性读的请求


image.png

确认自己的leader,发送心跳给其他节点


image.png

超过半数心跳成功,就返回成功结果


image.png

解决方法2:
默认是任期的90%的时间,认为是leader没变的
private int leaderLeaseTimeRatio = 90;

image.png

leader过期的时候,和解决方法一是一样的了
没过期就是直接返回了。

相关文章

网友评论

    本文标题:jraft源码阅读7一一致性读

    本文链接:https://www.haomeiwen.com/subject/euxlwqtx.html