深入解析分布式存储

一、存储介质

磁带的价值

大多数可能认为磁带这种存储介质已经退出历史舞台,其实并不是,只不过它们属于长期数据备份领域,离普通用户较远,大多数人不了解而已。磁带为什么比其他介质更适合数据备份呢?因为磁带没有机械部件不容易损坏,而且容量大,更重要的是便宜。现在的磁带库支持定期扫描磁带介质、自动修复等完全自动化的数据备份能力。
在大数据和云计算时代,磁盘的需求量更是大增。IBM、索尼等公司都在磁带机技术上投下重金,在容量上得到几十倍的提升。

硬盘

最新的希捷10T硬盘已经研发成功,主要用于云数据中心,华为和阿里巴巴均已部署。
相比于CPU和内存的高速发展,硬盘的发展一直较慢。
为了解决这个问题,伯克利大学的研究小组提出一种将多个硬盘组合成一个单一接口的可以提供并发IO的大容量虚拟硬盘,即所谓的磁盘整列(RAID: Redundant Arrays of Independent Disks)。
RAID主要有提高IO传输速率和数据校验的容错能力。经历了以下几个主要发展阶段:

  • 内接式磁盘阵列卡:
    • 这是一个专有硬件,配合SCSI硬盘使用,成本较高。
    • 后来,有一款IDE-RAID芯片,可以用IDE硬盘组建RAID系统,成本大大降低。
    • 后来,主板厂商都装载了RAID芯片,用户不用购买RAID卡也能组建磁盘整列。
  • 外置式磁盘整列:由单独的控制器和磁盘柜组成一个完整的硬件产品,实现了存储系统与服务器的分离。
    • 这种产品也被称为DAS存储(Direct Attached Storage),只能挂在特定的服务器上才能使用。
    • DAS依赖服务器的CPU资源进行数据读写。DAS与服务器之间通常采用SCSI接口连接,当磁盘空间越来越大时,SCSI称为瓶颈。服务器也会存在单点故障。DAS的扩容需要业务系统停机也是重要的缺点。
  • SAN:Storage Area Network,存储区域网络,通过网络来连接服务器和存储系统。
    • SAN实现了服务器集群与存储系统的多对多连接,解决了DAS的单服务器问题。
    • 刚开始使用光纤网,后来使用以太网实现,成本大为降低。
    • SAN第一次实现了云存储。
    • DAS与SAN都属于块存储设备,只面向服务器提供磁盘读写指令,不面向终端用户的文件存储功能。
  • NAS:Network Attached Storage,网络附属存储。它提供文件存储功能,相当于存储系统+文件服务器。
    • Unix客户机可能通过NFS协议来访问,Windows客户机可以通过CIFS访问。

二、网络文件系统NFS

1984诞生在Sun的实验室里,比HTTP协议还早,基于TCP/IP设计。

  • Linux的虚拟文件系统VFS:Linux在内核层设计了一套接口,用来统一对各种文件系统的调用。所以只要符合VFS的接口,就可以与Linux进行无缝对接,这也是Linux支持各种文件系统共存的原因。
  • NFS Client也是实现了VFS接口。当用户访问一个NFS映射的文件时,VFS将请求转发给NFS Client(这是一个守护进程),它收到请求后,通过RPC与远程的NFS Server进行通信,通过网络传输的方式获取文件内容,最终返回给用户。(NFS通过RPC实现)
  • 为了保证NFS的效率,默认采用UDP
  • 为了解决分布式情况下的文件共享冲突问题,NFS采用了分布式文件共享锁来解决。进程会使用一个「锁文件」,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。
  • 配置过程:在Server服务器上启动NFS的服务端进程,确定哪些目录可以开放给客户端挂载;客户端选择挂载哪些目录,一旦挂载好,就可以像访问本地文件一样使用了。
  • 示例:mount -t nfs 192.168.0.1:/opt/data /opt/data

三、分布式文件系统

  • NFS:小型网络文件系统
  • Google 的Global File System
  • IBM的General Parallel File System:后面使用SAN,SAN的集中式IO称为瓶颈。
  • Lustre:HPC领域的分布式文件系统中的王者。聚合IO可达700G/s,扩展性很好。
    • 元数据服务器不涉及具体文件读写,客户端从元数据服务器上获取地址后直接与对应的服务器通讯,这样避免了元数据服务器成为瓶颈,性能也更高。这种思路被HDFS采纳。
    • 对网络要求很高
    • 支持RDMA
    • HPC领域中扩展性最高的文件系统
    • 主要用于大文件IO,小文件IO性能较差。
  • GlusterFS:通用的解决方案。被RedHat收购。
    • 使用标准的Linux文件,不引入新的格式,文件不经过任何加密或编码。
    • 直接使用操作系统自身的文件系统。
    • Docker和Kubernetes建议使用GlusterFS。
    • 去中心化设计
    • 强大的可扩展能力
    • 弹性哈希算法是其灵魂设计之一。不需要元数据服务器,仅仅依靠文件路径和文件名即可定位到文件在集群中位置。缺点是目录遍历时效率低下,没有元数据,目录下文件又分散在各个存储节点中,所以需要遍历所有节点才能遍历。后来干脆取消了目录遍历功能。客户端可以用某个文件来记录和维护文件目录下所有文件的ID。
  • Ceph:也被RedHat收购。
    • 充分利用每个服务器的计算能力,而不仅仅是把它们当作存储设备。利用每个节点的计算能力来提高性能和自动化水平。具备自动化运维的能力!!
    • 采用去中心化设计(没有元数据服务器),扩展性大为提高。
    • 提供块存储、分布式文件存储和分布式对象存储

四、软件定义存储SDS

  • 对象存储:图片、视频、文档、邮件等都是对象数据,数据本身是带格式。
  • 业界标准:最先给出接口的就是标准,Amazon S3的REST API
  • OpenStack的Swift
  • Ceph
  • 软件定义存储:提供自助的服务接口,用于分配和管理虚拟存储空间。

你可能感兴趣的:(架构相关)