分布式存储概述
2016-04-02 17:09
232 查看
分布式存储概述
分布式存储是相对于单机存储而言,之所以要分布自然是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。存储系统的关注点
关于存储系统,一般我们关注下面几个方面:数据分布与负载均衡
数据存储的可靠性与一致性
数据访问性能
系统容错能力
系统扩展能力
在单机存储系统中有一种独立磁盘冗余阵列(RAID,redundant array of independent disks)技术,
是把相同的数据存储在多个硬盘不同地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。
这个技术基本解决了我们上面提到的前三点,数据可以通过磁盘阵列控制程序均
4000
匀分布在多个硬盘上,
以实现负载均衡,并通过冗余来保障可靠性。类似单机挂载多磁盘,数据在磁盘阵列上的冗余副本要保持一致也容易。
存储系统的访问性能基本受制于磁盘的性能,通过分散到多磁盘确实达到了提升性能的效果。
真正的问题难点在于后两点:
磁盘阵列解决了单一磁盘的脆弱性,但并不能提升存储子系统整体的可用性,或者说容错能力。
同理扩展能力同样受制于磁盘阵列的物理扩展槽的限制。
分布式存储的定义与分类
所以分布式存储应运而生,作为存储系统它同样需要面对上述问题。先来看下它的定义:
分布式存储系统是大量普通 PC 服务器通过网络互联,对外作为一个整体提供存储服务。
从上面的定义看,更多时候我们把分布式存储作为一种服务面向各种不同的数据存储需求。
从数据存储模型上,我们可以进一步分类分布式存储服务为:
文件模型: 对应分布式文件系统,如:GFS、HDFS
关系模型: 对应分布式数据库系统,如:Google Spanner、Taobao OceanBase
键值模型: 很多 NoSQL 系统采用,如:Redis
分布式存储的得与失
面对单机存储系统面对两个难点,分布式存储系统通过集群方式扩展到几百甚至几千台集群规模来解决系统扩展能力,通过软件层面对单机服务器的硬件容错能力大大提升了整体集群的容错能力。
在获得这些好处时,自然也有所牺牲,所谓有得必有失。
说到存储不得不提单机数据库存储的事务特性:A(原子性)C(一致性)I(隔离性)D(持久性),
而扩展到分布式存储后,受限于分布式 C(一致性)A(可用性)P(分区容忍性)理论,几乎不可能满足完整得事务特性。
各种分布式存储服务实现都对单机存储的事务特性作了权衡取舍,满足特定的服务场景需求。
另外分布式存储系统是基于网络互联的,所以除了基本得磁盘访问性能开销,还多了网络性能开销。
通常一般机械硬盘得平均寻道时间为 10ms,而机房内网得网络访问开销一般小于 0.5 ms,相对性能损失较小。
而原本由磁阵控制程序负责得数据在磁盘中的分布、负载均衡策略和一致性保障,
在分布式存储中都需要软件在整个机器集群层面去考虑,复杂度大大提高。
总结
最近打算对后端分布式架构设计领域知识做一个梳理,形成一个完善的知识体系,本文算一个开始吧。上面对分布式存储服务进行了总体综述,了解了分布式存储服务的分类及其架构设计的关注点。
后续将进一步展开,深入到具体类型的分布式存储服务架构设计要点与实现细节。
参考
[1] 杨传辉. 大规模分布式存储系统. 机械工业出版社(2013-09), pp. 7-52转载自:http://www.cnblogs.com/mindwind/p/4833103.html
相关文章推荐
- Tomcat端口被占用解决方法(不用重启)
- “传奇”图象数据存储方式
- 超大数据量存储常用数据库分表分库算法总结
- SQL Server误区30日谈 第18天 有关FileStream的存储,垃圾回收以及其它
- C++实现图的邻接表存储和广度优先遍历实例分析
- 详解Android文件存储
- C#调用sql2000存储过程方法小结
- PHP 存储文本换行实现方法
- 注册表中存储数据库链接字符串的方法
- Mysql中存储UUID去除横线的方法
- MySQLMerge存储引擎
- 深入PHP变量存储的详解
- MySQL存储毫秒数据的方法
- MySQL存储过程中使用动态行转列
- Android App将数据写入内部存储和外部存储的示例
- 简介Android应用中sharedPreferences类存储数据的用法
- Android App中各种数据保存方式的使用实例总结
- 详解Android四种存储方式
- Android编程中的5种数据存储方式
- Android在不使用数据库的情况下存储数据的方法