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

微服务篇之分布式系统理论

一、CAP定理

1.什么是CAP

1998年,加州大学的计算机科学家 Eric Brewer 提出,分布式系统有三个指标:

        1. Consistency(一致性)。

        2. Availability(可用性)。

        3. Partition tolerance (分区容错性)。

Eric Brewer 说,分布式系统无法同时满足这三个指标。 这个结论就叫做 CAP 定理。

2.一致性

        Consistency(一致性):用户访问分布式系统中的任意节点,得到的数据必须一致。

3.可用性

        Availability (可用性):用户访问集群中的任意健康节点,必须能得到响应,而不是超时或拒绝。

4.分区容错

        Partition(分区):因为网络故障或其它原因导致分布式系统中的部分节点与其它节点失去连接,形成独立分区。

        Tolerance(容错):在集群出现分区时,整个系统也要持续对外提供服务。

5.结论

        1. 分布式系统节点之间肯定是需要网络连接的,分区(P)是必然存在的

        2. 如果保证访问的高可用性(A),持续对外提供服务,但不能保证数据的强一致性-->  AP

        3. 如果保证访问的数据强一致性(C),就要放弃高可用性   --> CP

二、BASE理论

BASE理论是对CAP的一种解决思路,包含三个思想:

        Basically Available (基本可用):分布式系统在出现故障时,允许损失部分可用性,即保证核心可用。

        Soft State(软状态):在一定时间内,允许出现中间状态,比如临时的不一致状态。

        Eventually Consistent(最终一致性):虽然无法保证强一致性,但是在软状态结束后,最终达到数据一致。

三、面试题

面试官:什么是CAP理论?

候选人

CAP主要是在分布式项目下的一个理论。包含了三项,一致性、可用性、分区容错性:

  • 一致性(Consistency)是指更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致(强一致性),不能存在中间状态。

  • 可用性(Availability) 是指系统提供的服务必须一直处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

  • 分区容错性(Partition tolerance) 是指分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

面试官:为什么分布式系统中无法同时保证一致性和可用性?

候选人

首先一个前提,对于分布式系统而言,分区容错性是一个最基本的要求,因此基本上我们在设计分布式系统的时候只能从一致性(C)和可用性(A)之间进行取舍。

如果保证了一致性(C):对于节点N1和N2,当往N1里写数据时,N2上的操作必须被暂停,只有当N1同步数据到N2时才能对N2进行读写请求,在N2被暂停操作期间客户端提交的请求会收到失败或超时。显然,这与可用性是相悖的。

如果保证了可用性(A):那就不能暂停N2的读写操作,但同时N1在写数据的话,这就违背了一致性的要求。

面试官:什么是BASE理论?

候选人

嗯,这个也是CAP分布式系统设计理论。

BASE是CAP理论中AP方案的延伸,核心思想是即使无法做到强一致性(StrongConsistency,CAP的一致性就是强一致性),但应用可以采用适合的方式达到最终一致性(Eventual Consitency)。它的思想包含三方面:

1、Basically Available(基本可用):基本可用是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,但不等于系统不可用。

2、Soft state(软状态):即是指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

3、Eventually consistent(最终一致性):强调系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。其本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

相关文章:

  • UnityWebGL 设置全屏
  • 设计模式复习
  • Java架构师之路四、分布式系统:分布式架构、分布式数据存储、分布式事务、分布式锁、分布式缓存、分布式消息中间件、分布式存储等。
  • WooCommerce商品采集与发布插件
  • 缩小ppt文件大小的办法
  • C#_各式各样的参数(引用参数、输出参数、数组参数、具名参数、可选参数)
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • 航空领域中气象常识笔记
  • 什么是跨模态
  • HTML和CSS是前端开发中最基础的两个技术[入门级]
  • 游戏平台如何定制开发?
  • Spring之AOP源码解析(上)
  • 鸿蒙原生应用元服务实战-发布时多设备选择注意事项
  • 9、内网安全-横向移动Exchange服务有账户CVE漏洞无账户口令爆破
  • MacBook的nginx出现13: Permission denied 的问题分析和解决办法
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Git学习与使用心得(1)—— 初始化
  • nodejs实现webservice问题总结
  • oschina
  • php中curl和soap方式请求服务超时问题
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 百度小程序遇到的问题
  • 前端
  • 如何使用 JavaScript 解析 URL
  • 一起来学SpringBoot | 第十篇:使用Spring Cache集成Redis
  • 怎样选择前端框架
  • C# - 为值类型重定义相等性
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​ 无限可能性的探索:Amazon Lightsail轻量应用服务器引领数字化时代创新发展
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • #1014 : Trie树
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (70min)字节暑假实习二面(已挂)
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (二)什么是Vite——Vite 和 Webpack 区别(冷启动)
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (一)Java算法:二分查找
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • .cfg\.dat\.mak(持续补充)
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .net core 依赖注入的基本用发
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net Web窗口页属性
  • .Net小白的大学四年,内含面经
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • [ JavaScript ] JSON方法
  • [16/N]论得趣
  • [20171113]修改表结构删除列相关问题4.txt
  • [AutoSAR系列] 1.3 AutoSar 架构
  • [BZOJ2850]巧克力王国
  • [C# 开发技巧]实现属于自己的截图工具