CAP 原则与 BASE 理论

导航

  • 引言
  • 一、CAP 原则
    • 1.1 Consistency 一致性
    • 1.2 Available 可用性
    • 1.3 Partition tolerance 分区容错性
    • 1.4 CAP 的矛盾
    • 1.5 CAP 的组合场景
  • 二、BASE 理论
    • 2.1 基本可用
    • 2.2 软状态
    • 2.3 最终一致性
      • 2.3.1 因果一致性
      • 2.3.2 读自身所写
      • 2.3.3 会话一致性
      • 2.3.4 单调读一致性
      • 2.3.5 单调写一致性
  • 总结

引言

本文介绍CAP原则和BASE理论。二者是分布式系统中重要的参考原则及指导方针。

其中 CAP 是由加州大学的计算机科学家 Eric Brewer 于1998 年提出,代表了分布式系统的三个重要指标

一、CAP 原则

CAP 是 Consistency 、Availability、Partition tolerance 的首字母缩写。所谓CAP原则,简单的说就是不可能存在CAP,即如下图所示,CAP 三个指标只能实现其中两个,而永远无法三者兼具
在这里插入图片描述

1.1 Consistency 一致性

在系统中的所有数据备份,在同一时刻要保持同样的值。

1.2 Available 可用性

在集群系统中,一部分节点故障后,集群整体依然可以响应外界请求。

简单来说,只要用户发起请求,系统就必须及时响应。响应的越快,可用性越好

1.3 Partition tolerance 分区容错性

分区指的是分布式系统中的多个网络节点之间无法通信,导致分布在不同网络中的应用无法访问“失联的”数据

解决分区问题的最好办法就是给数据备份,备份在不同的网络中,这样,当网络通信出现故障,就会降低数据访问不到的风险提高了分区容错性

1.4 CAP 的矛盾

一般来说,分区问题无法避免,只能采用备份数据的方式尽可能提高分区容错性。因此可以认为 CAP 中的 P 总是要具备的。CAP 原则告诉我们,剩下的 C 和 A 无法兼得

简单来说,为了提高分区容错性,数据的备份是必要的,备份的数量越多,容错性越好,但备份的越多,保证一致性就越困难,也势必就影响系统整体的响应速度(可用性)。

但是,根据不同的业务场景,CAP 三者可以达到一种平衡关系。

1.5 CAP 的组合场景

  1. CA:不允许分区的组合方式,舍弃了分区容错性。则 C (一致性)和 A(可用性)可以保证。但放弃 P 的同时也意味着放弃了系统扩展性,即限制分布式节点,这违背了分布式系统设计的初衷。满足CA 组合的系统例如传统的单体应用。
  2. CP:不要求 A(可用性),相当于数据需要保证较强的一致性。而 P (分区)会导致系统响应时间的延长,一旦发生网络故障或消息丢失等情况,就要牺牲用户体验。最典型的就是分布式系统,如传统数据库 MySQL,各种金融业务场景也需要优先保证CP指标,也可以算作是CP组合。
  3. AP:放弃一致性,追求更高的系统响应。一旦分区发生,节点之间的数据无法保持一致,为了高可用,每个节点只能使用本地数据提供服务。最典型的场景就是电商系统,同一个商品可能前一秒还库存充足,但秒杀一开始,刚准备下单,就提示下单失败,商品已售完。Redis也是一种AP分布式结构。

二、BASE 理论

BASE 是 Basically Available(基本可用)、Soft state(软状态)、Eventually Consistent(最终一致性)三个短语的缩写。

BASE 是对大规模互联网分布式系统的实践结论,是对 CAP 中 C 一致性 和 A 可用性的权衡策略
核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

2.1 基本可用

基本可用指的是,当系统出现故障,部分节点无法正常工作,可以允许牺牲一定程度的用户体验,但绝不允许系统完全不可用。

  • 响应时间:正常情况,一个在线搜索引擎需要 0.5 秒内返回查询结果,但由于出现异常,查询时间增加到 1 ~ 2 秒。
  • 功能:正常情况,在一个电商系统购物,消费者几乎可以顺利完成每一笔订单,但是由于异常,或消费者数量激增,为了保证系统的稳定性,部分消费者可能会被引导到一个降级页面。

2.2 软状态

什么是软状态呢?相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种“硬状态”。

软状态指的是:允许系统中的数据存在中间状态,并认为该状态不影响系统的整体可用性,即允许系统在多个不同节点的数据副本存在数据延迟

2.3 最终一致性

软状态允许数据备份延迟,但最终这些数据都要保证一致性。这就是最终一致性。

最终一致性在软状态上加了一个时限,这个时限取决于网络延时、系统负载、数据复制方案设计等。根据实际的业务场景,最终一致性可被分为以下 5 种。

2.3.1 因果一致性

有果必有因。收到数据更新通知的节点,应该使用更新后的新值,即种下什么因,就得什么果。

例如,服务A更新了一个数据后,通知给了服务B,那么服务B如果要操作这个数据,应该使用 A 更新后的新值。如果 C 和 A没有这种关系,那么可以不受这一条件的限制。

2.3.2 读自身所写

自身写入的新值,之后读取也应该是这个新值。这是一种特殊的因果一致性。

2.3.3 会话一致性

会话一致性将对系统数据的访问过程框定在了一个会话当中:系统能保证在同一个有效的会话中实现“读自身所写”的一致性,也就是说,执行更新操作之后,客户端能够在同一个会话中始终读取到该数据项的最新值。

2.3.4 单调读一致性

单调读一致性是指,如果一个节点从系统中读取出一个数据项的某个值后,那么系统对于该节点后续的任何数据访问都不应该返回更旧的值。

2.3.5 单调写一致性

单调写一致性是指,一个系统要能够保证来自同一个节点的写操作被顺序的执行。

在实践中,这5种一致性往往会结合使用,以构建一个具有最终一致性的分布式系统

总结

CAP 原则,分布式系统参考的三个重要指标。具体是指 Consistency 一致性、Availability 可用性、Partition tolerance 分区容错性

CAP 原则指出,在一个分布式系统中,不可能同时满足三者,而分区容错性一般是必须具备的重要指标,这也是分布式系统的初衷,因此,实际的业务架构设计中,往往都是对 C 一致性 和 A 可用性的权衡和取舍。

三种类型组合的常见案例:

1、CA :破坏了分布式系统的设计初衷,单体应用。
2、CP :传统数据库如 MySQL、各种涉及到银行、金融的交易系统。要求较高的一致性,舍弃用户体验。
3、AP :电商系统,秒杀等业务场景。但数据会实现最终一致性,追求用户体验的响应性,舍弃一部分实时的一致性,如 Redis 。

BASE 理论,是对CAP实践的进一步指导方针。是基本可用、软状态、最终一致性三个英文单词的缩写。

基本可用:顾名思义,即系统允许牺牲一部分用户体验,但决不允许系统无法响应,甚至崩溃。

软状态:允许系统中的备份数据存在中间状态,但也必须是不影响整体系统功能的前提下,即数据备份允许延迟。

最终一致性:在软状态之上增加了时限,要努力达到数据最终是一致的。5 种最终一致性:因果、读自写、会话、单调读、单调写。

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

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

相关文章

java 教室借用管理系统_[内附完整源码和文档] 基于JAVA语言的学生选课信息管理系统...

摘 要本系统运用Java面向对象的方法设计而成。近年来,学生选课系统越来越在高校学生群体中得到普及,其所承担的功能也变得越来越丰富,所起到的作用也变得越来越重要,在被学校学生重视的同时,也意味着它的功能要更加完善…

jMeter 模拟 web 高并发请求

导航一、jmeter 简介与下载二、接口压测设置三、实战演示一、jmeter 简介与下载 Apache JMeter是Apache组织开发的基于Java的压力测试工具。 最初被设计用于Web应用测试,但后来扩展到其他测试领域。JMeter 可以用于对服务器、网络或对象模拟巨大的负载&#xff0c…

实施文档_建设工程监理全套资料范本,Word文档附百份案例表格,超实用

建设工程监理全套资料范本,Word文档附百份案例表格,超实用在日常工作中,监理人员不仅需要经常跑腿儿检查,同时还需要提交许许多多的资料存档,甚至可能需要熬夜码字。今天整理的监理资料范本,既能让监理人员…

微服务架构 —— 服务雪崩与容错方案

导航一、什么是服务雪崩二、雪崩效应的三个核心原因三、容错四、业界常见容错思路五、常见容错组件一、什么是服务雪崩 服务雪崩 指的是微服务架构中,微服务各节点之间由于网络通信异常或微服务自身故障等问题,导致请求堆积、任务堆积,消耗和…

手游方舟怎么输入代码_明日方舟再次登顶失败,为了不发十连奖励,鹰角实力控分?...

在明日方舟新版本活动“孤岛风云”正式上线后,关于干员的强度和游戏剧情的讨论也在最近多了起来。尤其是在一周年卫星干员山落地,并且人气干员塞雷娅背后的故事揭晓之后,明日方舟的热度也在玩家圈子中迅速的攀升,成为近期话题量十…

Spring Cloud Alibaba —— Sentinel 入门

导航一、什么是Sentinel1.1 Sentinel 的优点二、整合 Sentinel 演示三、Sentinel控制台与微服务通信的原理四、Sentinel 流控演示一、什么是Sentinel Sentinel 是阿里开源的用于提供微服务架构容错方案的组件。它以流量作为切入点,从流量控制、熔断降级、系统负载保…

Spring Cloud Alibaba —— Sentinel 详细使用

导航引言一、Sentinel的两个基本概念二、流控规则2.1 基本选项2.2 高级选项三、熔断(降级)规则四、热点规则五、授权规则(了解)六、系统规则(了解)七、自定义异常返回八、SentinelResource九、Sentinel 规则持久化(待补…

扫地机器人单扫和双扫_小米扫拖机器人体验:再见了,拖把君

小米在2016年首次推出了扫地机器人,凭借产品力和性价比,可以说为中国家庭的智能清洁概念普及,立下一功。不过,近两年因为一直没有推出扫拖一体产品,急得民间高手都开始自己动手给米家扫地机改造拖地功能了,…

Spring Cloud —— Gateway 服务网关

导航一、什么是服务网关二、业界常见网关组件三、Spring Cloud Gateway四、Gateway 快速入门4.1 创建 gateway 服务4.2 添加 gateway 依赖和 nacos 依赖4.3 配置路由信息4.4 测试路由转发五、Gateway 执行流程六、Gateway 断言6.1 内置路由断言工厂6.2 自定义路由断言工厂七、G…

图形显卡_选核芯显卡还是独立显卡?这才是决定笔记本电脑性能的关键

买笔记本电脑的时候,选核芯显卡还是独立显卡是很多朋友纠结的问题。核芯显卡是建立在和处理器同一内核芯片上的图形处理单元,而独立显卡拥有单独的图形核心和独立的显存。那么具体哪个更好呢?这里就来介绍一下。两者各自的特点核芯显卡和传统…

Spring Cloud —— 链路追踪技术

导航一、什么是链路追踪二、Spring Cloud Sleuth2.1 相关概念三、Sleuth 入门案例四、Zipkin 的集成4.1 Zipkin 介绍4.2 Zipkin 服务端安装4.3 Zipkin 客户端安装五、Zipkin 数据持久化5.1 MySQL 数据持久化5.2 Elasticsearch 数据持久化一、什么是链路追踪 在大型系统的微服务…

bool类型数组转换成一个整数_「PHP」常用的数组键值操作函数,面试重点

数组键值操作函数1、array_values ( array $array ) : array返回数组中所有的值的数组$a[name>jikeshiguangji,age>26];print_r(array_values($a));运行结果:$aarray("name">"jikeshiguangji","age">"26");pri…

Spring Cloud —— 消息队列与 RocketMQ

导航一、什么是 MQ二、常见的 MQ 产品三、RocketMQ 概念与架构设计3.1 基本概念1、消息模型(Message Model)2、生产者与消费者(Producer & Consumer)3、主题(Topic)4、代理服务器与名称服务&#xff08…

惠普打印机只打印一半_惠普打印机如何安装 惠普打印机加墨方法【介绍】

对于多数上班族和学生党来说,平时办公和学习不仅仅离不开 电脑 ,与此同时还需要 打印机 起到辅助作用。目前市场上的打印机品牌较多,惠普就是其中知名度较高的一个牌子,拥有大批的消费群体。但是有些人在将打印机买回来之后&#…

Spring Cloud —— RocketMQ 的消息类型

导航引言一、普通消息1.1 可靠同步发送1.2 可靠异步发送1.3 单向发送二、顺序消息三、事务消息3.1 什么是事务消息3.2 事务消息示例1、编写本地事务逻辑2、发送半事务消息3、注册本地事务监听器4、测试引言 本文承接《Spring Cloud —— 消息队列与 RocketMQ》 RocketMQ 提供…

城市运行一网统管_全国率先!“一屏观天下、一网管全城”,临港城市运行“一网统管”平台启动建设...

景区里是否出现了大客流?渣土车是否有违规?工地上有没有安全隐患?……8月12日,临港新片区城市运行“一网统管”平台正式启动建设,临港新片区城市运行“一网统管”中长期规划也正式发布,通过构建具有临港新片…

Spring Cloud Alibaba —— Nacos Config 配置中心

导航引言一、什么是配置中心二、常见的配置中心组件三、Nacos Config 入门四、Nacos Config 动态配置4.1 硬编码方式(默认支持动态生效)4.2 属性注入五、配置共享5.1 相同微服务不同环境间共享5.2 不同微服务配置共享六、Nacos Config 的几个概念总结引言…

codesys com库_CODESYS在线库,酷德网镜像站启用

近期由于国内网络问题,造成 stroe.codesys.com 网站无法访问。在线库无法下载。为了不影响广大CODESYS用户的正常使用,酷德网建立stroe.codesys.com的国内镜像站:主站: https://store.hicodesys.com:8421/CODESYSLibs/备用站: …

分布式事务的解决思路与方案

导航一、事务的种类与场景二、分布式事务解决方案2.1 全局事务2.2 可靠消息事务2.3 最大努力通知2.4 TCC 事务三、TCC 模式常见问题3.1 二阶段幂等3.2 空回滚3.3 资源悬挂一、事务的种类与场景 本地事务实际上就是指数据库的事务,参考《MySQL —— 事务与隔离级别总…

css3 下边框缓缓划过_干货来袭!web前端开发工程师必看之如何使用CSS3实现瀑布流效果?...

首先,我们来看一下什么是瀑布流布局效果,比如电商网站 蘑菇街原理图:在一个大盒子里,放置多个小盒子,小盒子的大小可以不一致,长短不一样,呈现一种瀑布流的效果。使用CSS3S实现只需要如下4步:1. 准备图片素材2. 书写相应HTML结构3…