`
unsoundboy
  • 浏览: 60689 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

分布式存储系统设计的若干原则

阅读更多

1、CAP理论
2000年Eric Brewer教授提出了著名的CAP理论 ,即:一个分布式系统不可能满足一致性,可用性和分区容错性这三个需求,最多只能同时满足两个。2002年MIT的Seth Gilbert 和 Nancy lynch两人证明了CAP理论的正确性 。根据CAP理论,一致性(C),可用性(A),分区容错性(P),三者不可兼得,必须有所取舍。因此系统架构师不要把精力浪费在如何设计才能同时满足CAP三者的完美分布式系统,而是应该研究如何进行取舍,满足实际的业务需求。


C: Consistency(一致性), 任何一个读操作总是能读取到之前完成的写操作结果,也就是在分布式环境中,多点的数据是一致的;
A: Availability(可用性), 每一个操作总是能够在确定的时间内返回,也就是系统随时都是可用的;
P: Tolerance of network Partition(分区容忍性), 在出现网络分区(比如断网)的情况下,分离的系统也能正常运行;
对 于分布式存储系统而言,分区容错性(P)是基本需求,因此只有CP和AP两种选择。CP模式保证分布在网络上不同节点数据的一致性,但对可用性支持不足, 这类系统主要有BigTable, HBASE, MongoDB, Redis, MemcacheDB, Berkeley DB等。AP模式主要以实现"最终一致性(Eventual Consistency)"来确保可用性和分区容忍性,但弱化了数据一致性要求,典型系统包括Dynamo, Tokyo Cabinet, Cassandra, CouchDB, SimpleDB等。

2、Eventual Consistency(最终一致性)
简而言之:过程松,结果紧,最终结果必须保持一致性。

从客户端考虑数据一致性模型,假设如下场景:
存储系统 :它在本质上是大规模且高度分布的系统,其创建目的是为了保证耐用性和可用性。
进程A :对存储系统进行读写。
进程B和C :这两个进程完全独立于进程A,也读写存储系统。客户端一致性必须处理一个观察者(在此即进程A、B或C)如何以及何时看到存储系统中的一个数据对象被更新。

根据以上场景可以得到如下三种一致性模型:
强一致性 :在更新完成后,(A、B或C进行的)任何后续访问都将返回更新过的值。
弱一致性 :系统不保证后续访问将返回更新过的值,在那之前要先满足若干条件。从更新到保证任一观察者看到更新值的时刻之间的这段时间被称为不一致窗口。
最终一致性 :这是弱一致性的一种特殊形式;存储系统保证如果对象没有新的更新,最终所有访问都将返回最后更新的值。如果没有发生故障,不一致窗口的最大值可以根据下列因素确定,比如通信延迟、系统负载、复制方案涉及的副本数量。

客户端一致性模型的变体有:
因果一致性(Causal consistency): 如果进程A通知进程B它已更新了一个数据项,那么进程B的后续访问将返回更新后的值,且一次写入将保证取代前一次写入。与进程A无因果关系的进程C的访问遵守一般的最终一致性规则。
“读己之所写”一致性(Read-your-writes consistency): 这是一个重要的模型。当进程A自己更新一个数据项之后,它总是访问到更新过的值,绝不会看到旧值。这是因果一致性模型的一个特例。
会话一致性(Session consistency): 这是上一个模型的实用版本,它把访问存储系统的进程放到会话的上下文中。只要会话还存在,系统就保证“读己之所写”一致性,系统保证也不会延续到新的会话。
单调读一致性(Monotonic read consistency): 如果进程已经看到过数据对象的某个值,那么任何后续访问都不会返回在那个值之前的值。
单调写一致性(Monotonic write consistency): 系统保证来自同一个进程的写操作顺序执行。要是系统不能保证这种程度的一致性,就非常难以编程了。

3、BASE理论
BASE,即Basically Availble(基本可用)、Soft-state (软状态)、Eventual Consistency (最终一致性)。BASE的英文意义是碱,而ACID是酸,有点水火不容的意思。
关 系数据库的ACID模型拥有高一致性和可靠性,丧失可用性。ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性 (Isolation)、持久性(Durability)。其中的一致性强调事务完成时,数据库处于一致的状态。对于很多应用来说,一致性要求可以降低, 而可用性(Availability)的要求则更为明显。从而产生了弱一致性的理论BASE。 BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性或可靠性。它仅需要保证系统基本可用,支持分区失败,允许状态在一定时间内 不同步,保证数据达到最终一致性即可。BASE思想主要强调基本的可用性,如果你需要高可用性,也就是纯粹的高性能,那么就要以一致性或容错性为牺 牲,BASE思想的方案在性能上还是有潜力可挖的。

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


随着闪存时代的来临,五分钟法则一分为二:是把 SSD 当成较慢的内存(extended buffer pool )使用还是当成较快的硬盘(extended disk)使用。小内存页在内存和闪存之间的移动对比大内存页在闪存和磁盘之间的移动。在这个法则首次提出的 20 年之后,在闪存时代,5 分钟法则依然有效,只不过适合更大的内存页(适合 64KB 的页,这个页大小的变化恰恰体现了计算机硬件工艺的发展,以及带宽、延时)。
根据数据结构和数据特点的不同,对于文件系统来说, 操作系统倾向于将 SSD 当作瞬时内存(cache)来使用。而对于数据库,倾向于将 SSD 当作一致性存储来用。

5、Amdahl定律和Gustafson定律
这里我们以S(n)表示n核系统对具体程序的加速比,K表示串行部分计算时间比例。
Amdahl 定律的加速比:S(n) = 使用1个处理器的串行计算时间 / 使用n个处理器的并行计算时间,S(n) = 1/(K+(1-K)/n) = n/(1+(n-1)K)
Gustafson定律的加速比:S(n) = 使用n个处理器的并行计算量 / 使用1个处理器的串行计算量,S(n) = K+(1-K)n
通俗的讲,Amdahl定律将工作量看作1,有n核也只能分担1-K的工作量;而Gustafson定律则将单核工作量看作1,有n核就可以增加n(1-K)的工作量。这里没有考虑引进分布式带来的开销,如网络和加锁。从性能价格比的角度看,并不是越分布越好。

6、摩尔定律
摩尔定律是由英特尔(Intel)创始人之一戈登·摩尔(Gordon Moore)提出来的。其内容为:集成电路上可容纳的晶体管数目,约每隔18个月便会增加一倍,性能也将提升一倍,当价格不变时;或者说,每一美元所能买 到的电脑性能,将每隔18个月翻两倍以上。这一定律揭示了信息技术进步的速度。"Tape is dead, disk is tape, flash is disk, RAM locality is king." Jim Gray - 2006. 从系统Scale-up的角度看,花费大量的时间和精力来提高系统性能,如Cache,数据预测与预取,数据局部性,并发性等,可能还不如扩充内存量、使 用SSD替换传统磁盘来得直接和划算。计算机硬件的更新速度越来越快,成本也越为越低。作为一名系统架构师,应该充分考虑摩尔定律的影响,使用更经济、合 理和简单的方法来实现系统性能目标。

7、推荐阅读
Brewer’s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services: http://lpd.epfl.ch/sgilbert/pubs/BrewersConjecture-SigAct.pdf
Brewer's CAP Theorem: http://www.julianbrowne.com/article/viewer/brewers-cap-theorem
Brewers CAP theorem on distributed systems: http://www.royans.net/arch/brewers-cap-theorem-on-distributed-systems  
Towards Robust Distributed Systems:http://www.cs.berkeley.edu/~brewer/cs262b-2004/PODC-keynote.pdf
NoSQL数据库笔谈:http://sebug.net/paper/databases/nosql/Nosql.html#CAP_7730791447684169_231516710
Visual Guide to NoSQL Systems:http://blog.nahurst.com/visual-guide-to-nosql-systems/?c=1

分享到:
评论

相关推荐

    分布式数据库系统-复习.doc

    1. 填空 分布式数据库系统按局部数据库管理系统的数据模型分类,可以分为 和 两类。 同构型DDBS 异构型DDBS 分布式数据库系统按全避控制系统类型分类,可以分为 、 和 三类。 全局控制集中型DDBS 全局控制分散型DDBS...

    银行安防系统设计方案.doc

    《CATV行业标准》 GY/T 121—95 20) 中行监控系统设计要求 4、设计遵循原则 4。1、以技术先进和标准化为设计标准 系统应充分遵循现有的国际通行设计规范。在设计和实施时,最大限度地利用当今 先进、成熟、具有发展...

    《操作系统原理与设计》全本

    1.4.5 分布式操作系统 16 1.4.6 嵌入式操作系统 17 1.4.7 自由软件和Linux操作系统 18 1.5 操作系统的功能 19 1.5.1 处理机管理 20 1.5.2 存储管理 20 1.5.3 设备管理 20 1.5.4 文件管理 21 1.5.5 用户接口 21 1.6 ...

    设计数据密集型应用

    第一部分,主要讨论有关增强数据密集型应用系统所需的若干基本原则。首先开篇第1章即瞄准目标:可靠性、可扩展性与可维护性,如何认识这些问题以及如何达成目标。第2章我们比较了多种不同的数据模型和查询语言,讨论...

    《计算机操作系统》期末复习指导

    操作系统的五大类型是批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统。 多道程序设计:即在系统内(内存)同时存放并运行几道相互独立的程序。 多道程序设计的基础:是将...

    操作系统重点

     操作系统的主要类型有:多道批处理系统、分时系统、实时系统、网络操作系统、个人机操作系统、分布式系统和嵌入式操作系统。  UNIX系统是著名的分时系统。  3.分时概念:主要是指若干并发程序对CPU时间的共享。 ...

    软件工程知识点

    主要有以下几个方面的设计任务:制定规范、系统构架设计、软件结构设计、公共数据结构设计、安全性设计、故障处理设计、可维护性设计、编写文档、设计评审。 2.系统构架设计 (1)集中式结构 集中式系统由一台...

    SQL Server 2008数据库设计与实现

    通过将理论融入数据库实践,清晰地讲解了关系型数据库的设计原则,完整地展示了如何进行良好的关系型数据库设计,深入揭示了SQL Server 2008的技术细节。  本书浓缩了作者作为SQL Server数据库架构师多年来丰富的...

    我国GIS软件的发展现状

    开发分布式的GIS软件不仅要考虑网络应用层协议的设计,而且还必须考虑元数据(如数据来源、投影方式、坐标系统、作业方式等)标准的建设。另外,还必须研究GIS应用的表示技术,如GSQL语言等。在这种情况下,地学和...

    操作系统原理 计算机

    1.2.3 多道程序设计与操作系统的形成.....................................................................................8 1.2.4 操作系统的发展与分类........................................................

    构建安全的 ASP.NET 应用程序(中文译作+英文原作)

    熟悉第 I 部分介绍的概念、原则和技术,可以帮助您充分理解和应用本指南其他章节中的知识。第 I 部分包括以下各章: • 第 1 章,简介 • 第 2 章,ASP.NET 应用程序的安全模型 • 第 3 章,身份验证和授权 • 第...

    flash shiti

    13. 如果要让Flash 同时对若干个对象产生渐变动画,则必须将这些对象放置在不同的层中。 □ A. 正确 □ B. 错误 14. 矢量图形用来描述图像的是: □ A. 直线 □ B. 曲线 □ C. 色块 □ D. A 和B 都正确 15. 下列那几...

Global site tag (gtag.js) - Google Analytics