再谈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对 ...
随机推荐
- react diff
传统diff 通过循环递归对节点的依次对比,复杂度是O(n3) react diff react对传统diff进行了优化,将复杂度降为O(n) react基于这几个前提对diff进行了优化: 忽略跨层 ...
- HTTP协议学习总结
一个web应用程序,往往是通过http协议进行前后端通信的.而作为一个web工程师,掌握HTTP协议因此也是Web开发必备的一项技能了,尤其是在工作了一定年限之后,更是深感该知识点的重要性.因此,将以 ...
- iOS完整学习路线
来源:http://www.cnblogs.com/mjios/p/3226954.html
- 利用ViewStub实现布局懒惰加载
这个问题也是头条面试官问的,本身没什么难度,但以前确实没仔细研究过. 1.使用介绍 ViewStub是一种不可见的尺寸为0的View,用来实现布局资源的懒加载.当ViewStub被设置为用户可见或其 ...
- Python Image库简单处理图像
直接列举几个常用的函数,可在 http://effbot.org/imagingbook/image.htm 中查看更多相关函数. from PIL import Image import numpy ...
- pyecharts绘制geo地图
pyecharts是一种非常强大的绘图python库,绘制的图形非常好看,并且有代表性,不仅仅是地图,还可以绘制条形图.饼图.词云图等等. # 安装方法 pip install pyecharts # ...
- MySQL/MariaDB数据库的冷备份和还原
MySQL/MariaDB数据库的冷备份和还原 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL/MariaDB数据库的备份和还原概述 1>.为什么要备份 为了 ...
- git remote 命令的用法
查看关联的远程仓库信息 # 查看关联的远程仓库的名称 git remote # 查看关联的远程仓库的详细信息 git remote -v 添加远程仓库的关联 远程仓库的名称一般默认为 ...
- D. Zero Quantity Maximization ( Codeforces Round #544 (Div. 3) )
题目链接 参考题解 题意: 给你 整形数组a 和 整形数组b ,要你c[i] = d * a[i] + b[i], 求 在c[i]=0的时候 相同的d的数量 最多能有几个. 思路: 1. 首先打开 ...
- Echo团队Alpha冲刺随笔 - 第九天
项目冲刺情况 进展 已经进入测试阶段,正在消除系统的bug 问题 通过测试,找出了系统中存在的较多bug...... 体会 测试太重要了,很多原本以为没什么bug,一测就能找到好几个,而且改个bug真 ...