当前位置: 首页 > 科技观察

360自主研发的分布式海量小文件存储系统的设计与实现

时间:2023-03-13 21:27:56 科技观察

近年来,公司业务发展迅速,大量的业务场景产生了大量的图片、文档等非结构化数据、音频、视频等,特别是随着移动互联网、人工智能、物联网技术的成熟和应用市场的全面爆发,大量的智能硬件设备将产生更大规模的非结构化多媒体数据。如何存储如此大量的小文件,问题应运而生。传统存储厂商销售的存储服务价格昂贵,公有云厂商缺乏针对特定业务场景的定制化。因此,我们决定开发自己的小文件存储服务。NebulasFs简介关注过小文件存储技术的同学可能看过Facebook发表的关于海量小图片存储系统Haystack的论文(FindinganeedleinHaystack:Facebook'sphotostorage)。Haystack将多个小文件合并为一个大文件,通过减少文件的数量,解决了普通文件系统在存储大量小文件时的问题:对一个文件多次获取元数据信息,以及“长尾”效应文件访问使得难以缓存大量文件元数据等待。基于在Haystack论文中得到的参考和借鉴,我们开发了自己的分布式小文件存储系统——NebulasFs。是一个分布式、高可用、高可靠、持久化的小文件存储系统,可存储百亿级小文件。架构设计分为分布式角色,可以分为两大角色:Master和Datanode。其中Master负责集群元数据存储、集群管理、任务调度等,其数据一致性目前由外部一致性工具(ETCD等)实现。Master就是一主多备。Datanode是面向用户的,主要负责数据的存储和用户请求的路由分发。Datanode节点包括存储Volume文件和Proxy模块。如下图所示:用户的请求可以请求任意一个Datanode节点,该节点的Proxy模块会将用户的请求代理到正确的数据存储节点,返回给用户结构体。对于多副本的写请求,Proxy模块会按照副本一致的顺序并行写入,直到全部成功后返回。对于读取请求,仅读取第一个副本。NebulasFs功能是为了更好的提高存储容量、一致性、可用性等,满足海量小文件存储需求。与Haystack论文相比,我们在接口服务和分布式架构上做了更多的优化,主要体现在以下几个方面:1.为用户提供的服务接口简单、轻量级、通用。NebulasFs为用户提供HttpRestful接口,协议更简单,使用更方便。用户可以通过简单的PUT、GET等操作来上传和下载文件。用户无需使用定制客户端,更加轻量。2、用户请求全代理和自动路由我们知道Datanode有数据存储的功能,但是对于大量的Datanode,用户想要知道存储在哪些数据上,需要从Master那里获取数据路由元素其中Datanode只有数据是已知的,增加了用户请求的复杂度。我们在Datanode中添加了请求代理和路由模块,自动将用户的请求代理路由到正确的Datanode,实现用户一次请求即可获取数据。3.多租户,提供租户资源隔离机制,避免相互影响集群提供的服务可能被多个用户使用。为了避免相互影响,NebulasFs抽象出了资源池的概念。不同的资源池物理分布在不同的硬件上,资源池在机器维度上不重叠,可以有效隔离资源。不同的用户可以分布在不同的资源池中,也可以共享资源池,这需要管理员提前规划。资源池的类型多种多样,其范围可能跨机房,也可能跨机柜,也可能在机柜内。根据不同的物理硬件性能和数据副本存储冗余需求,也需要提前规划不同类型的数据存储需求。4、可定制的数据多副本存储方案,不丢失数据,多故障域组合为了提供可用性,保证写入的数据不丢失,文件数据一般以大于1的副本数存储,这样在发生硬件故障时不可恢复的保证数据可用性以及用于稍后自动填充的副本数。不同级别的数据和不同级别的故障类型决定了采用不同级别的存储方案。NebulasFs预定义了五个级别的故障域,分别是:数据中心、机架列、机架、机器、磁盘。当需要高可用性的数据存储时,跨数据中心容灾副本用于在整个数据中心不可用时使用另一个数据中心的数据。要求不高的数据在实施容灾复制策略时可以跨柜存储,即使边缘交换机出现故障也可以使用。NebulasF故障域与资源隔离池的关系如下:S代表服务器,R-1和R-2是属于数据中心DC-1的两个机柜,R-3和R42是属于数据中心DC的两个机柜-2柜。Pool-1是跨机柜容错域的资源隔离池,Pool-2是跨数据中心容错域的资源池,Pool-3是跨服务器容错域的资源池。Nebulas的故障域逻辑和物理概念对应如下:上半部分是逻辑概念,下半部分是物理概念。用户和请求涉及逻辑概念,而管理和运维涉及物理概念。一个用户可以对应一个或多个Collections,一个Collection对应多个Volume,每个Volume是一个文件存储在一个DataNode上(几个副本有几个文件)。通常一个DataNode对应服务器上的一块硬盘。一台服务器上有多个DataNode。服务器(Server)的上层是机柜(Rack)、一排机柜(Row)和数据中心(DataCenter)。5、自动扩容和再平衡扩容分为存储容量不足扩容和请求流量过载扩容。由于容量不足,扩容后不需要rebalancing,大请求流量扩容后才需要做数据rebalancing。Rebalancing是根据容灾副本数量等策略进行的。按照策略添加的Datanode会自动注册到Master上,Master会按照预定的规则进行协调和再平衡。两种扩容情况如下:6.自动复制修复和完成一定规模的集群故障可能会变得更加频繁。在我们的系统中,故障很大程度上意味着数据副本的丢失,手工完成数据副本的工作量比较大。大,所以自动完成副本就成了比较重要的功能。副本的自动完成取决于Master发现副本丢失并协调完成。在完成过程中,数据副本将变为只读。流程如下图:整个自动完成的复制完成如下图:由于硬盘故障,数据节点2和3上的Volume3和6的副本丢失,自动完成自动补齐将这两个副本复制到数据节点4和5,并加入集群。总结到目前为止,NebulasFs已经在内部使用了将近一年。此外,NebulasFs还作为另一种对象存储(AWSS3协议)的后端存储,用于存储大文件。随着业务的不断接入,NebulasFs将不断完善,为业务增长提供更好的保障。【本文为栏目组织360科技、微信公众号《360科技(id:qihoo_tech)》原创文章】点此阅读作者更多好文