MinIO分片大小对文件上传性能的影响
2023-01-30黄丝米唐海涛徐利霞柳丽香
黄丝米,唐海涛,徐利霞,柳丽香
(1.中国电建集团华东勘测设计研究院有限公司,浙江 杭州 311122;2.浙江华东工程数字技术有限公司)
0 引言
随着软件系统存储能力的提升及当前对于海量文件存储的需求增加,给用户提供安全、高效、可靠、低成本的数据存储能力显得格外重要[1-2]。当前主流的海量存储服务一般是基于对象的存储服务[3],其中MinIO 以云原生、灵活部署、无元数据库、精细化修复、支持S3 Select等特性被广泛的运用[4]。为了保障云端存储服务的文件上传速度和效率,当前主要采用文件分片技术在服务器端对分片文件进行合并[5-6],MinIO原生就是支持文件分片。文中利用MinIO支持文件分片的特性,采用不同分片大小对文件上传在响应时间、并发数目和持续时间上进行性能实验,找到当前集群部署环境下适合的分片大小。
1 MinIO简介
MinIO 是一个基于Apache License v2.0 开源协议的对象存储服务,它兼容亚马逊S3 云存储服务接口。MinIO 对象存储系统是为 海量数据存储、人工智能、大数据分析而设计,它适合存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,存储对象支持的大小可以从最小的几KB 到最大5TB[7]。MinIO 主要采用Golang 语言实现,客户端与存储服务器之间采用http/https 通信协议,是一个非常轻量的服务,可以很简单的和其他应用结合,类似NodeJS、Redis或者MySQL[4]。
MinIO 本身是支持分片上传文件的,可以通过设置其配置项修改分片文件的大小。其原理就是将大文件分割成合适大小的小文件,也就是分片,将小片传递到后台之后,保存在项目,等待所有的小片上传完之后再对小片依次写入一个新的文件,即合并文件,最终完成整个文件的上传操作。
2 性能模型
MinIO 可以通过底层设置对存储对象做分片处理,可以将大文件分片上传到服务端,再由服务端进行合并。但是设置分片大小的不同会对整个文件上传的性能产生不同的影响。如何选择合适的分片大小,是本篇文章的重点。
在MinIO 文件服务集群部署条件下,找到适合当前环境下10M 文件分片、60M 文件分片和100M 文件分片的并发用户数指标(选取60M 文件分片是在已有环境下进行初步验证,发现60M 文件的分片上传性能略好于50M分片)。通过对文件上传请求并发量的逐步增加,找到合适的并发用户数目,并根据此基准,在5分钟的疲劳强度并发下,找到合适的长稳并发用户数。
将底层集成了MinIO的文件服务使用集群的方式部署起来。集群部署是指多台服务器共同部署[8-9],包括文件服务主节点服务器一台和文件服务从节点服务器三台,使用一个主节点三个从节点的模式,同时数据库也采用了主从的模式,部署条件如表1 所示。该模式是MinIO 服务最常用的架构,通过共享一个accesskey和secretkey,在多台服务器上搭建服务,且数据分散在多块磁盘上,提供了较为强大的数据冗余机制。
表1 文件服务部署环境
本次实验使用Jmeter 作为性能测试工具,其部署环境为windows 环境,服务器处理器为Intel Core i7-7700K CPU 4.2GHZ,内存大小为64GB,Jmeter 版本为5.1.1。实验环境的网络带宽基本可以保证在千兆每秒的理想情况。
3 分片大小对上传的影响
3.1 并发用户数
并发用户数是指同一时刻与服务器交互的在线用户数量。实验选取了三种不同的分片大小,分别为10M、60M、100M。不同的分片大小对上传请求返回结果的响应时间要求不同,本次实验针对这三种不同的分片在单次并发下选取了不同的响应时间作为参考量。在10M 分片文件上传的单次并发下,应满足平均响应时间和95%请求的最大响应时间在10s 以内;60M 分片文件上传的单次并发下,应满足平均响应时间和95%请求的最大响应时间在60s以内;100M 分片文件上传的单次并发下,应满足平均响应时间和95%请求的最大响应时间在100s 以内;且在测试过程中这三种场景上传请求的异常率需要小于0.05%。
图1 为10M、60M、100M 不同分片下随着并发数目逐步增大时,平均响应时间和95%响应时间的折线对比图,其中横坐标为并发数(次),纵坐标为响应时间(秒)。在测试过程中,所有请求均没有异常返回。随着并发量的增大,整个请求的响应时间也随之增大,满足响应时间指标条件10M 分片的并发数为140,60M 分片的并发数为90,100M 分片的并发数为90。由此可见,在为了满足高并发下选择10M 的分片大小会更加合适。
3.2 疲劳强度实验
疲劳强度实验需要保证系统稳定运行情况下,通过长时间对目标测试系统高压力下的请求访问来获取该场景下系统支持的最大并发用户数。该实验主要是为了测试系统的长期稳定运行能力。在系统运行过程中,对系统施压,观察系统的各种性能指标,来找到合适的并发用户数目。
本次实验同样选取了10M、60M 和100M 的分片作为测试模型来进行测试实验。测试不同大小的分片文件在长稳状态下持续上传,满足平均响应时间和95%请求的最大响应时间对应时间以内,且测试过程中请求的异常率需要小于0.05%,根据结果最终得出不同分片大小满足长稳性能的并发数量。
根据图1 的测试结果,首先选取140 的并发进行10M 分片文件疲劳强度测试,根据响应时间结果逐渐改变并发数目,得到最终满足条件的长稳并发用户数。表2 为分片10M 文件上传请求负载强度结果,能够满足响应时间小于10s 的并发量为90,此时95%请求的响应时间为9.545s;在并发量为140 时,95%响应时间可以维持在15s 以内。随着并发量的改变系统在5min 下的整体处理请求数目基本没有太大的波动。观察压测机带宽的发送的实时指标,在测试过程中,带宽接近1Gbps/s,已基本满足千兆带宽环境。
图1 不同分片大小在并发用户数下响应时间对比
表2 分片10M文件上传请求负载强度表
根据图1 的测试结果,选取90 的并发进行60M 分片文件疲劳强度测试,根据响应时间结果逐渐改变并发数目,得到最终满足条件的长稳并发用户数。表3为分片60M 文件上传请求负载强度结果,能满足响应时间小于60s的并发量为60;在并发量为90时,95%响应时间可以维持在90s 以内。有一点值得注意,随着并发量的改变,文件服务系统在5min下的整体处理请求数目基本没有太大的波动。在测试过程中,带宽在900MB/s左右波动,可以近似满足千兆带宽环境。
表3 分片60M文件上传请求负载强度表
根据图1 的测试结果,选取90 的并发进行100M分片文件疲劳强度测试,根据响应时间结果逐渐改变并发数目,得到最终满足条件的长稳并发用户数。表4为分片100M 文件上传请求负载强度结果,能满足响应时间小于100s 的并发量为60;在并发量为90 时,95%响应时间可以维持在150s 以内。和60M 分片文件上传请求一样,随着并发量的改变,文件服务系统在5min下的整体处理请求数目基本没有太大的波动。在测试过程中,带宽在900MB/s左右波动,可以近似满足千兆带宽环境。
表4 分片100M文件上传请求负载强度表
根据实验结果,可以得出:在分片大小为10M 时,在5 分钟高压力请求访问下支持的并发量为90;在分片大小为60M 时,此时支持的并发量为60;在分片大小为100M 时,此时支持的并发量为60。由此可见,在为了满足系统持续长时间高并发的情况,选择10M 的分片大小会更加合适。
4 结束语
文中重点介绍了文件上传的三种分片大小在MinIO 文件服务集群部署条件下的性能测试模型,并通过实验得出三种分片大小满足特定条件下所支持的并发用户数目和疲劳强度下的并发用户数。基于以上论述和结论可以得出,为了满足单次高并发和持续高并发的情况,上传大文件时选择10M 的分片大小会更加合适。该结论对于文件上传效率以及性能的提升有很大帮助,对于文件分片的应用也提供了一些经验,可为后续文件服务的选型提供相应的帮助。