黃絲米,唐海濤,徐利霞,柳麗香
(1.中國電建集團(tuán)華東勘測設(shè)計(jì)研究院有限公司,浙江 杭州 311122;2.浙江華東工程數(shù)字技術(shù)有限公司)
隨著軟件系統(tǒng)存儲能力的提升及當(dāng)前對于海量文件存儲的需求增加,給用戶提供安全、高效、可靠、低成本的數(shù)據(jù)存儲能力顯得格外重要[1-2]。當(dāng)前主流的海量存儲服務(wù)一般是基于對象的存儲服務(wù)[3],其中MinIO 以云原生、靈活部署、無元數(shù)據(jù)庫、精細(xì)化修復(fù)、支持S3 Select等特性被廣泛的運(yùn)用[4]。為了保障云端存儲服務(wù)的文件上傳速度和效率,當(dāng)前主要采用文件分片技術(shù)在服務(wù)器端對分片文件進(jìn)行合并[5-6],MinIO原生就是支持文件分片。文中利用MinIO支持文件分片的特性,采用不同分片大小對文件上傳在響應(yīng)時(shí)間、并發(fā)數(shù)目和持續(xù)時(shí)間上進(jìn)行性能實(shí)驗(yàn),找到當(dāng)前集群部署環(huán)境下適合的分片大小。
MinIO 是一個(gè)基于Apache License v2.0 開源協(xié)議的對象存儲服務(wù),它兼容亞馬遜S3 云存儲服務(wù)接口。MinIO 對象存儲系統(tǒng)是為 海量數(shù)據(jù)存儲、人工智能、大數(shù)據(jù)分析而設(shè)計(jì),它適合存儲大容量非結(jié)構(gòu)化的數(shù)據(jù),例如圖片、視頻、日志文件、備份數(shù)據(jù)和容器/虛擬機(jī)鏡像等,存儲對象支持的大小可以從最小的幾KB 到最大5TB[7]。MinIO 主要采用Golang 語言實(shí)現(xiàn),客戶端與存儲服務(wù)器之間采用http/https 通信協(xié)議,是一個(gè)非常輕量的服務(wù),可以很簡單的和其他應(yīng)用結(jié)合,類似NodeJS、Redis或者M(jìn)ySQL[4]。
MinIO 本身是支持分片上傳文件的,可以通過設(shè)置其配置項(xiàng)修改分片文件的大小。其原理就是將大文件分割成合適大小的小文件,也就是分片,將小片傳遞到后臺之后,保存在項(xiàng)目,等待所有的小片上傳完之后再對小片依次寫入一個(gè)新的文件,即合并文件,最終完成整個(gè)文件的上傳操作。
MinIO 可以通過底層設(shè)置對存儲對象做分片處理,可以將大文件分片上傳到服務(wù)端,再由服務(wù)端進(jìn)行合并。但是設(shè)置分片大小的不同會對整個(gè)文件上傳的性能產(chǎn)生不同的影響。如何選擇合適的分片大小,是本篇文章的重點(diǎn)。
在MinIO 文件服務(wù)集群部署條件下,找到適合當(dāng)前環(huán)境下10M 文件分片、60M 文件分片和100M 文件分片的并發(fā)用戶數(shù)指標(biāo)(選取60M 文件分片是在已有環(huán)境下進(jìn)行初步驗(yàn)證,發(fā)現(xiàn)60M 文件的分片上傳性能略好于50M分片)。通過對文件上傳請求并發(fā)量的逐步增加,找到合適的并發(fā)用戶數(shù)目,并根據(jù)此基準(zhǔn),在5分鐘的疲勞強(qiáng)度并發(fā)下,找到合適的長穩(wěn)并發(fā)用戶數(shù)。
將底層集成了MinIO的文件服務(wù)使用集群的方式部署起來。集群部署是指多臺服務(wù)器共同部署[8-9],包括文件服務(wù)主節(jié)點(diǎn)服務(wù)器一臺和文件服務(wù)從節(jié)點(diǎn)服務(wù)器三臺,使用一個(gè)主節(jié)點(diǎn)三個(gè)從節(jié)點(diǎn)的模式,同時(shí)數(shù)據(jù)庫也采用了主從的模式,部署條件如表1 所示。該模式是MinIO 服務(wù)最常用的架構(gòu),通過共享一個(gè)accesskey和secretkey,在多臺服務(wù)器上搭建服務(wù),且數(shù)據(jù)分散在多塊磁盤上,提供了較為強(qiáng)大的數(shù)據(jù)冗余機(jī)制。
表1 文件服務(wù)部署環(huán)境
本次實(shí)驗(yàn)使用Jmeter 作為性能測試工具,其部署環(huán)境為windows 環(huán)境,服務(wù)器處理器為Intel Core i7-7700K CPU 4.2GHZ,內(nèi)存大小為64GB,Jmeter 版本為5.1.1。實(shí)驗(yàn)環(huán)境的網(wǎng)絡(luò)帶寬基本可以保證在千兆每秒的理想情況。
并發(fā)用戶數(shù)是指同一時(shí)刻與服務(wù)器交互的在線用戶數(shù)量。實(shí)驗(yàn)選取了三種不同的分片大小,分別為10M、60M、100M。不同的分片大小對上傳請求返回結(jié)果的響應(yīng)時(shí)間要求不同,本次實(shí)驗(yàn)針對這三種不同的分片在單次并發(fā)下選取了不同的響應(yīng)時(shí)間作為參考量。在10M 分片文件上傳的單次并發(fā)下,應(yīng)滿足平均響應(yīng)時(shí)間和95%請求的最大響應(yīng)時(shí)間在10s 以內(nèi);60M 分片文件上傳的單次并發(fā)下,應(yīng)滿足平均響應(yīng)時(shí)間和95%請求的最大響應(yīng)時(shí)間在60s以內(nèi);100M 分片文件上傳的單次并發(fā)下,應(yīng)滿足平均響應(yīng)時(shí)間和95%請求的最大響應(yīng)時(shí)間在100s 以內(nèi);且在測試過程中這三種場景上傳請求的異常率需要小于0.05%。
圖1 為10M、60M、100M 不同分片下隨著并發(fā)數(shù)目逐步增大時(shí),平均響應(yīng)時(shí)間和95%響應(yīng)時(shí)間的折線對比圖,其中橫坐標(biāo)為并發(fā)數(shù)(次),縱坐標(biāo)為響應(yīng)時(shí)間(秒)。在測試過程中,所有請求均沒有異常返回。隨著并發(fā)量的增大,整個(gè)請求的響應(yīng)時(shí)間也隨之增大,滿足響應(yīng)時(shí)間指標(biāo)條件10M 分片的并發(fā)數(shù)為140,60M 分片的并發(fā)數(shù)為90,100M 分片的并發(fā)數(shù)為90。由此可見,在為了滿足高并發(fā)下選擇10M 的分片大小會更加合適。
疲勞強(qiáng)度實(shí)驗(yàn)需要保證系統(tǒng)穩(wěn)定運(yùn)行情況下,通過長時(shí)間對目標(biāo)測試系統(tǒng)高壓力下的請求訪問來獲取該場景下系統(tǒng)支持的最大并發(fā)用戶數(shù)。該實(shí)驗(yàn)主要是為了測試系統(tǒng)的長期穩(wěn)定運(yùn)行能力。在系統(tǒng)運(yùn)行過程中,對系統(tǒng)施壓,觀察系統(tǒng)的各種性能指標(biāo),來找到合適的并發(fā)用戶數(shù)目。
本次實(shí)驗(yàn)同樣選取了10M、60M 和100M 的分片作為測試模型來進(jìn)行測試實(shí)驗(yàn)。測試不同大小的分片文件在長穩(wěn)狀態(tài)下持續(xù)上傳,滿足平均響應(yīng)時(shí)間和95%請求的最大響應(yīng)時(shí)間對應(yīng)時(shí)間以內(nèi),且測試過程中請求的異常率需要小于0.05%,根據(jù)結(jié)果最終得出不同分片大小滿足長穩(wěn)性能的并發(fā)數(shù)量。
根據(jù)圖1 的測試結(jié)果,首先選取140 的并發(fā)進(jìn)行10M 分片文件疲勞強(qiáng)度測試,根據(jù)響應(yīng)時(shí)間結(jié)果逐漸改變并發(fā)數(shù)目,得到最終滿足條件的長穩(wěn)并發(fā)用戶數(shù)。表2 為分片10M 文件上傳請求負(fù)載強(qiáng)度結(jié)果,能夠滿足響應(yīng)時(shí)間小于10s 的并發(fā)量為90,此時(shí)95%請求的響應(yīng)時(shí)間為9.545s;在并發(fā)量為140 時(shí),95%響應(yīng)時(shí)間可以維持在15s 以內(nèi)。隨著并發(fā)量的改變系統(tǒng)在5min 下的整體處理請求數(shù)目基本沒有太大的波動。觀察壓測機(jī)帶寬的發(fā)送的實(shí)時(shí)指標(biāo),在測試過程中,帶寬接近1Gbps/s,已基本滿足千兆帶寬環(huán)境。
圖1 不同分片大小在并發(fā)用戶數(shù)下響應(yīng)時(shí)間對比
表2 分片10M文件上傳請求負(fù)載強(qiáng)度表
根據(jù)圖1 的測試結(jié)果,選取90 的并發(fā)進(jìn)行60M 分片文件疲勞強(qiáng)度測試,根據(jù)響應(yīng)時(shí)間結(jié)果逐漸改變并發(fā)數(shù)目,得到最終滿足條件的長穩(wěn)并發(fā)用戶數(shù)。表3為分片60M 文件上傳請求負(fù)載強(qiáng)度結(jié)果,能滿足響應(yīng)時(shí)間小于60s的并發(fā)量為60;在并發(fā)量為90時(shí),95%響應(yīng)時(shí)間可以維持在90s 以內(nèi)。有一點(diǎn)值得注意,隨著并發(fā)量的改變,文件服務(wù)系統(tǒng)在5min下的整體處理請求數(shù)目基本沒有太大的波動。在測試過程中,帶寬在900MB/s左右波動,可以近似滿足千兆帶寬環(huán)境。
表3 分片60M文件上傳請求負(fù)載強(qiáng)度表
根據(jù)圖1 的測試結(jié)果,選取90 的并發(fā)進(jìn)行100M分片文件疲勞強(qiáng)度測試,根據(jù)響應(yīng)時(shí)間結(jié)果逐漸改變并發(fā)數(shù)目,得到最終滿足條件的長穩(wěn)并發(fā)用戶數(shù)。表4為分片100M 文件上傳請求負(fù)載強(qiáng)度結(jié)果,能滿足響應(yīng)時(shí)間小于100s 的并發(fā)量為60;在并發(fā)量為90 時(shí),95%響應(yīng)時(shí)間可以維持在150s 以內(nèi)。和60M 分片文件上傳請求一樣,隨著并發(fā)量的改變,文件服務(wù)系統(tǒng)在5min下的整體處理請求數(shù)目基本沒有太大的波動。在測試過程中,帶寬在900MB/s左右波動,可以近似滿足千兆帶寬環(huán)境。
表4 分片100M文件上傳請求負(fù)載強(qiáng)度表
根據(jù)實(shí)驗(yàn)結(jié)果,可以得出:在分片大小為10M 時(shí),在5 分鐘高壓力請求訪問下支持的并發(fā)量為90;在分片大小為60M 時(shí),此時(shí)支持的并發(fā)量為60;在分片大小為100M 時(shí),此時(shí)支持的并發(fā)量為60。由此可見,在為了滿足系統(tǒng)持續(xù)長時(shí)間高并發(fā)的情況,選擇10M 的分片大小會更加合適。
文中重點(diǎn)介紹了文件上傳的三種分片大小在MinIO 文件服務(wù)集群部署條件下的性能測試模型,并通過實(shí)驗(yàn)得出三種分片大小滿足特定條件下所支持的并發(fā)用戶數(shù)目和疲勞強(qiáng)度下的并發(fā)用戶數(shù)。基于以上論述和結(jié)論可以得出,為了滿足單次高并發(fā)和持續(xù)高并發(fā)的情況,上傳大文件時(shí)選擇10M 的分片大小會更加合適。該結(jié)論對于文件上傳效率以及性能的提升有很大幫助,對于文件分片的應(yīng)用也提供了一些經(jīng)驗(yàn),可為后續(xù)文件服務(wù)的選型提供相應(yīng)的幫助。