近年来,随各大互联网公司大数据应用的兴起,分布式系统广泛地被投入实践当中。互联网公司的分布式系统相比传统分布式系统,具有两大特点:规模大和成本低。不同的互联网公司会根据自己业务的需求,设计出适合的方案。分布式系统底层起支撑作用的是分布式存储系统,本文总结分布式存储系统的定义与分类。
分布式存储概念
大量PC机通过网络互联,对外作为一个整体提供存储服务。
四大特性:
可扩展: 分布式存储系统可以通过增加PC机的方式,使系统整体性能表现为线性增长。
低成本:分布式存储系统的自动容错、自动负载均衡机制都构建在PC机上。
高性能:大数据时代对分布式存储系统的整体要求。
易用:分布式存储系统需要能提供易用的对外接口,还要具备完善的监控、运维工具,并且能方便与其它系统集成。
分布式存储系统主要涉及的技术:
数据分布:怎么将数据均匀地分布到多台PC机上?如何实现跨PC机读写操作?
一致性:如何将数据的多个副本分布在多台PC机上,在出现异常的时候,怎么保证多个副本的数据的一致性?
容错:如何检测到PC机故障,怎么自动地将故障PC机的数据与服务迁移到其他PC机上?
负载均衡:新增PC机和集群中正常运行过程中如何实现自动负载均衡?数据迁移过程中如何保证不影响已有服务?
事务与并发控制:如何实现分布式事务?如何实现多版本并发控制?
易用:如何设计对外接口使得系统便于使用?如何设计监控系统使系统内部状态以简单的形式暴露给运维人员?
压缩与解压缩:如何根据数据特点设计合理的压缩/解压缩算法,如何权衡压缩算法的存储消耗和CPU计算消耗?
存储的数据分类:
非结构化数据:如声频、图像、文档、视频。
半结构化数据:一般是自描述的,如HTML文档,模型结构和内容混在一起的数据,数据模式不需要预先定义。
结构化数据:模型结构和内容是分开的,数据模式需要预先定义,一般存储在关系数据库中,可用二维关系表结构表示。
分布式存储分类
一、分布式文件系统
互联网应用需要存储大量的图片、视频等非结构化数据对象,这类数据以对象的形式组织,对象之间没有关联,一般称作Blob(Binary Large Object)数据。分布式文件系统用来存储Blob对象,如Facebook Haystack、Taobao Flie System。
分布式文件系统主要存储三种类型数据:Blob对象、定长块、大文件。分布式系统内部按数据块(chunk)来组织数据,每个数据块大小相同,每个数据块可包含多个Blob对象或定长块,而大文件可分成多个数据块。分布式文件系统将这些数据块分布到存储集群中,处理数据复制、一致性、负载均衡、容错等难题,并将用户的数据操作映射为对底层数据块的操作。
二、分布式键值系统
分布式键值系统用于关系简单的半结构化数据的存储,只提供基于主键的CRUD功能。典型的系统如Amazon Dynamo、Taobao Tair。在数据结构角度上,分布式键值系统与传统的哈希表相似,特点是:分布式键值系统,能将数据分布到集群中多个存储节点。分布式键值系统是分布式表格系统的一种简化实现,一般用于缓存。
三、分布式表格系统
分布式表格系统用于关系较复杂的半结构化数据的存储。与分布式键值系统相比,功能更强大,比如单行事务、单个实体下的多行事务,典型系统如Google Bigtable、Microsoft Azure Table Storge、Amazon DynamoDB。而与分布式数据库相比,分布式表格系统主要针对单张表格的操作,不支持复杂的操作如多标关联、多表联接。分布式表格系统介于分布式键值系统与分布式数据库系统之间,是一种很好的折衷。
四、分布式数据库
分布式数据库由单机关系数据库发展而来,用于存储结构化数据。分布式数据库采用二维表格组织数据,提供SQL关系查询语言,多表关联,事务与并发控制,功能强大。典型系统如Mysql数据库分片集群,Amazon RDS、Microsoft SQL Azure.分布式数据库系统往往遇到扩展受限的问题,但并不是绝对的,如Google Spanner是一个支持多数据中心的分布式数据库,它不但具有丰富的数据库功能,还能扩展到多个数据中心。
SQL数据库是目前最为成熟的存储系统,它也面对着巨大的挑战:传统关系数据库事务及二维关系模型难以高效地扩展到多个存储节点上。为解决SQL数据库面临的可扩展、高并发、高性能问题,各种非关系数据库风起云涌,此类系统称为NoSQL系统。
参考书目:《大规模分布式存储系统》,杨传辉著。