再谈CAP
CAP定理设计者Eric Brewer作为Google基础设施副总裁在时隔二十年后重谈CAP定律。
Eric Brewer目前正在推动Kubernetes和容器建设,在这篇采访中:
Google systems guru explains why containers are th,他认为容器是云计算的未来。
Docker之类容器你可以在本地笔记本或电脑上运行,然后你同样部署到云上运行,当在云上运行时,Kubernetes能够以一种可控的方式升级容器从而实现运行管理一批容器,如同一个大型船队或舰队一样,你可以控制它们的流量访问量,可以指定多少个容器来扩展支撑一个服务的运行,随着访问量提升,你通过增加容器数量能够整个系统的负载能力。
当前云计算的App引擎并不通用,Heroku适合与Salesforce相关的网站系统;而Yard引擎适合Ruby on Rails方面的开发应用。而Google的App引擎视图通过可管理的VM变得通用,App引擎正确的抽象应该是一个容器,
下面谈到了CAP:
CAP定理三个属性只能取得两个:
1. 一致性,意味着系统中所有服务器能达成数据值的一致性,比如你有一个银行账户,每个服务器都应该同意银行账户的数值是多少,也就是说,银行账户的数值应该在所有服务器上是一样的。
2.可用性,系统应当是在线运行,可以与用户形成交互。(banq注:有一些人认为CAP定理不包含延迟,其实可用性中有延迟的概念,如果系统等待半天没有响应,延迟很长,用户不知道是服务器死机了还是没有缓过来,可能就离开不用了,这种系统当然没有可用性。)
3.为了容错而进行的分区,(banq注:为了保证可靠性,你会将数据分成两个或更多组实现分区,这样,其中一台服务器当机时,数据不会丢失。),当你将数据分区到几个服务器上时,你以为一份数据有两份或多份,很可靠了,但是服务器之间的网络连接会断线,那么这时你就不能又要一致性,又要可用性了,只能在这两者之间选择一个。
举例,ATM机有时会和银行主机房失联,问题是,在失联状态如果有用户等待吐钱取款,它到底吐不吐钱出来呢?如果它吐钱,那它是可用的,但是会不一致,因为ATM机器内账户钱少了,但是由于失联,银行主机数据库对应的账户钱没有少,也就是说,实际上你的银行账户中钱并没有因为ATM吐钱出来了而减掉这一笔钱。在实际运行中,ATM也是选择可用性,在失联状态吐钱会有一个上限,比如200美金,第一次可以这样,第二次ATM就不会傻到再吐钱了。
这里关键来了,我们是允许事件变得不一致的,然后在其发生以后,会找到一种途径对这个错误进行补偿。(亡羊补牢为时未晚),这些与试图阻止错误的预防模式一起解决问题。
让不一致发生,事后通过校订Auditing探测发现它们,你如,你下订单时出现错误,下了两次订单,忘记取消了,厂商也将货物发送给你了,那么纠正补偿还是很容易的,厂商只要将货物拿回即可。
所以,通常情况是,允许数据变得不一致,你需要发现纠正的方法,实际上,财务系统这样注重数据一致性的系统,其实不是基于真正一致性,而是基于校订auditing和纠正补偿,他们以前是不知道CAP理论的,所以,这是一种实践中正确的方式。
点评:Eric Brewer这篇访谈可谓是文章Please stop calling databases CP or AP请停止称呼数据库CP或AP)的反击,该文如同以前其他文章一样不断质疑CAP理论,而人们在这些质疑中愈加深入了对CAP理论的理解,进而更加广泛地用CAP理论对分布式系统进行定义描述。
再谈CAP的更多相关文章
- [转载]再谈百度:KPI、无人机,以及一个必须给父母看的案例
[转载]再谈百度:KPI.无人机,以及一个必须给父母看的案例 发表于 2016-03-15 | 0 Comments | 阅读次数 33 原文: 再谈百度:KPI.无人机,以及一个必须 ...
- Support Vector Machine (3) : 再谈泛化误差(Generalization Error)
目录 Support Vector Machine (1) : 简单SVM原理 Support Vector Machine (2) : Sequential Minimal Optimization ...
- Unity教程之再谈Unity中的优化技术
这是从 Unity教程之再谈Unity中的优化技术 这篇文章里提取出来的一部分,这篇文章让我学到了挺多可能我应该知道却还没知道的知识,写的挺好的 优化几何体 这一步主要是为了针对性能瓶颈中的”顶点 ...
- 浅谈HTTP中Get与Post的区别/HTTP协议与HTML表单(再谈GET与POST的区别)
HTTP协议与HTML表单(再谈GET与POST的区别) GET方式在request-line中传送数据:POST方式在request-line及request-body中均可以传送数据. http: ...
- Another Look at Events(再谈Events)
转载:http://www.qtcn.org/bbs/simple/?t31383.html Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不 ...
- C++ Primer 学习笔记_32_STL实践与分析(6) --再谈string类型(下)
STL实践与分析 --再谈string类型(下) 四.string类型的查找操作 string类型提供了6种查找函数,每种函数以不同形式的find命名.这些操作所有返回string::size_typ ...
- 再谈JSON -json定义及数据类型
再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...
- C++ Primer 学习笔记_44_STL实践与分析(18)--再谈迭代器【下】
STL实践与分析 --再谈迭代器[下] 三.反向迭代器[续:习题] //P355 习题11.19 int main() { vector<int> iVec; for (vector< ...
- C++ Primer 学习笔记_43_STL实践与分析(17)--再谈迭代器【中】
STL实践与分析 --再谈迭代器[中] 二.iostream迭代[续] 3.ostream_iterator对象和ostream_iterator对象的使用 能够使用ostream_iterator对 ...
随机推荐
- Java 之 HTTP 协议
HTTP 协议 一.基础 1.概念 HTTP:Hyper Text Transfer Protocol 超文本传输协议. 传输协议:定义了客户端和服务器端通信时,发送数据的格式. 2.特点 (1)基 ...
- 【android,eclipse解决】eclipse insert "}" to complete ClassBodyR.java
Android开发:eclipse搭建后,如果出现 eclipse insert "}" to complete ClassBodyR.java/appcompat_v7/gen/ ...
- Linux负载模拟
转载:https://blog.csdn.net/F8qG7f9YD02Pe/article/details/79063392 CPU 下面命令会创建 CPU 负荷,方法是通过压缩随机数据并将结果发送 ...
- idea2019的安装与激活
1.安装及相关资料下载 链接:https://pan.baidu.com/s/1njKjorAvaWftuGCvCQzP3A 提取码:r8h8 2.安装步骤 几乎是傻瓜式的安装,点击下一步即可 注意两 ...
- 大数据量高并发的数据库优化,sql查询优化
一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. ...
- day 06 预科
目录 if判断 if判断习题 for循环 for循环习题 微信机器人 if判断 # 一条狗朝你过来了,你会干吗? 判断: 如果狗是大长腿牵来的狗--->打招呼:如果是条疯狗,跑. # if:如果 ...
- 了解 npm install -S -D 的区别,看这篇就完事了
一.npm install -S -D 的区别 npm install module_name -S 即 npm install module_name --save 写入dependencies n ...
- influxDB应用及TICK stack
InfluxData平台用于处理度量和事件的时间序列平台,常被称为TICK stack,包含4个组件:Telegraf,influxDB,Chronograf和Kapacitor,分别负责时间序列数据 ...
- SVN无法检出项目
情况说明: SVN的管理员给我一个项目的检出权限,我用浏览器可以访问,TortoiseSVN无法检出,提示没有访问URL的权限,不能检出. SVN管理员交流别人可以使用,我用同事的电脑,使用我的账号检 ...
- 23.centos7基础学习与积累-009-linux目录
从头开始积累centos7系统运用 大牛博客:https://blog.51cto.com/yangrong/p5 linux目录的特点: 1. /是所有目录的顶点. 2. 目录结构像一颗倒挂的树. ...