分布式存储概述

Google、Amazon、Alibaba等互联网公司的成功催生了云计算和大数据两大热门的领域。无论是云计算、大数据还是互联网公司的各种应用,它的后台的基础设施都的主要目标就是构建低成本、高性能、可扩展和易用的分布式存储系统。
虽然分布式系统研究了很多年,但是,直到近年来,互联网的数据应用的兴起才使得它可以大规模的应用到工程实践当中。相比传统的分布式系统,互联网公司的分布式系统具有两个特点:一个是规模大,另外一个是成本低。不同的需求造就了不同的设计方案,可以这么说,Google等互联网公司重新定义了大规模分布式存储系统。

1.1 分布式存储的概念

大规模分布式存储系统的定义如下:
“分布式系统是大量普通的PC通过网络互连,对外提供一个整体的存储服务”。
分布式存储系统有以下的特性:

  • 可扩展性:分布式存储系统可以扩展到几百台的集群规模,而且随着集群规模的增长,系统的整体性能呈线性增长;
  • 低成本:分布式存储系统的自动容错、自动负载均衡机制使其可以构建在普通的PC机器上,另外,线性扩展的能力也使得增加、减少机器非常的方便,可以实现自动运维;
  • 高性能:无论是针对整个集群还是单台服务器,都要求分布式存储系统具备高性能;
  • 易用:分布式存储系统需要对外提供易用的接口,另外,也要求具备完善的运维、监控工具,并可以方便的和系统进行集成。

分布式存储系统的主要挑战在于数据、状态信息的持久化,要求在自动迁移、自动容错、并发读写的过程中保证数据的一致性。分布式存储涉及的技术主要来自两个领域:分布式系统以及数据库,如下所示:

  • 数据分布:如何将数据分布到多台机器上并保证数据分布均匀?数据分布到多台服务器之后如何实现跨服务器读写操作?
  • 一致性:如何将数据的多个副本复制到多台服务器,即使在异常的清空下,也能够保证数据在不同副本之间的一致性
  • 容错:如何检测到服务器故障?如何自动将出现故障的机器上的数据和服务迁移到别的机器上?
  • 负载均衡:新增服务器和集群正常运行的过程中如何实现自动负载均衡?数据迁移的过程中如何保证不影响已有的服务?
  • 事务和并发控制:如何设计对外接口使得系统更容易使用?如何设计监控系统并将系统的内部系统状态以方便的形式暴露给运维人员?
  • 压缩、解压缩算法:如何根据数据的特点设计合理的压缩和解压缩算法?如何平衡压缩算法节省的空间存储和对CPU资源的消耗?

1.2 分布式存储的分类

分布式存储系统面临的数据需求比较复杂,大致可以分为以下的三类:

  • 非结构化数据:包括所有格式的办公文档、文本、图片、图像、音频和视频信息等;
  • 结构化数据:一般存储在关系型数据库中,可以用二维关系表结构表示。结构化数据的模式和内容是分开的,数据的模式是需要预先定义的;
  • 半结构化数据:介于非结构化和结构化数据之间,HTML文档就属于半结构化数据。它一般是自描述的,与结构化数据的最大的区别在于,半结构化数据的模式结构内容混在一起,没有明显的区分,也不需要预先定义数据的模式结构。
    不同的分布式存储系统适合处理不同类型的数据。
    有以下几类:

1.2.1 分布式文件系统

互联网应用中,需要存储大量的图片、照片、视频等非结构化的数据,这类数据以对象的形式组织,对象之间没有关联,这样的数据一般称为Blob数据。
分布式文件系统用于存储Blob对象,典型的系统有Facebook Haystack以及Taobao File System。另外,分布式文件系统也常作为分布式表格系统以及分布式数据库的底层存储,例如Google的GFS,可以作为分布式表格系统Bigtable的底层存储。
总体上看,分布式文件系统存储三种类型的数据:Blob对象、定长块以及大文件。在系统的实现层面上,分布式文件系统内部按照数据块来组织数据,每个数据块的大小大致相同,每个数据块可以包含多个Blob对象或者定长块,一个大文件也可以拆分成为多个数据块。分布分布式存储系统将这些数据块分散存储到存储激情,处理数据的复制、一致性、负载均衡、容错等分布式难题,并将用户对Blob对象、定长块以及大文件的操作映射为对底层数据块的操作。

1.2.2 分布式键值系统

分布式键值系统用于存储关系简单的半结构化数据,它只提供基于主键的CRUD功能,即根据主键创建、读取、更新或者删除一条键值记录。
典型的存储系统有Amazon Dynamo以及Taobao Tair,从数据结构的角度来看,分布式键值系统与传统的哈希表比较类似,不同的是,分布式键值系统支持将数据分布到集群当中的多个存储节点中。分布式键值系统是分布式表格系统的一种简化实现,一般用于缓存,比如淘宝Tair以及Memcache。一致性哈希是分布式键值系统中常用的分布式技术。

1.2.3 分布式表格系统

分布式表格系统用于存储关系较为复杂的半结构化数据,与分布式键值系统相关,分布式表格系统不仅仅支持简单的CRUD操作,而且支持扫描某个主键范围。分布式表格系统以表格为单位进行数据组织,每个表格包括很多行,通过主键标识某一行数据,支持根据主键的CRUD功能以及范围查找功能。
分布式表格系统借鉴了很多关系型数据库的技术,例如在某种程度上的事务,比如单行事务,某个实体组下的多个事务。典型的系统包括Bigtable以及Megastore。与分布式数据库相比,分布式表格系统主要支持对单张表格的操作,不支持一些特别复杂的操作,比如表的关联,多表关联,嵌套子查询等。

1.2.4 分布式数据库

分布式数据库一般是从单机数据库扩展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,并且提供SQL关系查询语言,支持多表关联,嵌套子查询等复杂的操作,并提供数据库事务以及并发控制。
典型的系统包括MySQL数据库分片集群,分布式数据库支持的功能最丰富,符合用户的习惯,但可扩展性受到限制。当然,这一点不是绝对的。Google Spanner系统是一个支持多数据中心的分布式数据库,它不仅支持丰富的关系数据库的功能,还能扩展到多个数据库当中的成千上百台的机器。除此之外,阿里巴巴OceanBase系统也是一个支持自动扩展的分布式关系数据库。
关系数据库是目前为止最成熟的存储技术,它的功能最丰富。

你可能感兴趣的:(分布式系统)