分布式协议——Paxos、Raft和ZAB

摘要:
参考:分布式系统协议Paxos、Raft和ZABPaxos算法是一种提高分布式系统容错率的一致性算法Paxos算法的步骤是这样:1.首先有两种角色,一个是“提议者”,一个是“接受者”。Zookeeper使用ZAB协议来保持集群中各副本之间数据的一致性。因此,ZAB协议保证了一个全局的变更序列被顺序执行。

参考:分布式系统协议Paxos、Raft和ZAB

Paxos算法是一种提高分布式系统容错率的一致性算法

Paxos 算法的步骤是这样:

1.首先有两种角色,一个是“提议者”,一个是“接受者”。提议者可以向接受者提出提议,然后接受者表达意见。

2.因为存在多个提议者,如果同时表达意见会出现意见不一致的情况,所以首先需要尽快选出一个领导者,让意见统一。

3.然后领导者会给接受者发出提议,如果一个提议被大多数接受者接纳,这个提议就通过了。

Raft协议

Raft 协议的每个副本都会处于三种状态之一:Leader、Follower、Candidate。

Leader:所有请求的处理者,Leader 副本接受 client 的更新请求,本地处理后再同步至多个其他副本。

Follower:请求的被动更新者,从 Leader 接受更新请求,然后写入本地日志文件。

Candidate:如果 Follower 副本在一段时间内没有收到 Leader 副本的心跳,则判断 Leader 可能已经故障,此时启动选主过程,此时副本会变成 Candidate 状态,直到选主结束。

每一个副本都会维护一个 term,类似于一个逻辑时钟,每发生一个动作就会递增,通过比较每个提议的 term,副本会默认使用最新的 term,防止发生冲突。如果一个 Leader 或者 Candidate 发现自己的 term 不是最新的了,就会自动降级到 Follower,而如果一个 Follower 接收到低于自己当前 term 的提议,就会直接抛弃。

参考:从Paxos到Zookeeper分布式一致性原理与实践

ZAB(Zookeeper Atomic Broadcast)协议是为分布式协调服务Zookeeper专门设计的一种支持奔溃恢复的原子广播协议。

Zookeeper使用ZAB协议来保持集群中各副本之间数据的一致性。

Zookeeper使用一个单一的主进程来接收并处理客户端的所有事物请求,并采用ZAB的原子广播协议,将服务器数据的状态变更以事务Proposal(事务提议)的形式广播到所有的副本进程上去。

ZAB协议保证了:

1.同一时刻集群中只有一个主进程来广播服务的状态变更,这样能够很好地处理客户端大量的并发请求

2.在分布式环境中,顺序执行的状态变更前后会存在一定的依赖关系。因此,ZAB协议保证了一个全局的变更序列被顺序执行。

ZAB协议包括了两种基本的模式:崩溃恢复消息广播

崩溃恢复:1.如果leader服务器出现奔溃退出或机器重启,或者是集群中已经不存在过半的服务器与该leader服务器保持正常通信,那么在重新开始新一轮的原子广播操作之前,所有进程首先会使用奔溃恢复协议来使彼此达到一个一致的状态,此时整个ZAB流程就会从消息广播模式进入奔溃恢复模式。

消息广播:2.ZAB协议中的消息广播使用的是一个原子广播协议,类似于一个二阶段提交的过程。在整个消息广播过程中,leader服务器会为每个事务请求生成对应的proposal来进行广播,每个follower服务器在接收到这个事务proposal之后,都会首先讲其以事务日志的形式写到磁盘中,并且在成功写入后反馈给leader服务器一个Ack响应。当leader服务器接收到超过半数follower的Ack响应后,就会广播一个Commit消息给所有的follower服务器以通知其进行事务提交,同时leader自身也会完成对事务的提交。

在ZAB协议的事务编号ZXID设计中,ZXID是一个64位的数字。

其中低32位是一个递增的计数器,对客户端的每个事务请求,leader服务器在产生一个新的事务proposal的时候,都会对该计数器进行+1

其中高32位表示了leader周期的epoch编号,每选举一个新leader,就会从这个新的leader服务器中取得最大事务proposal的ZXID,从中解析出对应的epoch值,对其进行+1

免责声明:文章转载自《分布式协议——Paxos、Raft和ZAB》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RFS自动化测试工具安装与使用总结RTMP、RTSP、HTTP视频协议详解(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

linux(centos8):安装分布式事务服务seata(file单机模式,seata 1.3.0/centos 8.2)

一,什么是seata? Seata:Simpe Extensible Autonomous Transcaction Architecture, 是阿里中间件,开源的分布式事务解决方案。 前身是阿里的Fescar 官方站: http://seata.io/zh-cn/ 官方代码地址: https://github.com/seata/seata 官方文档...

深度分析:高并发系统架构设计原理,史上最全系列!

架构设计是一系列相关的抽象模式,是人们对一个结构内的元素及元素间关系的一种主观映射的产物。 一、计算机网络基础 A. OSI模型 OSIOpen System Interconnection,简称OSI模型或七层模型。开放系统互连参考模型,是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互连参考模型,为开放式互连信息系统...

项目中应该怎么选择MySQL的事务隔离级别

知识点总结 1.数据库默认隔离级别: mysql :Repeatable Read; oracle、sql server :Read Commited 2.mysql binlog的格式三种:statement,row,mixed 3.为什么mysql用的是Repeatable Read而不是Read Commited:在 5.0之前只有statement...

atomikos分布式事务的几个坑

atomikos几个坑:1.jta.properties:com.atomikos.icatch.output_dir=/datayes/atomikoscom.atomikos.icatch.log_base_dir=/datayes/atomikos若一个tomcat上有两个atomikos应用,则两个应用不要公用同一位置2.datasource的用户...

Raft协议--中文论文介绍

本篇博客为著名的 RAFT 一致性算法论文的中文翻译,论文名为《In search of an Understandable Consensus Algorithm (Extended Version)》(寻找一种易于理解的一致性算法)。 Raft 是一种用来管理日志复制的一致性算法。它和 Paxos 的性能和功能是一样的,但是它和 Paxos 的结构不一...

浅谈“微服务”

微服务概述 1.1 易于扩展 1.2 部署简单 1.3 技术异构性 数据库的服务化切分 2.1 什么是“分库分表”? 2.2 数据库扩展的几种方式 2.3 分库分表的几种方式 2.4 引入分库分表中间件后面临的问题 2.5 现有分库分表中间件的横向对比 微服务架构中的分布式事务 3.1 什么是事务? 3.2 事务的四大特性 ACID 3.3 事...