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

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

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

高级语言期末2013级A卷

1.对长度为n的整型数组a进行冒泡排序 #include <stdio.h>void sort(int *a,int n) {for(int i0; i<n-1; i)for(int j0; j<n-i-1; j)if(a[j]>a[j1]) {int tempa[j];a[j]a[j1];a[j1]temp;} } 2.编写函数&#xff0c;实现按照如下公式计算的功能 #include <st…

挑战30天学完Python:Day18 正则表达式

&#x1f4d8; Day 18 &#x1f389; 本系列为Python基础学习&#xff0c;原稿来源于 30-Days-Of-Python 英文项目&#xff0c;大奇主要是对其本地化翻译、逐条验证和补充&#xff0c;想通过30天完成正儿八经的系统化实践。此系列适合零基础同学&#xff0c;或仅了解Python一点…

【ArcGIS】利用高程进行坡度分析

在ArcGIS中利用高程进行坡度分析 坡度ArcGIS实操参考 坡度 坡度是地表单元陡缓的程度&#xff0c;通常把坡面的垂直高度和水平距离的比值称为坡度。 坡度的表示方法有百分比法、度数法、密位法和分数法四种&#xff0c;其中以百分比法和度数法较为常用。 &#xff08;1&#…

Stable Diffusion 3 Early Preview发布

2月22日&#xff0c;Stability AI 发布了 Stable Diffusion 3 early preview&#xff0c;这是一种开放权重的下一代图像合成模型。据报道&#xff0c;它继承了其前身&#xff0c;生成了详细的多主题图像&#xff0c;并提高了文本生成的质量和准确性。这一简短的公告并未附带公开…

通过platform总线驱动框架编写LED灯的驱动,编写应用程序测试

mydev.c #include <linux/init.h> #include <linux/module.h> #include <linux/of_gpio.h> #include <linux/gpio.h> #include <linux/platform_device.h> #include <linux/mod_devicetable.h>// 创建功能码 #define LED_ON _IO(l, 1) #d…

Leetcode3035. 回文字符串的最大数量

Every day a Leetcode 题目来源&#xff1a;3035. 回文字符串的最大数量 解法1&#xff1a;哈希 排序 由于可以随意交换字母&#xff0c;先把所有字母都取出来&#xff0c;然后考虑如何填入各个字符串。 如果一个奇数长度字符串最终是回文串&#xff0c;那么它正中间的那…

(十八)devops持续集成开发——使用docker安装部署jenkins流水线服务

前言 本节内容介绍如何使用docker容器来部署安装jenkins流水线服务。关于docker容器的安装本节内容不做介绍。请读者提前安装。 正文 ①使用docker查找jenkins官方镜像 ② 拉取jenkins官方镜像jenkins/jenkins&#xff0c;选择一个最新稳定版本&#xff0c;避免一些插件不兼…

【某机构vip教程】Requests(6):Requests模块_超时设置

超时设置 Requests模块可以设置接收数据的超时时间&#xff0c;超出设定的时间还没有数据返回&#xff0c;就抛出异常。超时设 置有两种类型表达&#xff1a;float 、tuple timeout():以秒为单位 如果远端服务器很慢&#xff0c;你可以让 Request 永远等待&#xff0c;传入一…

ApexRBp在线粒子传感器在电动汽车电池制造的应用

电动汽车电池的崛起与颗粒污染的挑战 随着电动汽车&#xff08;EV&#xff09;市场的迅速扩张&#xff0c;对高性能锂离子电池的需求也急剧增加。这些电池不仅是EV的心脏&#xff0c;更是推动其前行的核心动力。然而&#xff0c;在电池制造的每一个环节&#xff0c;都需要对多…

【总第49篇】2.3深度学习开发任务实例(2)机器学习和深度学习的对比【大厂AI课学习笔记】

机器学习和深度学习都是用于图片分类任务的强大工具&#xff0c;但它们采用的方法和原理有所不同。下面我将分别解释这两种技术是如何应用于图片分类的&#xff0c;并着重讨论深度学习中的卷积概念。 机器学习在图片分类中的应用 传统的机器学习方法在进行图片分类时&#xf…

8杯水要怎么喝才能防止或减轻肥胖状态?

为什么说&#xff0c;人每天要喝足8杯水呢&#xff1f;原因很多&#xff0c;皮肤干了要多喝水&#xff0c;因为皮肤缺水&#xff0c;需要滋养&#xff1b;身体底子差要多喝水&#xff0c;实际身体底子差不光要多喝水&#xff0c;还要注意饮食营养和运动锻炼&#xff1b;身体健康…

可视化低代码表单设计器

JNPF 表单设计器是一款在线可视化表单建模工具&#xff0c;基于VueSpringboot技术开发&#xff0c;具有组件丰富、操作简单、所见即所得等特性&#xff0c;既能够设计普通的数据录入表单&#xff0c;也能够配合流程设计出各类审批流转表单。 应用地址&#xff1a;https://www.j…

算法刷题:水果成篮

水果成篮 .题目链接题目详情题目解析算法原理滑动窗口定义指针及变量进窗口判断出窗口更新结果 我的答案 . 题目链接 水果成篮 题目详情 题目解析 这道题的意思是,在一个数组中,找到一个最长的连续的子数组,并且其中包含的水果种类不超过两个 left和right刚开始都指向数组首…

有哪些适合程序员的副业?

如果你经常玩知乎、看公众号&#xff08;软件、工具、互联网这几类的&#xff09;你就会发现&#xff0c;好多资源连接都变成了夸克网盘、迅雷网盘的资源链接。 例如&#xff1a;天涯神贴&#xff0c;基本上全是夸克、UC、迅雷网盘的资源链接。 有资源的前提下&#xff0c;迅雷…

靡语IT:Vue精讲(一)

Vue简介 发端于2013年的个人项目&#xff0c;已然成为全世界三大前端框架之一&#xff0c;在中国大陆更是前端首选。 它的设计思想、编码技巧也被众多的框架借鉴、模仿。 纪略 2013年&#xff0c;在Google工作的尤雨溪&#xff0c;受到Angular的启发&#xff0c;从中提取自…

CPU漏洞之Meltdown

1.前言 计算机系统的安全性从根本上依赖于内存隔离&#xff0c;例如内核(Kernel)地址范围被标记为不可访问&#xff0c;并对用户访问加以限制和保护&#xff0c;因此操作系统确保了用户程序不能访问彼此的内存或内核内存。这种内存隔离是我们计算机环境的基石&#xff0c;它允…

驾校预约|驾校预约小程序|基于微信小程序的驾校预约平台设计与实现(源码+数据库+文档)

驾校预约小程序目录 目录 基于微信小程序的驾校预约平台设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户​微信端功能模块​ 2、管理员服务端功能模块 &#xff08;1&#xff09;学员信息管理 &#xff08;2&#xff09; 教练信息管理 &#xff08;3&…

鸿蒙学习-dataPreferences数据存储后,重新运行获取为空的问题

解决方案 通过IDE运行时&#xff0c;保存数据&#xff0c;只进行覆盖安装即可&#xff0c;在IDE中设置如下&#xff1a; 勾选 Keep Application Data 即可

Java零基础 - 位移运算符

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

【2024软件测试面试必会技能】Appium自动化(6):原生app元素定位方法

元素定位方法介绍及应用&#xff1a; Appium方法定位原生app元素: 通过appium inspector工具&#xff0c;可以获取元素的相关信息&#xff1b;在appium中提供了一系列的元素定位API&#xff0c;通过在这些API中输入指定的元素信息&#xff0c;就能完成元素定位&#xff0c;定…