Raft 读请求性能分析

Raft保证读请求Linearizability的方法
  • Leader把每次读请求作为一条日志记录,以日志复制的形式提交,并应用到状态机后,读取状态机中的数据返回。(一次RTT、一次磁盘写)

  • 使用Leader Lease,保证整个集群只有一个Leader,Leader接收到都请求后,记录下当前的commitIndex为readIndex,当applyIndex大于等于readIndex 后,则可以读取状态机中的数据返回。(0次RTT、0次磁盘写)

  • 不使用Leader Lease,而是当Leader通过以下两点来保证整个集群中只有其一个正常工作的Leader:

    (1)在每个Term开始时,由于新选出的Leader可能不知道上一个Term的commitIndex,所以需要先在当前新的Term提交一条空操作的日志;

    (2)Leader每次接到读请求后,向多数节点发送心跳确认自己的Leader身份。之后的读流程与Leader Lease的做法相同。(一次RTT、0次磁盘写)

  • 从Follower节点读:

    • Follower先向Leader询问readIndex,Leader收到Follower的请求后依然要通过2或3中的方法确认自己Leader的身份,然后返回当前的commitIndex作为readIndex,Follower拿到readIndex后,等待本地的applyIndex大于等于readIndex后,即可读取状态机中的数据返回。(2次或1次RTT、0次磁盘写)
Raft保证读请求Sequential Consistency的方法
  • Leader处理每次读写、Follower处理每次读请求时,都返回本节点的applyIndex,客户端在本地保存自己看到的最新的applyIndex。客户端每次请求时都带上这个applyIndex(假设为clientIndex),Leader或者Follower拿客户端请求中的clientIndex和自己本地的applyIndex比较,如果applyIndex大于等于clientIndex,则可以读取状态机数据返回,否则等待,直到applyIndex大于等于clientIndex。(0次RTT、0次写磁盘)
Linearizability和Sequential Consistency的区别

Linearizability - All processes see all shared accesses in the same order. Accesses are furthurmore ordered according to a global timestamp
Sequential - All processes see all shared accesses in the same order. Accesses are not ordered in time.

  • 举个例:在Raft中,Linearizability读保证任何一个客户端的读请求对其他所有客户端后续的请求都是可见的 ,而Sequential读保证某个客户端自己的读请求对后续自己的请求是可见的。比如其中一个客户端提交了写请求且Leader上更新了状态机,接着此客户端向Leader发起读请求,而由于Follower可能还没有apply这条日志,所以另一个客户端向Follower发起了读请求,这样两个客户端将读取到不同的数据。
相关推荐
|_⊙1 分钟前
Linux 深入理解文件(IO)
linux·运维·服务器
贫民窟的勇敢爷们2 分钟前
SpringBoot整合MyBatis-Plus极致实战,高效实现数据库CRUD与分页条件查询
数据库·spring boot·mybatis
2401_880071403 分钟前
Redis怎样查询集群的整体健康状态_使用cluster info指令查看槽位覆盖率与节点状态
jvm·数据库·python
2301_815901975 分钟前
Go语言如何写负载均衡器_Go语言负载均衡器实战教程【完整】
jvm·数据库·python
kyle~5 分钟前
Linux时间系统4---从PHC_PTP到ROS 2驱动与控制链路
linux·运维·数码相机
Mahir088 分钟前
Redis 三大缓存问题:穿透、击穿、雪崩的原理与完整解决方案
数据库·redis·缓存·面试·大厂面试题
dFObBIMmai9 分钟前
Redis怎样定位每秒被高频访问的热点键
jvm·数据库·python
m0_609160499 分钟前
golang如何实现负载均衡器组件_golang负载均衡器组件实现详解
jvm·数据库·python
largecode10 分钟前
给用户打电话,怎么在对方手机显示为“XX旅游”?号码认证办理教程
linux·服务器·容器·智能手机·ssh·旅游·vagrant
m0_5913647313 分钟前
SQL如何解决GROUP BY导致查询变慢_利用覆盖索引进行优化
jvm·数据库·python