分布式理论基础之CAP理论BASE理论

2024-05-04 15:18
文章标签 基础 理论 分布式 base cap

本文主要是介绍分布式理论基础之CAP理论BASE理论,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.CAP理论的含义

CAP理论表示在分布式系统中一致性(C)可用性(A)分区容错性(P)最多只能同时满足两个。

  • 一致性(Consistency):客户端更新数据成功后,在任意时刻,在系统任意对外提供服务的节点,读取到的数据都是最新写入的数据。(强一致性)。
  • 可用性(Availability):当系统出现异常时,仍能对外提供服务。
  • 分区容错(Partition):当出现网络分区时,系统的容错能力(机器之间出现网络故障,不能正常通信)。(注:网络分区,即在分布式系统内,不同节点归属在不同网络子网,子网络之间可能出现网络不连通情况,但在子网内部的通信是正常的。)
    在这里插入图片描述
    证明CAP理论:有两台机器M1和M2,为保持一致性,两台机器的数据相同,现在客户端对M1的数据进行更新,但M1和M2之间出现网络故障(分区),M的最新数据无法同步到M2,导致M1的数据变为v1,M2仍为v0。现有一客户端向M2发送数据读取请求,对此请求的处理有两种选择:
  1. 返回旧数据v0,满足可用性,但是却违反了一致性。
  2. 阻塞此次读操作,直至网络故障恢复,M1的数据v1同步到M2中,满足一致性,但违反了可用性。由于分布式系统天生具有分区的特性,所以一定要满足P,只能在CA中选其一。

CAP理论说明了想设计完全满足强一致性可用性分区容错性的分布式系统是不切实际的,只能在三者之间权衡,为分布式系统的设计提供理论指导。

2 一致性的分类

一致性可从客户端服务端两个角度来看,客户端一致性定义客户端怎样和何时看到数据更新,服务端一致性定义更新时数据如何流经系统及系统对更新有何保证。

2.1 客户端一致性分为以下几种:

  1. 强一致性: 数据更新之后,任何客户端在后续的访问中都能访问到最新版本的数据。
  2. 弱一致性:数据更新之后,不能保证客户端的访问能访问到最新更新之后的数据,数据更新到所有客户端可见这段时间称为不一致窗口。
  3. 最终一致性:最终一致性是种特殊的弱一致性,假如更新数据之后没有后续的对此数据对象的更新操作,系统保证一段时间之后任何客户端对此数据对象的访问都能返回最后一次更新的数据。
    最终一致性有如下变种:
  4. 因果一致性: 如果进程A向进程B传达它已更新数据项,则进程B的后续访问将返回更新的值,并且保证写入将取代先前的写入。进程C的访问与进程A没有因果关系,遵循正常的最终一致性规则。
  5. 读已之所写一致性: 进程A在更新数据项之后始终访问更新的值,并且永远不会看到较旧的值。这是因果一致性模型的特例
  6. 会话一致性:是读已之所写的实际应用版本,进程对系统的访问存在与一个会话上下文中,在此会话中的访问遵循读已之所写一致性。
  7. 单调读一致性:进程访问某一数据对象的值之后,此进程后续的访问都不会返回更旧版本的值。
  8. 单调写一致性:系统保证相同进程的一系列写操作是序列化有序的。
    同一个系统中,可以同时满足多种一致性,例如读已之所写和单调读一致性是常用的组合方案,这两种一致性使系统更易使用。

2.2 服务端一致性:

N=存储数据副本的结点数量
W=在更新完成之前,需要确认更新成功的副本数量。
R=当读操作访问数据对象,需要访问的副本数量
如果W+R>N,写副本和读副本会出现重叠,能保证一定能读到更新后的数据对象,从而保证强一致性。例如:在实现了primary-backup关系数据库管理系统中,同步副本技术N=2,W=2,R=1,能保证强一致性;异步副本方式N=2,W=1,R=1, R+W=N,一致性不能得到保证。
如果W+R<=N, 那么不能保证强一致性,只能是弱一致性或最终一致性。如在主备RDBMS中,使用异步同步副本,并开启从副本读功能的方式,那么N=2, W=1和R=1。在这种情况下,R+W=N, 一致性不能得到保证。

3 BASE理论(CAP理论的变种)

BASE理论CAP理论演化而来,是工业界对分布式系统实践的总结,其核心思想是即使无法达到强一致性,也要保证满足最终一致性

BASEBasically Available(基本可用)Soft state(软状态)Eventually consistent(最终一致性)三个短语的简写。

  • 基本可用: 当系统发生不可预知故障时,允许损失部分可用性,例如:部分机房故障,允许查询时间变长(时间上的损失),系统高峰期为保证系统的稳定性,将部分用户请求引导到降级页面(功能上的损失)。
  • 软状态: 允许系统中的数据存在中间状态,该中间状态不会影响系统的整体可用性,即允许多个副本间的同步存在延时。
  • 最终一致性: 系统中数据的副本经过一段时间的同步之后,最终能达到一致性状态,不要求强一致性。

4.参考文献

[1] 分布式系统的CAP理论.https://www.hollischuang.com/archives/666
[2] Vogels W. Eventually consistent[J]. Communications of the ACM, 2009, 52(1): 40-44.
[3] 分布式系统原理九:CAP理论和BASE理论

这篇关于分布式理论基础之CAP理论BASE理论的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Golang使用etcd构建分布式锁的示例分享

《Golang使用etcd构建分布式锁的示例分享》在本教程中,我们将学习如何使用Go和etcd构建分布式锁系统,分布式锁系统对于管理对分布式系统中共享资源的并发访问至关重要,它有助于维护一致性,防止竞... 目录引言环境准备新建Go项目实现加锁和解锁功能测试分布式锁重构实现失败重试总结引言我们将使用Go作

Redis分布式锁使用及说明

《Redis分布式锁使用及说明》本文总结了Redis和Zookeeper在高可用性和高一致性场景下的应用,并详细介绍了Redis的分布式锁实现方式,包括使用Lua脚本和续期机制,最后,提到了RedLo... 目录Redis分布式锁加锁方式怎么会解错锁?举个小案例吧解锁方式续期总结Redis分布式锁如果追求

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

集中式版本控制与分布式版本控制——Git 学习笔记01

什么是版本控制 如果你用 Microsoft Word 写过东西,那你八成会有这样的经历: 想删除一段文字,又怕将来这段文字有用,怎么办呢?有一个办法,先把当前文件“另存为”一个文件,然后继续改,改到某个程度,再“另存为”一个文件。就这样改着、存着……最后你的 Word 文档变成了这样: 过了几天,你想找回被删除的文字,但是已经记不清保存在哪个文件了,只能挨个去找。真麻烦,眼睛都花了。看

音视频入门基础:WAV专题(10)——FFmpeg源码中计算WAV音频文件每个packet的pts、dts的实现

一、引言 从文章《音视频入门基础:WAV专题(6)——通过FFprobe显示WAV音频文件每个数据包的信息》中我们可以知道,通过FFprobe命令可以打印WAV音频文件每个packet(也称为数据包或多媒体包)的信息,这些信息包含该packet的pts、dts: 打印出来的“pts”实际是AVPacket结构体中的成员变量pts,是以AVStream->time_base为单位的显

C 语言基础之数组

文章目录 什么是数组数组变量的声明多维数组 什么是数组 数组,顾名思义,就是一组数。 假如班上有 30 个同学,让你编程统计每个人的分数,求最高分、最低分、平均分等。如果不知道数组,你只能这样写代码: int ZhangSan_score = 95;int LiSi_score = 90;......int LiuDong_score = 100;int Zhou