UCloud优刻得对象存储US3元数据改造(上)
一、前言
对象存储是一种无层次结构的数据存储方法,通常在云中使用。与其他数据存储方法不同,基于对象的存储不使用目录树。离散的数据单元(对象)存在于存储池中的同一级别。每个对象都有一个唯一的标识名称,客户端使用其来检索它。此外,每个对象都可能具有与其一起检索的元数据。
2006年, 美国Amazon公司发布AWS S3(Simple Storage Service)服务,正式将对象存储作为一项云存储服务,引入云计算领域。 UCloud优刻得则在发展过程中,也自研了对象存储服务US3, 以满足国内外客户的存储需求。
二、US3元数据服务的挑战
目前US3元数据服务支持了EB级存储规模,存储了超过千亿级别的文件索引。需要面临每日数十亿次索引访问, 文件上传请求,以及数亿次文件删除请求带来的索引更新压力, 同时客户大量的对象列表请求,也带来了极大的索引范围扫描挑战。
在之前的元数据服务架构中,UCloud优刻得采用了业内流行的MongoDB作为底层数据存储,同时辅以外部服务做数据路由、监控统计,很好地满足了客户数据存储需求。同时部署简单,设计上也有一定的可扩展性。但随着客户数量以及存储数据量的爆炸增长,此架构也遇到了一定的问题。
三、此前的US3元数据服务架构
US3元数据主要存储在MongoDB集群内,MongoDB集群则是链式结构,一个MongoDB集群由于写入量太大扛不住了,就在后面增加一个MongoDB集群,查询的时候接入集群将请求下发至DB-Gateway,DB-Gateway先将json数据转译成bson,然后根据Bucket对应的DB(可能有多个),从新MongoDB至老MongoDB依次查询数据。删除的时候则需要将发送请求发送至所有bucket涉及的MongoDB集群。
一定会有小伙伴问为什么不直接扩mongo分片?因为线上数据量大、服务压力大、客户需求高直接扩分片会有数据迁移,从而导致延迟,对线上服务的影响较大。
同时随着MongoDB存储的数据量越来越大, MongoDB的性能开始显得不足。而原先直接在MongoDB进行列表扫描的方式会极大地影响其读写性能,为了缓解MongoDB的压力,我们将列表服务分离出来,在外部同步MongoDB的数据,再对外提供服务。
列表服务对多个MongoDB进行同步,每加一个MongoDB集群就要加一个列表服务节点,查询的时候也是根据bucket对应的DB,同时发送至多个列表服务,然后再在接入层聚合。
由此我们总结了在元数据服务场景中,通常存在的一些痛点:
1、业务痛点:性能差
•链式架构,老MongoDB的写能力用不上,读会有放大。
•删除需要删除多个MongoDB数据,可能存在数据不一致,孤儿文档问题。
•列表服务同步数据有延迟,客户无法实时检索上传的文件。大量删除导致列表服务同步延迟飙升。
2、运维痛点:可扩展性差
•一个MongoDB顶不住就加一个MongoDB切,导致扩展同步繁琐、手动切换出错概率大。
3、运营痛点:成本高
•由于性能不够,需要更多的机器堆读写性能。列表服务由于分离出来,也需要额外的机器,导致元数据索引服务成本高昂。
四、新的US3元数据服务架构
我们简化了US3整个体系架构,主要将其分为了高兼容性的DB-Gateway服务、高可用的计算存储分离的分布式KV数据库-UKV以及高度定制化的RocksDB-URocksDB三部分,将元数据存储于UCloud优刻得自研的计算存储分离的UKV中,因此获得了更强大的容灾能力,更快的热点节点分裂、性能拓展能力,还有底层存储EC支持,异构存储等降低成本的潜力。
新架构带来了几个方面的提升:
•性能提升
元数据删除延迟降低、读放大降低。
•列表服务无延迟
解决了客户经常因为列表服务延迟而不能实时看到上传的数据的问题。(也不再有延迟告警问题)
•成本降低
元数据服务成本降低80%。
•运维更简单
计算节点容灾无数据迁移,无需提心吊胆。热点自动分裂,不再需要手动加节点扩容。
有几个关键产品(或环节)在这次优化中起到重要作用:
五、新架构的几个核心改变
1.DB-Gateway
DB-Gateway是一个无状态进程,它兼容老的元数据服务,同时具有底层UKV协议转换功能,Sharding路由功能,并且聚合了原先的列表服务功能,因此能够移除列表服务需要的机器。
DB-Gateway通过ConfigServer集群更新UKV的Sharding路由表,来将不同的请求打到不同的UKV节点上去。
2.UKV
UKV是UCloud优刻得自研的计算存储分离的分布式KV存储系统。其存储底座为分布式统一存储Manul,Manul是具备自动数据平衡、异构介质存储、EC存储等功能的高性能、高可用、分布式存储服务。
UKV提供了集群管理服务,快速备份等常规功能,还针对US3元数据服务设计了数据结构,使其在UCloud优刻得日常的业务场景下提供更优秀的性能。
UKV使用UCloud优刻得自研的、由开源RocksDB定制化的URocksDB作为计算节点,同时依托Manul,实现了主从热备,热点节点快速分裂等特色功能。
由于篇幅有限,对于UKV的架构设计以及特色功能不在此展开,敬请期待下一次的分享。