本文主要介绍基于开源技术的云存储系统关键技术,系统基于对象存储技术,采用一致性哈希算法、最
在将数据存储到物理设备上时,前端数据库首先需要对数据进行持久化操作。在过去几年,关系型数据库一直是数据持久化的唯一选择,数据工作者考虑的也只是在这些传统数据库中做筛选,比如SQL Server、Oracle 或者是MySQL。甚至是做一些默认的选择,比如使用.NET 的一般会选择SQL Server;使用Java 的可能会偏向Oracle,Ruby 是MySQL,Python 则是PostgreSQL 或MySQL 等等。原因很简单:过去很长一段时间内,关系数据库的健壮性已经在多数应用程序中得到证实。我们可以使用这些传统数据库良好的控制并发操作、事务等等。
然而,随着信息系统的复杂以及用户数量的剧增,人们每天在各种社交网站上上传海量的视频、照片、音乐,每天发送数千亿封电子邮件,数据规模日益扩大。据IDC 统计,到2020 年全球数据将增加到35 ZB,其中80%是非结构化数据。随着数据规模的不断扩大与数据结构的日益复杂,传统关系型数据库技术在某些方面的性能表现出弱势: 1) 存储结构与数据库结构不匹配现象 我们使用Python、Ruby、Java、.Net 等语言编写应用程序,这些语言有一个共同的特性——面向对象。但是我们使用MySQL、PostgreSQL、Oracle 以及SQL Server,这些数据库同样有一个共同的特性——关系型数据库。存储结构是面向对象的,但是数据库却是关系的,所以这种不匹配现象导致,在每次存储或者查询数据时,我们都需要做转换。类似Hibernate、Entity Framework 这样的ORM 框架可以简化这个过程,但是在对查询有高性能需求时,这些ORM 框架就捉襟见肘了。
2) 应用程序规模的变大 网络应用程序的规模日渐变大, 我们需要储存更多的数据、服务更多的用户、需要更多的计算能力。
为了应对这种情形,我们需要不停的扩展。扩展分为两类:一种是纵向扩展,即购买更好的机器,更多的磁盘、更多的内存等等;另一种是横向扩展,即购买更多的机器组成集群。在巨大的规模下,纵向扩展发挥的作用并不是很大。首先单机器性能提升需要巨额的开销并且有着性能的上限,在Google 和Facebook 这种规模下,永远不可能使用一台机器支撑所有的负载,必须搭建机器集群。而关系数据库集群往往使用共享存储,这并不是我们想要的类型。鉴于这种情况,我们需要新的数据库技术。于是就有了以Google、Facebook、Amazon 这些试图处理更多传输所引领的NoSQL 纪元。而对象存储技术便是NoSQL 纪元的产物。
2006 年Amazon 发布AWS,简单存储服务(Simple Storage Service,简称S3) [1]及其使用的REST、SOAP 访问接口已成为对象存储的事实标准,Amazon S3 还成功为对象存储注入云服务的基因,使其成为一个基于对象存储的云存储[2]系统。
亚马逊,作为全球最大的云提供商,也是对象存储的开创者,为各种规模的企业和政府提供公有云和私有云服务。这样成熟的品牌所使用的对象存储全部为S3。据统计,如图1 所示,2013 年,AWS的市场占有率超过60%,其38 亿美金的收入中,包含了包括服务器、存储、软件、负载均衡等产品。
S3 的增长最为疯狂。如图2 所示,从2010 年第四季度开始,客户存储的“对象”数目呈指数增长,到