对象存储系统比较适合用来存储文件、照片、视频之类的非结构化数据,有时候这些数据的是海量的,比如手机里的照片视频,每个用户10G空间,1000万个用户就需要 1000万 * 10G = 10万T = 100P的数据量,而这些数据又不是一来就这么海量,而是慢慢增加的,那么这种场景对存储系统的有个基本的要求就是具有高可扩展性,比如至少的能Hold住PB级的数据量,能支持通过添加设备扩展容量。
这就涉及到 对象存储系统的 高可扩展性问题。首先对象存储系统是做不到无限可扩展性的,可扩展性不仅仅是容量大的问题,还需要考虑以下多方面的因素:
1、可靠性问题
规模越大,机柜、机架、主机、磁盘等物理设备就越多,这样出故障的概率就越高,而企业级存储的可靠性要求是至少5个9,规模虽然扩大了,但是可靠性指标不达标这是不允许的。
2、小文件处理问题
对象存储系统很适合与处理存储文件、照片、视频这类非结构化数据,一个对象存储系统的Object大小可以从几个字节到几兆字节,一个PDF文件大小在 1MB~2MB,医院里X光拍的胸片每张大小大概是20MB,而一个能播放一小时的4K高清视频,大小在
27GB-45GB,对于对象存储系统来说越小的对象越难处理,元数据多、性能差,一般的解决方案是在在内存中合并组成大的块再下盘,这就增加了存储系统的复杂度。
而大的对象处理很方便,直接切片分散到不同的存储节点即可,所以有些厂商为了避免麻烦,就小文件一个存储系统,大的文件一个存储系统。对象存储系统的规模越大,文件就越多,对小文件的处理就越难。
3、性能与成本问题
对象存储系统进行扩展的时候,需要考虑的因素有:
1)存储空间如何扩?只是添加磁盘呢还是需要添加额外的CPU、内存?需要添 加额外的CPU和内存就带来新的成本引入;
2)性能如何提升? 需要添加额外的节点获得更大的吞吐量吗?添加新的节点也带来新的成本增加问题;
3)资源是否受限?一般情况下服务器的使用会有一些常用的资源限制指标,比如 1GB内存对应一个进程,而一个进程管理1TB的磁盘空间,一个64G内存的服务器,最大只能管理64TB的数据,很明显单个节点可以支持的物理容量是有限的;
4)性能和负载均衡如何考虑?对象存储系统常用的分区分配算法是DHT算法,而对于DHT算法当有新的节点加入时,会引起系统集群视图变更,产生大量的数据迁移影响主业务的性能;
5)负载均衡的影响如何考虑?节点负载不一样,有些节点负载较大,有些节点负载较小,这是不合理的,负载均衡也会引发数据迁移,影响主业务的性能。
4、冷热数据问题
分层和缓存,缓存是以Block为单位的,可以视为是一份慢速数据的快速备份,缓存有利于降低时延提升性能,适合于跑数据库和虚拟机的场景。
而分层一般是以大块的数据为单位的,比如512MB、1GB这样大小的数据,数据的迁移会引起存储系统内部的大量IO,进而影响到主业务的时延以及性能。
对象存储适合用于备份以及归档一些不活跃的或者冷的数据的场景,出于成本考虑,对象存储应该需要支持数据分层处理的行为,比如常用的热数据放在SSD盘上,次热的数据放SAS盘上,冷数据放SATA盘上,从而节约成本。
5、元数据管理问题
元数据管理着数据的大小、位置、时间、校验码等,对于一个非常大的对象存储系统,其元数据的量也是很庞大的,而且都是小文件,当需要数据检索的时候就会访问到这些元数据,
如何高效的管理元数据也是一个需要关注的问题,比如将元数据放在高性能介质上,进行读取优化,专门针对元数据设计一个小文件存储系统等。
小结
对象存储的可扩展性,不只是单单能扩展到多大的问题,还需要考虑到系统可靠性问题,小文件的处理问题,成本问题,性能问题,元数据的管理问题等。
参考文献:
【1】 https://blog.architecting.it/object-storage-capabilities-1-scalability/
接下来是:
对象存储的关键特性系列之2 - 数据保护
对象存储的关键特性系列之3 - 检索、索引与元数据
领取专属 10元无门槛券
私享最新 技术干货