分布式 CAP理论 总结

前言


 相关系列

  • 《分布式 & 目录》
  • 《分布式 & CAP理论 & 总结》
  • 《分布式 & CAP理论 & 问题》
     
     

分布式


    分布式的核心是将大型业务拆解成多个子业务以使之在不同的机器上执行。分布式是用于解决单个物理机容量&性能瓶颈问题而采用的优化手段,服务之间通过远程调用进行交流,从而协同工作以对外提供服务。
 
 

CAP理论


  • Consistency @ (强)一致性:系统的所有节点在相同时刻可以看到相同数据,即对于在多个节点中存在的变量而言,其在同一时刻的值必然是相同的;
  • Availability @ 可用性:无论响应结果如何,系统都可以“在合理的时间内”响应请求,即使节点因为各类故障(包含但不限于网络分区)而不可用;
  • Partition Tolerance @ 分区容错性:系统能够在发生(特指)网络分区时继续响应请求。

    所谓CAP理论指的是分布式系统无法在“读/写数据”时同时满足“一致性/可用性/分区容错性”三种特性,因此系统设计者必须在这三者之间做出权衡:

  • CA策略 @ 一致性&可用性:牺牲分区容错性来保证一致性&可用性。CA策略不属于分布式系统的可用策略,因为以目前的技术能力而言网络分区是无法避免的。因此如果放弃了分区容错性,那么分布式系统在网络分区时将完全不可用。但该策略在单机部署&单点集群部署(服务虽然被多个部署为集群,但相互间没有交互)时是可用的,或者说单机部署&单点集群部署的程序默认就是CA策略,因为其内部不存在网络交互,因此也就无需在意网络分区的发生。所有程序&系统在服务未拆分/未集群的情况下采用的都是CA策略;
  • CP策略 @ 一致性&分区容错性:牺牲可用性来保证一致性&分区容错性,适用于对数据一致性要求较高的分布式系统。当网络分区发生时,如果节点A无法正常请求节点B以完成数据同步,那么其可以通过阻塞至网络恢复的方式(并非只有这一种方式)来保证分区容错性。这种方式同时还可保证一致性,因为其可保证数据的读/写一定是正确的。但与此同时该方法会牺牲可用性,因为阻塞可能会导致请求难以/无法被及时回应。在实际情况中,从节点A复制数据到节点B总是需要花费一定时间的。如果是跨地域(例如北京到广州)的机房,耗费的时间就可能是几十/几百毫秒。因此CAP理论中的C在实践中是不可能完美实现的,因为在数据复制的过程中节点A&B 的数据并不一致,但CAP理论并不在意这种延迟。ZooKeeper就是一个典型的CP系统,它采用分布式一致性算法(如Paxos/Raft等)来确保在不同节点之间就数据状态达成强一致。此外,分布式一致性算法通常都带有容错特性,即只追求多数一致而非完全一致,故而大多数CP系统可用性其实也相当可观;
  • AP策略 @ 可用性&分区容错性:牺牲一致性来保证可用性&分区容错性,适用于对可用性较高的场景。当节点故障/网络分区发生时,如果节点A无法正常请求节点B以完成数据同步,那么其可以通过放弃请求的方式(并非只有这一种方式)来保证分区容错性。这种方式同时还可保证可用性,因为其确保了回应必然是及时的。但与此同时该方法会牺牲一致性,因为请求将难以/无法正确地读/写数据。AP策略通常依赖“最终一致性”模型进行弥补,即虽然会有一定的延迟,但数据最终还是会在一定时间内会达成一致。

    CAP理论策略的选择不是一成不变的。在 CAP理论落地实践时,我们需要将系统数据按照不同的应用场景和要求进行分类,从而为每类数据选择不同的分布式策略,而不是直接限定整个系统的所有数据都使用同一策略。

    CAP理论告诉我们必须“牺牲”三特性中的一个,但这里的“牺牲”其实有一定误导作用,因为“牺牲”让很多人理解成彻底放弃。但实际上CAP理论的“牺牲”只是说我们无法在节点故障/网络分区期间保证一致性/可用性,而现实情况是系统在整个生命周期的大部分时间里·都是正常的,发生节点故障/网络分区现象的时间并不长。例如4个9 @ 99.99%可用性的系统一年运行下来不可用的时间只有50分钟;而5个9 @ 99.999%可用性的系统一年运行下来不可用的时间更是只有5分钟而已。在节点故障/网络分区期间放弃一致性/可用性并不意味着永远放弃,我们可以在节点故障/网络分区期间进行一些操作,从而令分布式系统在故障解决后重新达到一致性&可用性的状态。
 
 

BASE理论


    BASE理论是对CAP理论一致性&可用性进行权衡后的结果,其核心思想是即使无法做到Strong consistency @ 强一致性,但每个应用也该根据自身业务的特点采用适当的方式来使系统达到Eventual consistency @ 最终一致性。

    BASE是Basically Available @ 基本可用/Soft state @ 软状态/Eventually consistent @ 最终一致三个短语的简写,其各自含义具体如下:

  • 基本可用:基本可用是指允许分布式系统在出现不可预知故障时候损失部分可用性。但注意!这绝不等价于系统不可用,以下两个就是“基本可用”的典型例子:
        响应时间上的损失:正常情况下,一个在线搜索引擎需要0.5秒内返回给用户相应的查询结果,但由于出现异常(比如系统部分机房发生断电或断网故障),查询结果的响应时间增加到了1 ~ 2秒;
        功能上的损失:正常情况下,在一个电子商务网站上进行购物,消费者几乎能够顺利地完成每一笔订单,但是在一些节日大促购物高峰的时候,由于消费者的购物行为激增,为了保护购物系统的稳定性,部分消费者可能会被引导到一个降级页面。
  • 软状态:软状态也称弱状态,和硬状态相对,是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性。通俗的说就是允许系统在不同节点的数据副本之间进行同步的过程存在延时。
  • 最终一致性:最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。最终一致性的本质是需要系统数据最终能够达到一致,而不需要实时保证系统数据的强一致性。

    BASE理论是对CAP理论AP策略的延伸&补充,是权衡一致性&可用性后的结果。BASE理论的诞生基础是CAP理论的AP/CP策略本质实现的也是最终一致性:例如CP策略虽然名义上保证了强一致性,但现实中数据副本的同步是有延迟的,但CAP理论直接忽视了这些延迟,因此绝对完美的CP策略是不存在的;而AP策略虽然牺牲了一致性,但这种牺牲实际上也只限于节点故障/网络分区期间,当故障恢复正常后数据同样会恢复至最终一致。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python xpath解析笔记

与bs4的区别 bs4有很多属性和方法,而xpath只有一个方法,是通过不同的xpath表达式实现很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 开头的斜杠表示从根节点遍历。 中间的斜杠表示层级。(相当于bs4中的>…

Q学习(Q-Learning)详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

树状数组详解

概述 树状数组(Binary Indexed Tree,简称BIT),是一种数据结构,用于处理区间查询和更新问题。它是一种可以高效地在对数级别时间复杂度内进行单点更新和区间查询的数据结构。树状数组通常用于解决以下两类问题&#xf…

freeswitch(开启支持MCU视频会议,使用mod_av模块)

亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install

【大数据技术基础】【记录Ubuntu 16.04升级到18.04】Ubuntu的一个版本升级到另一个版本

在 Ubuntu 操作系统中进行软件更新和系统升级 Ubuntu Kylin 16.04 LTS 系统进行系统升级到 Ubuntu 18.04.6 LTS 版本 升级提示:系统弹出提示框,告知用户有新版本的 Ubuntu 可用,询问用户是否想要升级。 认证窗口:显示了一个认证…

这是一个vue3 + scss的数字滚动效果

介绍: 当数字变化时&#xff0c;只改变变化的数字位&#xff0c;其余的不变&#xff0c;可以递增、递减、骤变、负数也可以&#xff0c;但是样式要根据具体的项目需求去改&#xff1b; 效果1、增加数字&#xff1a; 效果2、减少数字&#xff1a; 使用方法&#xff1a; <te…

TortoiseGit的下载、安装和配置

一、TortoiseGit的简介 tortoiseGit是一个开放的git版本控制系统的源客户端&#xff0c;支持Winxp/vista/win7.该软件功能和git一样 不同的是&#xff1a;git是命令行操作模式&#xff0c;tortoiseGit界面化操作模式&#xff0c;不用记git相关命令就可以直接操作&#xff0c;读…

最新版Chrome浏览器加载ActiveX控件之Adobe PDF阅读器控件

背景 Adobe PDF阅读器控件是一个ActiveX控件&#xff0c;用于在Windows平台上显示和操作PDF文件。它提供了一系列方法和属性&#xff0c;可以实现对PDF文件的加载、显示、搜索、打印、保存等操作。 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件…

linux在没网的情况下如何校验时间 超详细拿来即用

一、没有校时服务器的话 1、手动修改 sudo date --set"2024-06-17 13:44:00"二、有校时服务器的话 1、手动校时 ntpdate 14.193.73.22、自动校时 写一个校时服务脚本 14.193.73.2 是校验时间服务器 #!/bin/sh while true dontpdate 14.193.73.2sleep 5;hwclock…

源码分析之Openlayers中的控件篇Control基类介绍

概述 Openlayers 中内置了9类控件&#xff0c;这9类控件都是基于Control类&#xff0c;而Control类则是继承于BaseObject类&#xff0c;如下图所示&#xff1a; 如上&#xff0c;这9类控件分别是&#xff1a; Attribution&#xff1a;属性控件FullScreen:全屏控件MousePositi…

计算机网络知识点全梳理(二.HTTP知识点总结)

目录 HTTP基本概念 HTTP优缺点 HTTP优点&#xff08;1.1&#xff09; HTTP缺点 HTTP与HTTPS HTTP 与 HTTPS 的区别 HTTPS 解决 HTTP 的哪些安全问题&#xff1f; HTTPS 如何解决安全问题&#xff1f; HTTPS 连接建立的过程&#xff1a; HTTP/1.1、HTTP/2、HTTP/3 演…

第P2周:Pytorch实现CIFAR10彩色图片识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 目标 实现CIFAR-10的彩色图片识别实现比P1周更复杂一点的CNN网络 具体实现 &#xff08;一&#xff09;环境 语言环境&#xff1a;Python 3.10 编 译 器: …

Quant connect的优势和不足,学习曲线难

Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台&#xff0c;具有许多优势&#xff0c;包括&#xff1a; 强大的回测功能&#xff1a;Quant connect提供了丰富的数据源和回测功能&#xff0c;可以对各种交易策略进行全面的回测和分析。 容易上手&#xf…

深入理解 Ansible Playbook:组件与实战

目录 1 playbook介绍 2 YAML语言 2.1语法简介 2.2数据类型 3 Playbook核心组件 3.1 hosts组件 3.2 remote_user组件 3.3 task列表和action组件 3.4 handlers 3.5 tags组件 3.6 其他组件说明 1 playbook介绍 playbook 剧本是由一个或多个"play"组成的列表。…

2024年食堂采购系统源码技术趋势:如何开发智能的供应链管理APP

本篇文章&#xff0c;小编将与大家一同探讨2024年食堂采购系统的技术趋势&#xff0c;并提供开发更智能的供应链管理APP的策略。 一、2024年食堂采购系统的技术趋势 1.人工智能与机器学习的深度应用 在2024年&#xff0c;AI和机器学习在食堂采购系统中的应用将更加普遍。这些…

代码随想录-算法训练营-番外(图论01:图论理论基础,所有可到达的路径)

day01 图论part01 今日任务:图论理论基础/所有可到达的路径 代码随想录图论视频部分还没更新 https://programmercarl.com/kamacoder/图论理论基础.html#图的基本概念 day01 所有可达路径 邻接矩阵 import java.util.Scanner;import java.util.List;import java.util.ArrayL…

系统架构的演变

什么是系统架构&#xff1f; 系统架构是系统的一种整体的高层次的结构表示&#xff0c;它确定了系统的基本组织、组件之间的关系、组件与环境的关系&#xff0c;以及指导其设计和发展的原则。随着技术的发展和业务需求的增长&#xff0c;系统架构经历了从简单到复杂、从集中到…

c++总复习

C 中多态性在实际项目中的应用场景 图形绘制系统 描述&#xff1a;在一个图形绘制软件中&#xff0c;可能有多种图形&#xff0c;如圆形、矩形、三角形等。这些图形都有一个共同的操作&#xff0c;比如绘制&#xff08;draw&#xff09;。通过多态性&#xff0c;可以定义一个基…

pip离线安装一个github仓库

要使用pip安装一个本地Git仓库&#xff0c;你可以按照以下步骤操作&#xff1a; 确保你已经克隆了Git仓库到本地。 进入仓库所在的目录。 使用pip安装。 以下是具体的命令&#xff1a; 克隆Git仓库到本地&#xff08;替换下面的URL为你的仓库URL&#xff09; git clone https…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…