CloudFoundry基础知识之理论篇
本文介绍CF涉及的基础知识,包括CAP理论。
CAP理论
任何基于网络的分布式系统,都最多只能拥有以下三条中的两条(三选二):
- 数据一致性(Consistency),等同于所有节点访问同一份最新的数据副本;
- 对数据更新具备高可用性(Availability);
- 能容忍网络分区(Partition Tolarance)。
高可用性:
可用性指“Reads and writes always succeed
”,即服务一直可用,而且是正常响应时间。
对于一个可用性的分布式系统,每一个非故障的节点必须对每一个请求作出响应。也就是,该系统使用的任何算法必须最终终止。当同时要求分区容忍性时,这是一个很强的定义:即使是严重的网络错误,每个请求必须终止。
好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。通常情况下,可用性和分布式数据冗余,负载均衡等有着很大的关联。
可用性也即系统正常运行时间与总时间(一般以1年为单位)的百分比,业界用N个9 来量化可用性,比如 “4个9” 指的是1年当中99.99%的时间可用(停机时间约1小时)。亚马逊的AWS S3据说达到了11个9,大概几年内停机几分钟。
描述 | 通俗叫法 | 可用性级别 | 年度停机时间 |
基本可用性 | 2个9 | 99% | 87.6小时 |
较高可用性 | 3个9 | 99.9% | 8.8小时 |
具有故障自动恢复能力的可用性 | 4个9 | 99.99% | 53分钟 |
极高可用性 | 5个9 | 99.999% | 5分钟 |
一致性:
一致性指“all nodes see the same data at the same time
”,即更新操作成功并返回客户端完成后,所有节点在同一时间的数据完全一致。
对于一致性,可以分为从客户端和服务端两个不同的视角。从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。一致性是因为有并发读写才有的问题,因此在理解一致性的问题时,一定要注意结合考虑并发读写的场景。
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。如果能容忍后续的部分或者全部访问不到,则是弱一致性。如果经过一段时间后要求能访问到更新后的数据,则是最终一致性。
分区容错性:
分区容错性指“the system continues to operate despite arbitrary message loss or failure of part of the system
”,即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。
分区容错性和扩展性紧密相关。在分布式应用中,可能因为一些分布式的原因导致系统无法正常运转。好的分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体。比如现在的分布式系统中有某一个或者几个机器宕掉了,其他剩下的机器还能够正常运转满足系统需求,或者是机器之间有网络异常,将分布式系统分隔未独立的几个部分,各个部分还能维持分布式系统的运作,这样就具有好的分区容错性。
CAP理论的意义
随着互联网应用的飞速发展,数据量与日俱增,传统的ACID数据库已经不能满足如此大的海量数据存储了。这个时候需要设计出好的分布式数据存储方式。而这些分布式数据存储方式受到CAP理论的约束,不可能达到高一致性,高可用性,高分区容错性的完美设计。所以我们在设计的时候要懂得取舍,重点关注对应用需求来说比较重要的,而放弃不重要的,在CAP这三者之间进行取舍,设计出贴合应用的存储方案。
目前众多的分布式数据系统通过降低一致性来换取可用性。下面是一个简单的例子:
两个节点数据冗余,第一个节点先有一个写操作,第二个节点后有一个读操作。下面的图中a是整个过程,要具有一致性的话需要等待a1进行write,然后同步到a2,然后a2再进行write,只有整个事务完成以后,a2才能够进行read。但是这样的话使得整个系统的可用性下降,a2一直阻塞在那里等待a1同步到a2。这个时候如果对一致性要求不高的话,a2可以不等待a1数据对于a2的写同步,直接读取,这样虽然此时的读写不具有一致性,但是在后面可以通过异步的方式使得a1和a2的数据最终一致,达到最终一致性。
BASE理论
BASE理论是CAP理论结合实际的产物。BASE(Basically Available, Soft-state,Eventually consistent)英文中有碱的意思,这个正好和ACID的酸的意义相对,很有意思。BASE恰好和ACID是相对的,BASE要求牺牲高一致性,获得可用性或可靠性。
参考资料:
1.http://www.cnblogs.com/sky20081816/archive/2012/04/12/2444072.html
2.http://www.infoq.com/cn/articles/cap-twelve-years-later-how-the-rules-have-changed
3.http://www.hollischuang.com/archives/666
转载于:https://www.cnblogs.com/draken/p/6417981.html
CloudFoundry基础知识之理论篇相关推荐
- datagrid出现相同两组数据_stata 数据操作基础知识:以一篇论文数据操作为例
stata 数据操作基础知识:以一篇论文数据操作为例 上节回顾及问题 统计学学习大图景 数据描述 分位数回归 存在的问题: 1.学了就要多使用,哪怕生搬硬套也要多用 2.时间序列的方法,大家可以操作, ...
- 计算机数据库管理基本知识,2015年计算机四级考试《数据库技术》基础知识:概念篇...
2015年计算机四级考试<数据库技术>基础知识:概念篇 信息与数据 1. 信息.物质.能量是组成客观世界并促进社会发展的三大基本要素; 2. 信息(Information)--是客观世界事 ...
- 反相畴的基础知识和一篇论文
校历第十三周计划(11.18-11.24):反相畴的基础知识和一篇论文 上周由于需要尽快和学长交流,因此提前先看了两篇关于反相畴的论文.由于基础知识的匮乏,这周打算补充一些基础知识,主要来源于薄膜生长 ...
- 计算机等级考试上网怎么做,计算机基础知识上网设置篇
计算机基础知识上网设置篇 分类:计算机等级 | 更新时间:2016-07-08| 来源:转载 现在让我们看看如何进行上网的设置. 首先,让我们查看一下在你的Windows95或是Windows98里是 ...
- 软件测试基础___测试理论篇
前言 高手,是避免失败,而不是追求成功 目录 前言 高手,是避免失败,而不是追求成功 1.为什么要写测试理论篇 2.软件测试的目标,模型及核心 3.软件测试目标案例 4.软件测试的策略 5.软件测试的 ...
- 安卓基础知识之View篇(四):View 事件滑动冲突解决方案
安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门.同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系 ...
- 安卓基础知识之Activity篇(一):Activity生命周期
安卓基础知识系列旨在简明扼要地提供面试或工作中常用的基础知识,让对安卓还不太熟悉的小伙伴更快地入门.同时自己在工作中,也没法完全记住所有的基础细节,写这样的系列文章,可以让自己形成一个更完备的知识体系 ...
- 计算机基础知识教程优秀篇,计算机基础知识优秀教案.doc
计算机基础知识优秀教案 PAGE PAGE 6 计算机基础知识教案 前言 第一节 键盘知识 一.键盘分类 根据键盘的按键数分为:101.103.107键盘. 二.键盘分区 第一区:功能键区(ESC-F ...
- 数据库基础与SQL基础知识看这篇就够了!
一.数据库简介 1. DBMS(DataBaseManagement System,数据库管理系统)和数据库数据库Schema有两种含义,一种是概念上的Schema,指的是一组DDL语句集,该语句集完 ...
最新文章
- Docker多台宿主机间的容器互联-centos7
- mysql 查询绑定变量_MySQL高级特性——绑定变量
- Eclipse 报 “Exception in thread main java.lang.OutOfMemoryError: Java heap space ”错误的解决办法
- SDN教育城域网解决方案
- android UI自动化测试工具Robotium VS NativeDriver VS Calabash
- Java EE 8怎么了? (第2部分)
- vscode私钥设置_VSCode远程开发配置指南
- ShopXO 开发文档
- httpClient测试
- 使用gdb进行调试入门篇
- 阿铭Linux_网站维护学习笔记20190412
- 佛系前端面试题记录--第四周
- Teigha 40010 保存设置Wipeout时的边界显示问题
- 2022香港ib成绩公布,实在是太高了
- 全国计算机等级考试c语言编程题,全国计算机等级考试C语言编程题(附答案)
- SSM(spring、springmvc、mybatis)框架搭建
- 新周刊:放弃北上广的10个理由
- JS做的一款动感超酷banner
- 面向对象进阶 三大特性
- MXNet的训练基础脚本:base_module.py
热门文章
- HappyLeetcode37:Add Binary
- 使用.NET为Window Mobile写自动化工具的无奈之处.
- 在android中如何使用UDP和TCP传输
- std::string与MFC的CString的比较
- OpenStack是什么?
- unknow Unknown type name 'NSString'
- 转向与重定向的联系与区别
- IntelliJ IDEA 编辑器配置vue高亮显示
- [Node.js] 基于NodeJS+Express+mongoDB+Bootstrap的博客系统实战
- ES6学习笔记(一):轻松搞懂面向对象编程、类和对象