热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何理解CAP定理的“可用性”?-Howtounderstandthe“Availability”oftheCAPtheorem?

Idontknowifthisisaproperquestionhere.我不知道这是否是一个恰当的问题。Asweknow,intheCAPtheorem,A

I don't know if this is a proper question here.

我不知道这是否是一个恰当的问题。

As we know, in the CAP theorem, "A" means "Availability". On wikipedia, the explanation of "Availability" is:

众所周知,在CAP定理中,“A”表示“可用性”。在维基百科上,“可用性”的解释是:

Availability: a guarantee that every request receives a response about whether it was successful or failed

However, from the perspective of engineering, there is no ABSOLUTE availability. We can only say that the availability of a system is 5'9'(99.999%), or even 8'9', but we cannot say that the availability of a system is 100%, 100% available system does not exit in reality, even if the system has millions of duplicated nodes, right?

但是,从工程角度来看,没有ABSOLUTE可用性。我们只能说系统的可用性是5'9'(99.999%),甚至是8'9',但我们不能说系统的可用性是100%,100%可用系统实际上不会退出即使系统有数百万个重复节点,对吧?

The CAP theorem proves that no system could satisfy the 3 requirements simultaneously. My question is, if a system claims to satisfy both "A" and "P", what is the accurate meaning of this "A"? 6'9' or even higher?

CAP定理证明没有系统可以同时满足3个要求。我的问题是,如果一个系统声称同时满足“A”和“P”,那么这个“A”的准确含义是什么? 6'9'甚至更高?

4 个解决方案

#1


10  

I recommend that you avoid Wikipedia and instead read the definition as provided the proof by Gilbert and Lynch.

我建议您避免使用维基百科,而是阅读Gilbert和Lynch提供的证明。

"every request received by a non-failing node in the system must result in a response"

“系统中非故障节点收到的每个请求都必须产生响应”

And the related footnote which answers your question

以及回答您问题的相关脚注

"Brewer originally only required almost all requests to receive a response. As allowing probabilistic availability does not change the result when arbitrary failures occur, for simplicity we are requiring 100% availability"

“Brewer最初只需要几乎所有请求都能收到响应。由于允许概率可用性不会在发生任意故障时改变结果,为简单起见,我们要求100%可用性”

So if almost all requests receive a response or we allow for arbitrary failures to occur, a system can be considered to have high availability.

因此,如果几乎所有请求都收到响应或我们允许发生任意故障,则可以认为系统具有高可用性。

#2


2  

The Availability in CAP means "All (non-failing) nodes are available for queries". It has NOTHING to do with the Wikipedia link, which is about "High Availability".

CAP中的可用性意味着“所有(非故障)节点可用于查询”。它与维基百科链接无关,这与“高可用性”有关。

For example, the PAXOS algorithm is CP (no Availability property) because the minority nodes "shut up" during a partition. But if you need Consistency, then PAXOS is considered "High Availability".

例如,PAXOS算法是CP(无可用性属性),因为少数节点在分区期间“关闭”。但如果您需要Consistency,那么PAXOS将被视为“高可用性”。

Conversely, a single-node MySQL database server is CA (has the CAP Availability property). It can reboot (and be down for hours while it does BIOS check, FileSystem check, DB Repair, etc). When it finishes booting, it starts responding to queries again. That's perfect Availability (as per the CAP theorem), but horrible availability for "High Availability".

相反,单节点MySQL数据库服务器是CA(具有CAP可用性属性)。它可以重新启动(并在BIOS检查,文件系统检查,数据库修复等时停机数小时)。完成启动后,它会再次开始响应查询。这是完美的可用性(根据CAP定理),但“高可用性”的可用性很差。

#3


1  

I agree with Mark Burgess: The CAP Theorem Is Not a Theorem. The CAP properties in the conjecture by Brewer are simply not well-defined enough to provide a rigorous mathematical proof. So, the reason availability is hard to "understand" could be because it is simply not well-defined in this context.

我同意Mark Burgess:CAP定理不是一个定理。 Brewer猜想中的CAP属性根本没有明确定义,足以提供严格的数学证明。因此,可用性很难“理解”的原因可能是因为它在这种情况下根本没有明确定义。

#4


0  

An interesting point of view by Coda Hale

Coda Hale有趣的观点

A system that chooses Availability will handle a network partition by continuing to serve all requests even if they lead to inconsistencies (e.g nodes in different network partitions both accept possibly conflicting writes).

选择可用性的系统将通过继续为所有请求提供服务来处理网络分区,即使它们导致不一致(例如,不同网络分区中的节点都接受可能冲突的写入)。

A system that chooses Consistency will limit the amount of legal operations during a network partition (e.g writes are not accepted as they might lead to conflicts/inconsistencies).

选择一致性的系统将限制网络分区期间的合法操作量(例如,不接受写入,因为它们可能导致冲突/不一致)。

It is not possible to choose both.

不可能同时选择两者。

I suppose a hypothetical system can also choose to just crash during network partitions but this does not seem like a very practical design...

我想一个假设的系统也可以选择在网络分区期间崩溃,但这似乎不是一个非常实用的设计......


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • qt学习(六)数据库注册用户的实现方法
    本文介绍了在qt学习中实现数据库注册用户的方法,包括登录按钮按下后出现注册页面、账号可用性判断、密码格式判断、邮箱格式判断等步骤。具体实现过程包括UI设计、数据库的创建和各个模块调用数据内容。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
快乐的kang918_863
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有