Raft实现线性一致性及优化

文章讲述了线性一致性模型在分布式系统中的重要性,特别是Raft协议如何通过ReadIndex策略和LeaseRead优化来保证一致性,同时讨论了这两种方法的优缺点和性能影响。

线性一致性

线性一致性(Linearizability)是最强的一致性模型,CAP定理中的C就是指线性一致性。
在这里插入图片描述
线性一致性强调操作是原子的,整个分布式系统看起来好像只有一个节点。
严格定义如下:给定一个执行历史,执行历史根据并发操作可以扩展为多个顺序历史(Sequential History),只要从中找到一个合法的顺序历史,那么该执行历史就是线性一致的。

线性一致性主要有两个约束条件,第一,顺序记录中的任何一次读必须读到最近一次写入的数据;第二,顺序记录要跟全局时钟下的顺序一致。
为了实现线性一致性,往往需要原子CAS等操作等开销,性能会收到影响。

raft实现线性一致性

当出现网络分区时,可能会出现两个领导者。旧领导者仍在工作,但集群其他部分选举出一个新的领导者,并提交了新的日志条目。如果此时客户端联系的领导者是旧领导者,那么旧领导者会将结果返回给客户端。线性一致性要求读操作必须返回最近的一次写操作给客户端。
实现线性一致性的一种办法是,领导者将读请求当作写请求处理即读请求也走Raft,领导者收到读请求时同样写入一条日志,等到raft集群将该日志复制、提交并应用到状态机后,返回读请求结果。因为旧领导者是不能提交日志的。
这种方法的问题是,每次读请求都需要完整的运行一次Raft实例,尤其是需要复制日志并将日志写入多数派节点的持久化存储,造成额外的性能开销。

目前主要有两种方法实现线性一致性:etcd中采用Read Index策略,TiKV采用Read Index和Lease Read掌权时间。

Read Index

主要流程如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值