【微服务】面试题 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.mzph.cn/diannao/66949.shtml

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

相关文章

数据结构与算法之二叉树: LeetCode 572. 另一棵树的子树 (Ts版)

另一棵树的子树 https://leetcode.cn/problems/subtree-of-another-tree/description/ 描述 给你两棵二叉树 root 和 subRoot检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树如果存在,返回 true ;否则,返回 false二叉树 tree …

NineData云原生智能数据管理平台新功能发布|2024年12月版

本月发布 7 项更新,其中重点发布 2 项、功能优化 5 项。 重点发布 数据库 Devops - Oracle 非表对象支持可视化创建与管理 Oracle 非表对象,包括视图(View)、包(Package)、存储过程(Procedur…

[Unity]MacOS下开发Unity

需要的插件 我使用的是vscode,经过长时间的使用我发现一个问题就是很多插件都是动态的在变化的,不是一成不变的,可能是重构,可能直接换了其他的工具。 所以这个插件也会是更新的状态。 2025年01月08日更新 .NET Install Tool (…

项目开发实践——基于SpringBoot+Vue3实现的在线考试系统(五)

文章目录 一、学生管理模块功能实现1、添加学生功能实现1.1 页面设计1.2 前端功能实现1.3 后端功能实现1.4 效果展示2、学生管理功能实现2.1 页面设计2.2 前端功能实现2.3 后端功能实现2.3.1 后端查询接口实现2.3.2 后端编辑接口实现2.3.3 后端删除接口实现2.4 效果展示二、代码…

实现一个VSCode插件(从创建到发布)

实现一个自己的VSCode 插件 本文将以 yo 为例, 实现一个 VS Code 插件 从创建到发布。 文章目录 实现一个自己的VSCode 插件1. 初始化项目2. 项目结构3. 实现插件功能4. 测试和运行插件5. 发布6. 下载自己发布的插件 1. 初始化项目 首先,我们需要安装 …

Unity TextMesh Pro入门

概述 TextMesh Pro是Unity提供的一组工具,用于创建2D和3D文本。与Unity的UI文本和Text Mesh系统相比,TextMesh Pro提供了更好的文本格式控制和布局管理功能。 本文介绍了TMP_Text组件和Tmp字体资产(如何创建字体资产和如何解决缺字问题),还有一些高级功…

【教程】数据可视化处理之2024年各省GDP排名预测!

过去的一年里,我国的综合实力显著提升,在新能源汽车、新一代战机、两栖攻击舰、航空航天、芯片电子、装备制造等领域位居全球前列。虽然全国各省市全年的经济数据公布还需要一段时间,但各地的工业发展数据,财政收入数据已大概揭晓…

后端:Spring(IOC、AOP)

文章目录 1. Spring2. IOC 控制反转2-1. 通过配置文件定义Bean2-1-1. 通过set方法来注入Bean2-1-2. 通过构造方法来注入Bean2-1-3. 自动装配2-1-4. 集合注入2-1-5. 数据源对象管理(第三方Bean)2-1-6. 在xml配置文件中加载properties文件的数据(context命名空间)2-1-7. 加载容器…

从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)

引言: 在我们之前的文章中,我们详细探讨了从CentOS迁移到龙蜥操作系统的基本过程和考虑因素。今天,我们将继续这个系列,重点关注龙蜥系统的实际应用——特别是常用软件的安装和配置。 龙蜥操作系统(OpenAnolis&#…

一.项目课题 <基于TCP的文件传输协议实现>

客户端代码 需要cJSON.c文件和cJSON.h文件 在这里插入代码片#include "myheadth.h" #include "myfun.h"#define TIME 10 int sockfd; void heartbeat(int signum) {cJSON* root cJSON_CreateObject();cJSON_AddStringToObject(root,"request"…

Type-C双屏显示器方案

在数字化时代,高效的信息处理和视觉体验已成为我们日常生活和工作的关键需求。随着科技的进步,一款结合了便携性和高效视觉输出的设备——双屏便携屏,逐渐崭露头角,成为追求高效工作和娱乐体验人群的新宠。本文将深入探讨双屏便携…

计算机视觉算法实战——车道线检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​​​​​​ ​​​​​​​​​​​​ ​​​​​ 车道线检测是计算机视觉领域的一个重要研究方向,尤其在自动驾驶和高级驾驶辅助…

【微服务】面试 3、 服务监控 SkyWalking

微服务监控的原因 问题定位:在微服务架构中,客户端(如 PC 端、APP 端、小程序等)请求后台服务需经过网关再路由到各个微服务,服务间可能存在多链路调用。当某一微服务挂掉时,在复杂的调用链路中难以迅速确定…

【MySQL数据库】基础总结

目录 前言 一、概述 二、 SQL 1. SQL通用语法 2. SQL分类 3. DDL 3.1 数据库操作 3.2 表操作 4. DML 5. DQL 5.1 基础查询 5.2 条件查询 5.3 聚合函数 5.4 分组查询 5.5 排序查询 5.6 分页查询 6. DCL 6.1 管理用户 6.2 权限控制 三、数据类型 1. 数值类…

aws(学习笔记第二十三课) step functions进行开发(lambda函数调用)

aws(学习笔记第二十三课) 开发step functions状态机的应用程序 学习内容: step functions状态机的概念开发简单的step functions状态机 1. step functions状态机概念 官方说明文档和实例程序 AWS的官方给出了学习的链接和实例程序。使用SAM创建step functions 借…

【Docker】入门教程

目录 一、Docker的安装 二、Docker的命令 Docker命令实验 1.下载镜像 2.启动容器 3.修改页面 4.保存镜像 5.分享社区 三、Docker存储 1.目录挂载 2.卷映射 四、Docker网络 1.容器间相互访问 2.Redis主从同步集群 3.启动MySQL 五、Docker Compose 1.命令式安装 …

算法练习7——拦截导弹的系统数量求解

题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 假设某天雷达捕捉到敌国的导弹来袭。由于该系统还在试用…

如何使用高性能内存数据库Redis

一、详细介绍 1.1、Redis概述 Redis(Remote Dictionary Server)是一个开源的、内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis支持多种类型的数据结构,如字符串(strings)、哈希&am…

【Linux系列】`find / -name cacert.pem` 文件搜索

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

UE材质Fab Megascans

2025年Bridge里已经不能直接导入资产了,显示GET IT ON FAB 只能在Fab中导入资产, 纹理打包技术从RMA改成了ORM O:AO 环境光遮蔽 R:Roughness 粗糙度 M:Metallic 金属度 在Fab中找到材质,点击Add to P…