分布式与一致性协议之CAP和Paxos算法(一)

CAP 理论

如何使用BASE理论

以InfluxDB系统中DATA节点的集群实现为例。DATA节点的核心功能是读和写,所以基本可用是指读和写的基本可用。我们可以通过分片和多副本实现读和写的基本可用。也就是说,将同一业务的数据先分片,再以多份副本的形式分布在不同的节点上。如图所示。除非这个3节点2副本的DATA集群超过一半的节点都发生故障,否则是能保障所有数据的读写的。
在这里插入图片描述

那么,如何实现最终一致性呢?就像上文提到的,我们可以通过写时修复和异步修复实现最终一致性。另外可以同时实现自定义写一致性级别,如支持All、Quorum、One、Any4种写一致性级别,用户在写数据的时候,可以根据业务数据特点,设置不同的写一致性级别。

注意

对于任何集群而言,不可预知的故障的最终后果都是系统过载,所以,如何设计过载保护,实现系统在过载时的基本可用,时开发和运营互联网后天的分布式系统的重中之重。建议在开发实现分布式系统前就要充分考虑如何实现基本可用

Paxos算法

概述

提到分布式算法,就不得不提Paxos算法,在过去几十年里,它基本上时分布式共识的代名词,当前最常用的一批共识算法都是基于它改进的。比如, Fast Paxos算法、Cheap Paxos算法、Raft算法等。但是,很多人都会在准确和系统理解Paxos算法上踩坑,比如,只知道它可以用来达成共识,却不知道它是如何达成共识的。
这其实从侧面说明了Paxos算法有一定的难度,可分布式算法本身就很复杂,Paxos算法自然也不会例外。当然,除了这一点,还与Paxos算法的提出者莱斯利兰伯特有关。
兰伯特提出的Paxos算法包含两个部分:

  • 1.一个是Basic Paxos算法,描述的是多节点之间如何就某个值(提案Value)达成共识
  • 2.另一个是Multi_Paxos思想,描述的是执行多个Basic Paxos示例,就一系列值达成共识。
    但是,因为兰伯特提到的Multi-Paxos思想缺少代码实现的必要细节(比如怎么选举领导者),所以我们理解起来比较困难

Basic Paxos:如何在多个节点间确定某变量的值。

在我看来,Basic Paxos是Multi-Paxos思想的核心,说白了,Multi-Paxos就是多执行几次Basic Paxos。所以掌握了Basic Paxos,我们便能更好地理解后面基于Multi-Paxos思想的共识算法(比如Raft算法),还能掌握分布式共识算法的最核心内容,当现有算法不能满足业务需求时,可以权衡折中,设计自己的算法。

假设我们要实现一个分布式集群,这个集群由节点A、B、C组成,提供只读KV存储服务。你应该知道,创建只读变量的时候必须要对它进行赋值,而且后续不能对该值进行修改。也就是说,一个节点创建只读变量后,就不能再修改它了,所以,所有节点必须要先对只读变量的值达成共识,然后再由所有节点一起创建这个只读变量。那么,当有多个客户端(比如客户端1、2)访问这个系统,试图创建同一个只读变量(比如X)时,例如客户端1试图创建值为3的X,客户端2试图创建值为7的X,该如何达成共识,实现各节点上X值的一致呢?如图所示
在这里插入图片描述

在一些经典的算法种,你会看到一些既形象又独有的概念(比如二阶段提交协议种的协调者),Basic Paxos算法也不例外。为了帮助人们
更好地理解Basic Paxos算法,兰伯特在讲解时也使用了一些独有而且比较重要的概念,如提案(Propose)、准备(Prepare)请求、接受(Accept)请求
、角色等,其中最重要的就是"角色"。因为角色时对Basic Paxos中最核心的3个功能的抽象,比如,由接受者(Acceptor)对提议的值进行投票,
并存储接受的值

你需要了解的3种角色

在Basic Paxos中有提议者(Proposer)、接收者(Acceptor)、学习者(Learner)3种角色,它们之间的关系如图所示。
在这里插入图片描述

  • 提议者: 提议一个值,用于投票表决。为了方便理解,你可以把上图中的客户端1和客户端2看作提议者。但在绝大多数场景中,集群中收到客户端请求的节点菜是提议者,这样做的好处是,对业务代码没有入侵性,也就是说,我们不需要在业务代码中实现算法逻辑,就可以像使用数据库一样访问后端的数据
  • 接受者:对每个提议的值进行投票,并存储接受的值,比如A、B、C3个节点,一般来说,集群中的所有节点,都在扮演接受者的角色,参与共识协商,并接受和存储数据
  • 学习者:被告知投票的结果,接受达成共识的值并存储该值,不参与投票的过程,一般来说,学习者是数据备份节点,比如
    Master-Slave模型中的Slave,被动地接受数据,容灾备份。

你可能会疑惑:前面不是说接收客户端请求的节点是提议者吗?这里怎么又说该节点是接受者呢?这是因为一个节点(或进程)可以身兼多个角色。想象一下,一个3节点的集群,1个节点收到了请求,那么该节点将作为提议者发起二阶段提交,然后这个节点还会和另外两个节点一起作为接受者进行共识协商,如图所示。
在这里插入图片描述

其实,这3种角色在本质上代表的是3种功能:

  • 1.提议者代表接入和协调功能,收到客户端请求后,发起二阶段提交,进行共识协商;
  • 2.接受者代表投票协商和存储数据功能,对提议的值进行投票,接受达成共识的值并存储该值
  • 3.学习者代表存储数功能,不参与共识协商,只接受达成共识的值并存储该值

因为一个完整的算法过程是由这3种角色对应的功能组成的,所以理解这3种角色是理解Basic Paxos如何就提议的值达成共识的基础

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/584794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

录屏功能怎么打开?这3个小技巧你得学会

当我们在使用电子设备时,您是否也想将屏幕上的精彩内容分享给他人,又或者想要记录自己的操作步骤。这时,录屏功能就显得尤为重要。那么,录屏功能怎么打开? 接下来,我将为大家详细介绍3种常见的打开录屏功能…

vue知识

一、初始vue Vue核心 Vue简介 初识 (yuque.com) 1.想让Vue工作,就必须创建一个Vue实例,且要传入一个配置对象 2.root容器里的代码依然符合html规范,只不过混入了一些特殊的Vue语法 3.root容器里的代码被称为【Vue模板】 4.Vue实例和容器…

关于远程桌面与3389端口的深度解析

当我们谈论远程桌面和3389端口时,我们实际上是在探讨Windows操作系统的一个核心功能,该功能允许用户通过网络从任何地点远程控制和管理计算机。而3389端口,正是这一功能所依赖的通信端口。 一、远程桌面的工作原理 远程桌面协议(R…

gateway全局token过滤器

添加gateway依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency>创建一个tokenFilter 实现全局过滤器GlobalFilter,并且实现fitler方法 Value("${…

qt5-入门-2D绘图-基础

参考&#xff1a; QPainter_w3cschool https://www.w3cschool.cn/learnroadqt/k7zd1j4l.html C GUI Programming with Qt 4, Second Edition 本地环境&#xff1a; win10专业版&#xff0c;64位&#xff0c;Qt 5.12 代码已经测试通过。其他例子日后更新。 目录 基础知识penb…

场外期权交易合法吗?参与场外期权交易需要符合哪些规定?

场外期权交易是合法的金融交易方式&#xff0c;且得到了相应监管部门的支持和规范。它是一种新型的期权交易方式&#xff0c;具有灵活性高、可以满足特定投资者需求的特点。 文章来源/&#xff1a;股指研究院 场外期权是私下协商的&#xff0c;交易双方可根据个人预期、风险承…

《QT实用小工具·四十八》趣味开关

1、概述 源码放在文章末尾 该项目实现了各种样式的趣味开关&#xff1a; 1、爱心形状的switch开关&#xff0c;支持手势拖动、按压效果 2、线条样式的3种开关 项目demo演示如下所示&#xff1a; 使用方式&#xff1a; 1、sapid_switch文件夹加入工程&#xff0c;.pro文件中…

二、VLAN原理和配置

vlan不是协议&#xff0c;是一个技术&#xff0c;虚拟局域网技术&#xff0c;基于802.1q协议。 vlan&#xff08;虚拟局域网&#xff09;&#xff0c;将一个物理的局域网在逻辑上划分成多个广播域的技术。 目录 1.冲突域和广播域 概念 范围 2.以太网帧格式 3.以太网帧封装…

【小程序逆向专栏】某润选房小程序逆向分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;不提供完整代码&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 本文章未…

【YesPMP】平台最新外包项目,设计、小程序、网站等你来接!

YesPMP平台目前最新项目&#xff0c;有感兴趣的用户&#xff0c;可查看项目参与竞标&#xff0c;免费接单&#xff0c;竞标后由项目方直接与服务商联系&#xff0c;双方直接对接。 1.查看项目&#xff1a;网站网页或pc软件 2.查看项目&#xff1a;数据 …

天冕科技亮相第十七届深圳国际金融博览会!

第十七届深圳国际金融博览会在深圳会展中心正式开幕&#xff0c;天冕科技跟随南山区组团集体亮相&#xff0c;充分展现金融活力。此次金博会&#xff0c;南山区政府共遴选了包括天冕科技在内的三家优秀金融科技企业组团参展&#xff0c;以特色与创新的案例展示了辖区金融业发展…

Ansible-Tower安装破解

主机IP地址版本Ansible192.168.169.2042.9.1Tower192.168.169.2043.6.2 基础环境 systemctl disable firewalld --now && setenforce 0 sed -i s/SELINUXenforcing/SELINUXdisabled/g /etc/selinux/config mv /etc/yum.repos.d/CentOS-* /tmp/ curl -o /etc/yum.repo…

AI时代来临,电子行业暗藏新机遇!新人如何逆袭,成为行业翘楚?

随着人工智能技术的飞速发展&#xff0c;程序员的工作正迎来前所未有的变革。去年9月&#xff0c;《大西洋月刊》上的一篇文章&#xff0c;由Kelli Mara Korducki所著&#xff0c;直言不讳地指出&#xff1a;“在人工智能时代&#xff0c;计算机科学已不再是那个稳妥的专业选择…

速成python

一个只会c的苦手来总结一下py的语法。没有其他语法基础的不建议看 1. 输入输出 print自带换行&#xff0c;可以写print("Hi", end"")取消换行 a input(你好:) # 默认是str print(type(a)) # 输出a的类型 a int(input()) # 或者a int(a) print(type(…

Vue.js 3 应用开发与核心源码解析 阅读笔记

https://www.dedao.cn/ebook/reader?idV5R16yPmaYOMqGRAv82jkX4KDe175w7xRQ0rbx6pNgznl9VZPLJQyEBodb89mqoO 2022年出的书&#xff0c;针对Vue的版本是3.2.28&#xff0c;当前的版本是 3.4.21。 本书的一大特色是对Vue 3.x的核心源码&#xff08;响应式原理、双向绑定实现、虚…

毅四捕Go设计模式笔记——命令模式

命令模式&#xff08;Command Pattern&#xff09; 为了解决什么问题&#xff1f; 命令模式的目的是将请求发起者和请求执行者解耦&#xff0c;使得请求的发起者不需要知道具体的执行者是谁&#xff0c;也不需要知道执行的具体过程&#xff0c;只需要发送请求即可。 通过使用…

Apache Flume

文章目录 关于 Apache Flume数据流模型EventAgentSourceChannelSink 关于 Apache Flume 官网&#xff1a;https://flume.apache.orgFlume User Guide : https://flume.apache.org/releases/content/1.11.0/FlumeUserGuide.htmlFlume Developer Guide : https://flume.apache.o…

pytorch-解决过拟合之regularization

目录 1.解决过拟合的方法2. regularization2. regularization分类3. pytorch L2 regularization4. 自实现L1 regularization5. 完整代码 1.解决过拟合的方法 更多的数据降低模型复杂度 regularizationDropout数据处理早停止 2. regularization 以二分类的cross entropy为例&…

EasyRecovery数据恢复软件2025永久免费电脑版下载

EasyRecovery数据恢复软件是一款业界知名的数据恢复工具&#xff0c;它凭借强大的恢复能力和广泛的数据兼容性&#xff0c;帮助用户从各种存储设备中恢复丢失或删除的数据。以下是关于EasyRecovery数据恢复软件的详细介绍。 EasyRecovery绿色破解下载网盘链接: https://pan.ba…

基于FPGA的数字信号处理(3)--什么是浮点数?

科学计数法 你可能不了解「浮点数」&#xff0c;但你一定了解「科学记数法」。 10进制科学记数法把一个数表示成a与10的n次幂相乘的形式&#xff08;1≤|a|<10&#xff0c;a不为分数形式&#xff0c;n为整数&#xff09;&#xff0c;例如&#xff1a; 19970000000000 1.9…
最新文章