分布式存储是相对于单机存储而言,之所以要分布自然是因为互联网时代信息数据大爆炸,单机已经难以满足大型应用的数据存储需求。
存储系统的关注点
关于存储系统,一般我们关注下面几个方面:
- 数据分布与负载均衡
- 数据存储的可靠性与一致性
- 数据访问性能
- 系统容错能力
- 系统扩展能力
在单机存储系统中有一种独立磁盘冗余阵列(RAID,redundant array of independent disks)技术,
是把相同的数据存储在多个硬盘不同地方的方法。通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。
这个技术基本解决了我们上面提到的前三点,数据可以通过磁盘阵列控制程序均匀分布在多个硬盘上,
以实现负载均衡,并通过冗余来保障可靠性。类似单机挂载多磁盘,数据在磁盘阵列上的冗余副本要保持一致也容易。
存储系统的访问性能基本受制于磁盘的性能,通过分散到多磁盘确实达到了提升性能的效果。
真正的问题难点在于后两点:
磁盘阵列解决了单一磁盘的脆弱性,但并不能提升存储子系统整体的可用性,或者说容错能力。
同理扩展能力同样受制于磁盘阵列的物理扩展槽的限制。
分布式存储的定义与分类
所以分布式存储应运而生,作为存储系统它同样需要面对上述问题。
先来看下它的定义:
分布式存储系统是大量普通 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
下面是我自己开的一个微信公众号 [瞬息之间],除了写技术的文章、还有产品的、行业和人生的思考,希望能和更多走在这条路上同行者交流,有兴趣可关注一下,谢谢。
版权声明:本文为博主原创文章,未经博主允许不得转载。