理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos

2024-02-24 17:18

本文主要是介绍理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

理解分布式一致性:Paxos协议之Generalized Paxos & Byzantine Paxos

  • Generalized Paxos
  • Byzantine Paxos
    • Byzantine Multi-Paxos
    • Fast Byzantine Multi-Paxos

在前面一篇文章我们讲到了理解分布式一致性:Paxos协议之Cheap Paxos & Fast Paxos,本篇文章我会讲解Paxos协议的另外两个变种:Generalized Paxos和Byzantine Paxos。

Generalized Paxos

我们大家都知道,分布式一致性的最大问题就是数据同步的问题,而产生问题的原因就是冲突,按照之前讲到的各种Paxos协议方案,发生了冲突之后就必须解决冲突然后重新发送请求,这样就会提高数据同步的成本和时间,那么有没有更好的方式来解决这个问题呢?

答案肯定是有。在分布式系统中,冲突是不可避免的,遇到冲突的时候是不是每次都解决冲突然后重新发送请求呢?我们举个例子:

如果Client1发送请求ReadA,Client2 发送请求ReadB,系统4个Acceptors,有2个接收ReadA,有2个接收ReadB,在共识层面来说,因为没有达到最大的共识个数,达不成共识,需要重新发送。但是如果我们仔细观察一下两个请求,ReadA,ReadB这两个命令是没有任何联系的,无论先执行哪一个都是同样的效果。那么我们可以认为这种情况是没有冲突的,我们在执行层面自行安排两个请求的顺序,而不用再次共识。 这就叫做Generalized Paxos。

这种共识的前提就是不同命令的先后顺序无关。下面以序列图的形式更加详细的介绍:

Client1 Client2 Leader Acceptor1 Acceptor2 Acceptor3 Learner Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadB) Accept!(ReadB) Accept!(ReadB) Accept!(ReadB) Leader and Acceptor1 Accepted(N,<ReadA,ReadB>), Acceptor2 and Acceptor3 Accepted(N,<ReadB,ReadA>), 顺序无关,不冲突,最终值 Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) Accepted(N,<ReadA,ReadB>) 下面是冲突的情况 ,WriteA和 ReadA同时发 生,产生冲突时, Leader自行 解决冲突,需要重 发请求 Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(ReadA) Accept!(WriteA) Accept!(WriteA) Accept!(WriteA) Accept!(WriteA) Accepted(N,<ReadA,WriteA>) Accepted(N,<ReadA,WriteA>) Accepted(N,<WriteA,ReadA>) Accepted(N,<WriteA,ReadA>) 冲突产生, Leader根据协议自行决定执行顺序,这里是<ReadA,WriteA>,N+1 Accept!(N+1,<ReadA,WriteA>) Accept!(N+1,<ReadA,WriteA>) Accept!(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Accepted(N+1,<ReadA,WriteA>) Client1 Client2 Leader Acceptor1 Acceptor2 Acceptor3 Learner

Byzantine Paxos

最后一个我们要讲的Paxos协议是Byzantine Paxos。熟悉虚拟货币的人应该对拜占庭协议并不陌生,这里我们也不多讲拜占庭协议,后面我会用单独的文章来详细介绍拜占庭协议。

上面我们讲到的所有的Paxos协议,只讲到了服务出错的情况,并没有考虑服务伪造篡改信息的情况,即并没有考虑到恶意节点。而拜占庭协议就是为了解决这个问题而产生的。

Byzantine Paxos比正常的Paxos协议多了一个消息验证的过程,这个验证使用了拜占庭协议。

Byzantine Multi-Paxos

下面是个Byzantine Multi-Paxos的序列图:

Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner Request Accept!(N,I,V) Accept!(N,I,V) Accept!(N,I,V) 验证消息 Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Verify(N,I,V) - BROADCAST Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Accepted(N,V) Response(V) Client Proposer Acceptor1 Acceptor2 Acceptor3 Learner

Fast Byzantine Multi-Paxos

同样的也会有Fast Byzantine Multi-Paxos,为了更加Fast,本协议将Verify和Accepted进行融合,放在一步完成。

Client Acceptor1 Acceptor2 Acceptor3 Learner Accept!(N,I,V) Accept!(N,I,V) Accept!(N,I,V) 验证消息,同时 Accepted Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Accepted(N,I,V) - BROADCAST Response(V) Client Acceptor1 Acceptor2 Acceptor3 Learner

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

更多教程请参考flydean的博客

这篇关于理解分布式一致性:Paxos协议之Generalized Paxos Byzantine Paxos的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/742783

相关文章

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

深入理解Apache Kafka(分布式流处理平台)

《深入理解ApacheKafka(分布式流处理平台)》ApacheKafka作为现代分布式系统中的核心中间件,为构建高吞吐量、低延迟的数据管道提供了强大支持,本文将深入探讨Kafka的核心概念、架构... 目录引言一、Apache Kafka概述1.1 什么是Kafka?1.2 Kafka的核心概念二、Ka

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

关于WebSocket协议状态码解析

《关于WebSocket协议状态码解析》:本文主要介绍关于WebSocket协议状态码的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录WebSocket协议状态码解析1. 引言2. WebSocket协议状态码概述3. WebSocket协议状态码详解3

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

redis+lua实现分布式限流的示例

《redis+lua实现分布式限流的示例》本文主要介绍了redis+lua实现分布式限流的示例,可以实现复杂的限流逻辑,如滑动窗口限流,并且避免了多步操作导致的并发问题,具有一定的参考价值,感兴趣的可... 目录为什么使用Redis+Lua实现分布式限流使用ZSET也可以实现限流,为什么选择lua的方式实现

Seata之分布式事务问题及解决方案

《Seata之分布式事务问题及解决方案》:本文主要介绍Seata之分布式事务问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Seata–分布式事务解决方案简介同类产品对比环境搭建1.微服务2.SQL3.seata-server4.微服务配置事务模式1

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.