本质上来说,大数据是指大规模的数据集合,而要实现对这些数据集合的处理,需要经历从数据引入到数据存储,再到数据计算的一个过程。而在大数据的不断发展趋势下,各个环节的技术框架也在不断发展。今天的大数据开发分享,我们来讲讲分布式存储系统的发展历程。
分布式存储系统,按照细分,可以大致分为结构化存储、非结构化存储、半结构化存储、In-memory存储四种类型。
结构化存储
结构化存储(Structured Storage Systems)的历史非常久远,典型的场景就是事务处理系统或者关系型数据库(RDBMS)。
传统的结构化存储都是从单机做起的,比如大家耳熟能详的MySQL。有句话说:MySQL的成长史就是互联网的成长史。这一点也不为过。除了MySQL之外,PostgreSQL也是近几年来势头非常强劲的一个RDBMS。传统的结构化存储系统强调的是:
(1)结构化的数据(例如关系表);
(2)强一致性(例如,银行系统、电商系统等场景);
(3)随机访问(索引、增删查改、SQL语言)。
然而,正是由于这些性质和限制,结构化存储系统的可扩展性通常都不是很好,这在一定程度上限制了结构化存储在大数据环境下的表现。
非结构化存储
非结构化存储(No-structed Storage Systems),和结构化存储不同的是,非结构化存储强调的是高可扩展性,典型的系统就是分布式文件系统。分布式文件系统也是一个古老的研究话题,比如70年代的Xerox Alto、80年代的NFS、AFS、90年代xFS等等。
然而,这些早期的分布式文件系统只是起到了网络磁盘的作用,其最大的问题就是不支持容错(Fault Tolerance)和错误恢复(Fault Recovery)。而Google在2003年SOSP上推出的GFS(Google File System)则是做出了里程碑的一步,其开源实现对应为HDFS。GFS的主要思想包括:
(1)用Master来管理Metadata。
(2)文件使用64MB的Chunks来存储,并且在不同的Server上保存多个副本
(3)自动容错,自动错误恢复。
Google设计GFS最初的目的是为了存储海量的日志文件以及网页等文本信息,并且对其进行批量处理(例如配合MapReduce为文档建立倒排索引,计算网页PageRank等)。
和结构化存储系统相比,虽然分布式文件系统的可扩展性、吞吐率都非常好,但是几乎无法支持随机访问(Random Access)操作,通常只能进行文件进行追加(Append)操作。而这样的限制使得非结构化存储系统很难面对那些低延时,实时性较强的应用。
半结构化存储
半结构化存储(Semi-structure Storage Systems)的提出,就是为了解决非结构化存储系统随机访问性能差的问题。我们通常会听到一些流行的名词,比如NoSQL、Key-Value Store,甚至包括对象存储,例如Protobuf、Thrift等等。
这些都属于半结构化存储研究的领域,其中以NoSQL近几年的发展势头尤为强劲。NoSQL系统既有分布式文件系统所具有的可扩展性,又有结构化存储系统的随机访问能力(例如随机Update、Read操作),系统在设计时通常选择简单键值(K-V)进行存储,抛弃了传统RDBMS里复杂SQL查询以及ACID事务。这样做可以换取系统最大限度的可扩展性和灵活性。
在NoSQL里比较有名系统包括:Google的Bigtable、Amazon的Dynamo,以及开源界大名鼎鼎的HBase、Cassandra等。通常这些NoSQL系统底层都是基于比较成熟的存储引擎,比如Bigtable就是基于LevelDB,底层数据结构采用LSM-Tree,除了LSM-Tree之外B-Tree(B+Tree)也是很成熟的存储引擎数据结构。
In-memory存储
In-memory存储,顾名思义就是将数据存储在内存中,从而获得读写的高性能。比较有名的系统包括Memcahed,以及Redis。
这些基于K-V键值系统的主要目的是为基于磁盘的存储系统做Cache。还有一些偏向于内存计算的系统,比如可以追溯到普林斯顿Kai Lee教授早期的研究工作Distributed Shared Memory(DSM),斯坦福的RamCloud,以及最近比较火的基于Lineage技术的Tachyon(Alluxio)项目(Spark生态系统子项目)等等。
关于大数据开发,分布式存储系统的发展历程,以上就为大家做了简单的介绍了。分布式存储,目前是大数据存储的普遍选择,面对极大规模的数据存储任务,也能提供稳定及高性能的服务。
网友评论