CAP为什么不能兼得

2024-04-02 04:48
文章标签 不能 cap 兼得

本文主要是介绍CAP为什么不能兼得,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接:石匠的Blog

什么是CAP

所谓CAP原则,是指在分布式系统中Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性)三者不能同时得到。

  • 一致性:在分布式系统中,一个数据存在多个副本的情况下,各个副本的值是否一致。
  • 可用性:当系统收到一个请求后,在一定时间之内,总是可以反馈一个结果给用户,无论成功还是失败。
  • 分区容错性:当网络出现分割后,系统仍然可以提供服务。

CAP拆解

在当今的基础网络中,存在不同的网络运营商,不同地域,不同的骨干线路等情况。比如在CDN厂商会按照运营商和地域将整个网络分成不同的“覆盖”,每个“覆盖”可以作为一个独立的服务节点提供覆盖内的用户访问。为了进行细分拆解,可以将“覆盖”看做分区隔离性中的“区”;

CA

假设不考虑分区(P)的情况下,只有一个分区(副本),副本的一致性自不必说,自然是一致的;可用性方面,一个节点的写入不需要同步到其他节点,可以高效完成。如果增加多个分区(提高分区容错性),数据的写入需要同步到多个节点(强一致性,所有节点同步成功后再返回用户),增加了同步时间和同步失败的可能性,降低了可用性;如果采用弱一致性,即写入操作在主节点成功后即返回用户结果,再通过异步方式同步到多个分区,那么会增加同步失败和数据丢失的几率,降低了一致性。

CP

假设不考虑可用性(A)的情况下,多个分区之间可以采用强一致性的机制,保证数据的高度一致性(要么都成功要么都失败)。比如某个分区出现了故障或者分隔,分区没有了响应,由于放弃了可用性,所以可以无限等待并不断重试直到网络恢复,分区可用后将副本数据同步到所有节点。

AP

假设不考虑一致性(C)的情况下,多个分区和副本可以提供高可用性。分区越多,用户越能就近访问,提供响应速度;放弃了一致性后,副本的写入操作可以写入主节点成功后即可返回成功,获得搞可用性,然后通过异步的方式将副本同步到多个分区节点上。

由此可见,CAP三者确实不能同时满足,只能根据具体的分布式业务场景做取舍和折中;比如银行系统可以牺牲可用性从而保障CP,响应慢一点(甚至网络故障暂停服务)总比账户资金出现错误更优。而很多提供互联网服务可以一定程度牺牲一致性来保障AP,因为互联网竞争激烈,追求的是用户体验和效率,希望用户随时随地能够高效获得服务,而一致性则通过一系列的措施做到最终一致性即可。

这篇关于CAP为什么不能兼得的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/869009

相关文章

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

为什么构造函数不能为虚函数

1,从存储空间角度     虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,无法找到vtable,所以构造函数不能是虚函数。 2,从使用角度         虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调

mysql可重复读不能解决幻读吗?

1、可重复读和幻读的概念 1.1、可重复读        可重复读是数据库的四个隔离级别之一,可重复读可以保证在一个事物之内读取到的数据永远是相同的(通过mvcc表快照实现的),哪怕这期间有其它事务对数据做了修改,也不会影响当前事务的查询。 1.2、幻读       网上有不少博客说:幻读是一个事物内多次查询得到的数据结果不一样。比如说select (1)这种查询,如果有其它事务增加或删除

ExtMvc store不能通过xtype选择器得到的办法

store 不能通过xtype选择器得到,  init : function() {         this.control({                 'smsmenu gridpanel[name='company'] : {                                         render:function(grid,opts){

解决TMP_InputField 在WebGL(抖音)上不能唤起虚拟键盘,不能使用手机内置输入法的问题

整整花费了一天时间测试和解决。试验了多个方法,花了不少美刀,最终才发现抖音这个官方文档,哭了: https://partner.open-douyin.com/docs/resource/zh-CN/mini-game/develop/guide/game-engine/rd-to-SCgame/open-capacity/capability-adaptation/sc_webgl_keyboa

为什么csdn博客不能推荐首页了?

哎,好久没来写文章, 结果就不能推荐首页了. 开始以为,是因为很久不发表文章了,但是,后来发表了几篇,还是不行。 换了个账号,写文章还是不能推荐首页, 估计是csdn不提供这个功能了。 但是吧,推荐首页无非就是增加浏览量,现在,大家写文章都没有推荐首页了,对所以用户都是公平的。

下载文件时不能显示中文

前段时间做了个下载图片功能,功能做完后本地测试没有任何问题,但是在Linux下却不能显示中文文件名称,纳闷了,经过反复思考,问题得以解决,特此分享,上代码 @Action(value = "download")public String download() throws IOException {// 创建Httpclient对象RequestParams requestParams = cr

AI聊天应用不能上架?Google play对AI类型应用的规则要求是什么?

随着生成式AI模型的广泛应用,很多开发者都有在开发AI应用或将其整合到应用中。我们知道,谷歌是非常注重应用生态的,去年开始就推出了一些针对生成式AI应用的政策,对AI应用的内容质量和合规性问题提出了一些要求。 几天前,还有开发者聊到,现在AI类型应用(如AI聊天)上架越来越难了。 (可斯信进qun与众多开发者交流上架经验) 这很可能是没了解清楚Google play 对AI应用的一些

【JavaScrip】为什么箭头函数不能做构造函数

在 JavaScript 中,箭头函数(Arrow Functions)的设计初衷是为了简化函数声明,并引入了一些新的语法特性。其中一个关键特性就是箭头函数不能用作构造函数。下面我们详细探讨这个问题的原因。 1. 箭头函数的特点 箭头函数有一些独特的特点,其中最重要的是: ● 词法作用域的 this: 箭头函数内部的 this 值绑定到定义时所在的上下文环境,而不是调用时的上下文环境。 ● 简