TStor OneCOS 技术专栏——轻松单桶万亿
TStor OneCOS简介
TStor OneCOS海量对象存储(后面简称OneCOS),是基于腾讯云公有云存储架构打造的完全自研的分布式软件定义存储,轻松支持单桶万亿对象和EB级容量,集群容量无限伸缩,同时支持高密大盘等多种硬件机型。本期我们来聊聊单桶万亿对象数的核心能力。
背景
云计算、5G、大数据、AI等创新技术的快速发展,引发了海量非结构化数据的规模化聚集,数百PB容量或千百亿数量的海量数据存储需求变得越发普遍。
以智能汽车自动驾驶训练场景为例:一辆汽车约搭载8个摄像头,包括前向3颗、周视4颗、后视1颗,每个摄像头以30帧/秒的速度拍摄12小时,将会产生约1036万多帧的图片,如果保存近1年100辆车的数据,就是接近3800亿的数据。即使对数据进行自动化过滤处理,剩下需要精确标注的数量仍然非常惊人,这还不包括除摄像头之外其他传感器和流程的数据。
某汽车厂商最初使用公有云对象存储,存储量已经达到千亿对象数,存在单桶超过百亿文件数的桶。现在由于合规、成本等因素选择自建私有云对象存储全量替换云上对象。由于业务使用便利和配置效率,要求存储文件桶必须和云上一样的划分命名,核心要求就是单桶对象数规模和云上一致,单桶需要支持超过千亿的对象数,以满足未来数据持续增长。
主流存储厂商为了保证存储的性能、稳定性及可靠性,通常会对单集群、单个桶等规格做出限制,拥有海量数据的客户随业务增长需要拆分多个集群,大大降低了使用效率,同时也增加了管理和运维的复杂度。
OneCOS天然适应这种大规模海量数据需求,和公有云COS一致,每个存储桶中最大对象数不限。如某用户单桶超过55PB、总文件数超过5000亿:
数据和索引存储分离
首先,OneCOS通过把对象内容的存储和元数据的存储的解耦,做成两套独立的系统,并且每个系统对外的接口尽量的简单,高内聚低耦合,方便各个系统独立演进和迭代。元数据存储和对象内容存储分离的结构如下图:
OneCOS引入了全局统一的分布式元数据集群,使用一套元数据存储系统真正意义上解决了单存储桶规模的局限性。在对象存储系统中,既要存储对象的内容也要存储对象的元数据,这两个存储对系统的要求是不一样的,对象内容的存储在接口上只需要上传、下载、删除就可以了,并且对象的内容一般都比较大,在存储的时候需要做切分;而对象的元数据,一般value都比较小,并且元数据的操作在接口上除了增加、删除、查询之后,还需要支持有序的list操作,另外元数据的操作还要有一定的事务的能力,以支持用户对同一个对象的多并发的操作等。
索引存储支持多个表空间
OneCOS的元数据存储在业务上支持不同的表空间,比如说上传中的对象、已删除的对象、上传完成的对象是在不同的表空间中。OneCOS元数据的表空间类似于数据库中的表,每个表空间是相互独立的,在访问元数据的时候需要先指定表空间。
通过表空间这一层的抽象,使元数据在逻辑的组织上更加的清晰,方便对不同的表空间施加不同的存储优化和QoS访问控制等。
hash加range的数据组织形式
OneCOS对象存储对外的ListObjects接口要求对象的列表要能顺序的列出,很显然这个要求对象的列表在底层存储的时候要按照顺序来存储,OneCOS也是这样做的,但同时不同的存储桶之间并不需要按照全局的顺序来存储,因此OneCOS这边最终的存储方案是按照hash加range的方式来组织元数据的。对appid和bucket,按照hash来打散,对某个存储桶的对象列表,按照range有序的存储到某些小表中,并且当小表比较大时,支持分裂成多个小表,并在整个索引元数据集群中均衡分布。
另外考虑有的存储桶使用时间作为对象名称的使用场景,比如说存储桶中存储的是日志文件,日志文件是按照时间来命名的,这样元数据按照range有序来存储对象列表的时候会发现新对象的上传总是在range最后的一个小区间中,对应到元数据存储的某单个小表上,这样这个小区间对应的小表就会成为整个存储桶的瓶颈,虽然存储桶很大,但是上传的key在range中比较集中,会导致元数据单小表的能力成为整个bucket的瓶颈。为了应对这种场景,OneCOS在分hash和range的时候,也支持在对象名上做hash,这样可以把热点的对象在小表上打散,提升存储桶整体的性能。为了应对对象列表hash打散对list操作的性能影响,OneCOS逻辑层针对list的操作做了多路并发的缓存和加速。
cas事务支持的能力
在大规模对象的处理上不可避免的会遇到冲突的问题,比如说多个并发同时在上传、删除、下载同一个对象,OneCOS通过分表空间以及单key的cas能力来保证冲突处理过程中的正确性。
对象索引表空间的key是对象的名称,value指向数据索引;数据索引表空间的key是数据的unique key,value指向这个数据在底层存储上的相关的信息。租户的每次上传操作都对应唯一的一个数据索引,上传完成之后,再通过cas的操作更新对象索引表空间中这个对象的指向。通过这种方式来解决多路并发对同一个对象操作冲突的处理。
综上,OneCOS单桶支持万亿对象的能力,具有绝对领先的私有云和混合云数据存储优势,和公有云规格无缝衔接,可以轻松帮助数据中心快速实现真正的海量云存储,确保满足未来数据需求。