一文章讲透分布式存储

为何要使用分布式存储?node

为了简化用户端的使用,提供了一个分布式缓存系统来提供对此分布式存储系统的访问接口以及本地数据缓冲以下降网络压力。算法

分布式存储简介数组

分布式存储系统,是将数据分散存储在多台独立的设备上。传统的网络存储系统采用集中的存储服务器存放全部数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能知足大规模存储应用的须要。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,它不但提升了系统的可靠性、可用性和存取效率,还易于扩展。缓存

分布式存储常见的架构安全

中间控制节点架构(HDFS)服务器

分布式存储最先是由谷歌提出的,其目的是经过廉价的服务器来提供使用与大规模,高并发场景下的Web访问问题。如图3是谷歌分布式存储(HDFS)的简化的模型。在该系统的整个架构中将服务器分为两种类型,一种名为namenode,这种类型的节点负责管理管理数据(元数据),另一种名为datanode,这种类型的服务器负责实际数据的管理。网络

图3 HDFS简化架构图示意图架构

上图分布式存储中,若是客户端须要从某个文件读取数据,首先从namenode获取该文件的位置(具体在哪一个datanode),而后从该位置获取具体的数据。在该架构中namenode一般是主备部署,而datanode则是由大量节点构成一个集群。因为元数据的访问频度和访问量相对数据都要小不少,所以namenode一般不会成为性能瓶颈,而datanode集群能够分散客户端的请求。所以,经过这种分布式存储架构能够经过横向扩展datanode的数量来增长承载能力,也即实现了动态横向扩展的能力。并发

彻底无中心架构---计算模式(Ceph)分布式

如图是Ceph存储系统的架构,在该架构中与HDFS不一样的地方在于该架构中没有中心节点。客户端是经过一个设备映射关系计算出来其写入数据的位置,这样客户端能够直接与存储节点通讯,从而避免中心节点的性能瓶颈。

图4 Ceph无中心架构

在Ceph存储系统架构中核心组件有Mon服务、OSD服务和MDS服务等。对于块存储类型只须要Mon服务、OSD服务和客户端的软件便可。其中Mon服务用于维护存储系统的硬件逻辑关系,主要是服务器和硬盘等在线信息。Mon服务经过集群的方式保证其服务的可用性。OSD服务用于实现对磁盘的管理,实现真正的数据读写,一般一个磁盘对应一个OSD服务。

彻底无中心架构---一致性哈希(Swift)

与Ceph的经过计算方式得到数据位置的方式不一样,另一种方式是经过一致性哈希的方式得到数据位置。一致性哈希的方式就是将设备作成一个哈希环,而后根据数据名称计算出的哈希值映射到哈希环的某个位置,从而实现数据的定位。

图5 一致性哈希原理

如图5是一致性哈希的基本原理,为了绘制简单,本文以一个服务器上的一个磁盘为例进行介绍。为了保证数据分配的均匀性及出现设备故障时数据迁移的均匀性,一致性哈希将磁盘划分为比较多的虚拟分区,每一个虚拟分区是哈希环上的一个节点。整个环是一个从0到32位最大值的一个区间,而且首尾相接。当计算出数据(或者数据名称)的哈希值后,必然落到哈希环的某个区间,而后以顺时针,必然可以找到一个节点。那么,这个节点就是存储数据的位置。

Swift存储的整个数据定位算法就是基于上述一致性哈希实现的。在Swift对象存储中,经过帐户名/容器名/对象名三个名称组成一个位置的标识,经过该惟一标识能够计算出一个整型数来。而在存储设备方面,Swift构建一个虚拟分区表,表的大小在建立集群是肯定(一般为几十万),这个表其实就是一个数组。这样,根据上面计算的整数值,以及这个数组,经过一致性哈希算法就能够肯定该整数在数组的位置。而数组中的每项内容是数据3个副本(也能够是其它副本数量)的设备信息(包含服务器和磁盘等信息)。也就是通过上述计算,能够肯定一个数据存储的具体位置。这样,Swift就能够将请求从新定向到该设备进行处理。

图6 Swift数据定位示意图

上述计算过程是在一个名为Proxy的服务中进行的,该服务能够集群化部署。所以能够分摊请求的负载,不会成为性能瓶颈。

看完了上面3种最为通用的分布式存储架构的介绍,你是否对分布式存储有了更进一步的了解。

相关文章
相关标签/搜索