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发起了读请求,这样两个客户端将读取到不同的数据。
相关推荐
失散1311 分钟前
软件设计师——09 数据库技术基础
数据库·软考·软件设计师
爱奥尼欧18 分钟前
【Linux】网络部分——Socket编程 UDP实现网络云服务器与本地虚拟机的基本通信
linux·服务器·网络
养生技术人27 分钟前
Oracle OCP认证考试题目详解082系列第53题
数据库·sql·oracle·database·开闭原则·ocp
iconball1 小时前
个人用云计算学习笔记 --20 (Nginx 服务器)
linux·运维·笔记·学习·云计算
银帅183350309711 小时前
2018年下半年试题四:论NoSQL数据库技术及其应用
数据库·架构·nosql
Wang's Blog1 小时前
Linux小课堂: 在 VirtualBox 虚拟机中安装 CentOS 7 的完整流程与关键技术详解
linux·运维
liu****1 小时前
基于websocket的多用户网页五子棋(九)
服务器·网络·数据库·c++·websocket·网络协议·个人开发
liu****1 小时前
基于websocket的多用户网页五子棋(八)
服务器·前端·javascript·数据库·c++·websocket·个人开发
Elastic 中国社区官方博客1 小时前
Elasticsearch:使用推理端点及语义搜索演示
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
馨谙1 小时前
Linux中权限系统
linux·运维·服务器