当前位置: 首页 > news >正文

【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解

分布式系统理论:CAP 与 BASE 详解

在这里插入图片描述

一、CAP 定理

  1. 背景与定义:1998 年由加州大学科学家埃里克·布鲁尔提出,分布式系统存在一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)三个指标,且不能同时满足,此为 CAP 定理。

  2. 指标解析
    在这里插入图片描述

    • 一致性:用户访问分布式系统任意节点获取的数据需一致。例如,两个初始数据相同的节点,当其中一个节点数据变更后,需进行数据同步,类似 MySQL 主从复制。

    • 在这里插入图片描述

    • 可用性:用户访问集群健康节点必须能得到响应,而非超时或拒绝。如多节点集群中,若某节点阻塞或拒绝访问,则该节点不可用。

    • 分区容错性:因网络故障等致部分节点与其他节点断连形成独立分区时,系统仍要持续对外服务。但分区出现后,保证一致性可能牺牲可用性,反之亦然。如网络故障使节点分区后,跨分区数据同步困难,若保证一致性可能使部分节点在数据同步期间不可用。

在这里插入图片描述

二、BASE 理论

在这里插入图片描述

  1. 定位与内涵:是对 CAP 问题的解决思路,包含基本可用(Basically Available)、软状态(Soft state)、最终一致性(Eventually consistent)三个思想。
  2. 分布式事务应用示例
    • AP 模式:在订单、账户、库存微服务的分布式事务场景中,若选择 AP,各微服务分别执行提交操作,可能出现部分成功部分失败导致数据不一致的软状态。之后事务协调器发现失败事务,会通知已提交事务进行逆向操作恢复数据,实现最终一致性。
    • CP 模式:各子事务执行但不提交,相互等待并向事务协调器上报执行情况。若全部成功,协调器通知提交;若有失败,协调器通知回滚,保证强一致性,但在等待过程中各服务处于弱可用状态,因为会锁定资源影响其他线程响应。

三、面试回答要点

  1. CAP 回答:解释 CAP 包含一致性、可用性、分区容错性。强调分布式系统网络连接必然产生分区问题,此时一致性和可用性无法同时满足,只能在 CP 或 AP 中选择。
  2. BASE 回答:说明 BASE 包含基本可用、软状态、最终一致性。以分布式事务为例,若选择最终一致(AP 思想),子事务分别执行提交后处理不一致情况;若选择强一致(CP 思想),子事务执行后等待统一提交或回滚,等待期间系统软可用。
http://www.lryc.cn/news/521863.html

相关文章:

  • 第十二章:算法与程序设计
  • RAG技术:是将知识库的文档和问题共同输入到LLM中
  • 持续集成 01|Gitee介绍、Pycharm使用Gitee
  • 信息安全、网络安全和数据安全的区别和联系
  • C++实现设计模式---抽象工厂模式 (Abstract Factory)
  • K8S开启/关闭审计日志
  • css盒子水平垂直居中
  • px、em 和 rem 的区别:深入理解 CSS 中的单位
  • 基于STM32设计的粮食仓库(粮仓)环境监测系统
  • 【后端面试总结】tls中.crt和.key的关系
  • 日拱一卒(20)——leetcode学习记录:大小为 K 且平均值大于等于阈值的子数组数目
  • 项目练习:若依管理系统字典功能-Vue前端部分
  • apache-skywalking-apm-10.1.0使用
  • 计算机视觉算法实战——视频分析(Video Analysis)
  • 全网首发:编译libssh,产生类似undefined reference to `EVP_aes_256_ctr@OPENSSL_1_1_0‘的大量错误
  • 用python实战excel和word自动化
  • 【云计算】OpenStack云计算平台
  • 好用的php商城源码有哪些?
  • docker安装Nginx UI
  • 为深度学习创建PyTorch张量 - 最佳选项
  • 详解数据增强中的平移shft操作
  • CCLINKIE转ModbusTCP网关,助机器人“掀起”工业智能的“惊涛骇浪”
  • 类型安全与代码复用的C# 泛型
  • 卷积神经05-GAN对抗神经网络
  • vscode使用Marscode编程助手
  • 网络分析仪测试S参数
  • docker mysql5.7如何设置不区分大小写
  • 【1】Word:邀请函
  • 【gin】中间件使用之jwt身份认证和Cors跨域,go案例
  • 【JAVA实战】@FeignClient注解类通用请求封装