分布式系统设计(9)

避免咱们不是在制造永动机,在分布式系统设计前,几个理论必须了解。CAP、BASE、ACID、一致性以及五分钟理论。html

CAP

 

C: Consistency 一致性数据库

A: Availability 可用性(指的是快速获取数据)缓存

P: Tolerance of network Partition 分区容忍性(分布式)网络

CAP理论最先是在2000年7月19号,由Berkeley的Eric Brewer教授在ACM PODC会议上的一个开题演讲中提出,PPT在。此后,MIT的Seth GilbertNancy Lynch理论上证实了Brewer猜测是正确的,CAP理论在学术上正式做为一个定理出现了。数据库设计

NoSQL必定程度上就是基于这个理论提出来的,由于传统的SQL数据库(关系型数据库)都是都是具备ACID属性,对一致性要求很高,所以下降了A(availability)和P(partion tolerance),所以,为了提升系统性能和可扩展性,必须牺牲C(consistency),推翻关系型数据库中ACID这一套。分布式

依据CAP理论,从应用的需求不一样,咱们对数据库时,能够从三方面考虑:性能

· 考虑CA,这就是传统上的关系型数据库(RMDB).网站

· 考虑CP,主要是一些Key-value数据库,典型表明为google的Big Tablegoogle

· 考虑AP,主要是一些面向文档的适用于分布式系统的数据库,如SimpleDB。spa

而对大型网站尤为是SNS网站,对于数据的短时间存储,可用性与分区容忍性优先级要高于数据一致性,通常会尽可能朝着 A、P 的方向设计,而对于数据的持久存储,能够经过传统的SQL来保证一致性(最终一致性)。

CAP理论出现后,不少大规模的网站,尤为是SNS网站的数据库设计都利用其思想,包括Amazon,Facebook和Twitter这几个新兴的IT巨头,所以,必定程度上来说,他们都是CAP的信徒。另外一方面,他们从实践上证实了CAP理论的正确性。

各个系统在CAP理论中的详细体现能够参考上一节的图:

http://www.cnblogs.com/jacksu-tencent/p/3426605.html

ACIDBASE

有趣的是,ACID的意思是酸,而BASE倒是碱的意思,所以这是一个对立的东西。其实,从本质上来说,酸(ACID)强调的一致性(CAP中的C),而碱(BASE)强调是可用性(CAP中的A)。

传统关系型数据库系统的事务都有ACID的属性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。英文为:

· Atomic: Everything in a transaction succeeds or the entire transaction is rolled back.

· Consistent: A transaction cannot leave the database in an inconsistent state.

· Isolated: Transactions cannot interfere with each other.

· Durable: Completed transactions persist, even when servers restart etc. 

中译为:

· 原子性: 整个事务中的全部操做,要么所有完成,要么所有不完成,不可能停滞在中间某个环节。事务在执行过程当中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务历来没有执行过同样。

· 一致性: 在事务开始以前和事务结束之后,数据库的完整性约束没有被破坏。

· 隔离性: 两个事务的执行是互不干扰的,一个事务不可能看到其余事务运行时,中间某一时刻的数据。 两个事务不会发生交互。

· 持久性: 在事务完成之后,该事务所对数据库所做的更改便持久的保存在数据库之中,并不会被回滚。 

在数据库系统中,事务的ACID属性保证了数据库的一致性,好比银行系统中,转帐就是一个事务,从原帐户扣除金额,以及向目标帐户添加金额,这两个数据库操做的总和构成一个完整的逻辑过程,不可拆分,为原子,从而保证了整个系统中的总金额没有变化。

然而,这些ACID特性对于大型的分布式系统来讲,适合高性能不兼容的。好比,你在网上书店买书,任何一我的买书这个过程都会锁住数据库直到买书行为完全完成(不然书本库存数可能不一致),买书完成的那一瞬间,世界上全部的人均可以看到熟的库存减小了一本(这也意味着两我的不能同时买书)。这在小的网上书城也许能够运行的很好,但是对Amazon这种网上书城却并非很好。

而对于Amazon这种系统,他也许会用cache系统,剩余的库存数也许是以前几秒甚至几个小时前的快照,而不是实时的库存数,这就舍弃了一致性。而且,Amazon可能也舍弃了独立性,当只剩下最后一本书时,也许它会容许两我的同时下单,宁愿最后给那个下单成功却没货的人道歉,而不是整个系统性能的降低。

其实,上面的思想是从CAP理论获得的启发,在CAP理论中:

在设计分布式服务中,一般须要考虑三个应用的属性:一致性、可用性以及分区宽容性。可是在实际的设计中,不可能这三方面同时作的很好。

因为CAP理论的存在,为了提升性能,出现了ACID的一种变种BASE:

· Basic Availability:基本可用

· Soft-state :软状态/柔性事务,能够理解为”无链接”的, 而 “Hard state” 是”面向链接”的

· Eventual consistency:最终一致性,最终整个系统(时间和系统的要求有关)看到的数据是一致的。 

在BASE中,强调可用性的同时,引入了最终一致性这个概念,不像ACID,并不须要每一个事务都是一致的,只须要整个系统通过必定时间后最终达到是一致的。好比Amazon的卖书系统,也许在卖的过程当中,每一个用户看到的库存数是不同的,但最终买完后,库存数都为0。再好比SNS网络中,C更新状态,A也许能够1分钟才看到,而B甚至5分钟后才看到,但最终你们均可以看到这个更新。

一致性

为了更好的描述客户端一致性,咱们经过如下的场景来进行,这个场景中包括三个组成部分:

• 存储系统

存储系统能够理解为一个黑盒子,它为咱们提供了可用性和持久性的保证。

• Process A

ProcessA主要实现从存储系统write和read操做

• Process B 和ProcessC

ProcessB和C是独立于A,而且B和C也相互独立的,它们同时也实现对存储系统的write和read操做。

下面以上面的场景来描述下不一样程度的一致性:

• 强一致性

强一致性(即时一致性) 假如A先写入了一个值到存储系统,存储系统保证后续A,B,C的读取操做都将返回最新值

• 弱一致性

假如A先写入了一个值到存储系统,存储系统不能保证后续A,B,C的读取操做能读取到最新值。此种状况下有一个“不一致性窗口”的概念,它特指从A写入值,到后续操做A,B,C读取到最新值这一段时间。

• 最终一致性

最终一致性是弱一致性的一种特例。假如A首先write了一个值到存储系统,存储系统保证若是在A,B,C后续读取以前没有其它写操做更新一样的值的话,最终全部的读取操做都会读取到最A写入的最新值。此种状况下,若是没有失败发生的话,“不一致性窗口”的大小依赖于如下的几个因素:交互延迟,系统的负载,以及复制技术中replica的个数(这个能够理解为master/salve模式中,salve的个数),最终一致性方面最出名的系统能够说是DNS系统,当更新一个域名的IP之后,根据配置策略以及缓存控制策略的不一样,最终全部的客户都会看到最新的值。

I/O的五分钟法则

在1987 年,Jim Gray 与Gianfranco Putzolu 发表了这个"五分钟法则"的观点,简而言之,若是一条记录频繁被访问,就应该放到内存里,不然的话就应该待在硬盘上按须要再访问。这个临界点就是五分钟。 看上去像一条经验性的法则,实际上五分钟的评估标准是根据投入成本判断的,根据当时的硬件发展水准,在内存中保持1KB 的数据成本至关于硬盘中存据400 秒的开销(接近五分钟)。这个法则在1997 年左右的时候进行过一次回顾,证明了五分钟法则依然有效(硬盘、内存实际上没有质的飞跃),而此次的回顾则是针对SSD 这个"新的旧硬件"可能带来的影响。

相关文章
相关标签/搜索