黃冰


摘 要:Docker的出現解決了傳統的網站開發流程中由于不同的應用及其所依賴的環境的復雜關系而造成的資源浪費和項目風險,極大地提高了項目開發效率和質量。因此,基于Docker的MySQL數據庫的性能是影響工程中使用Docker的一個非常關鍵的因素。文章基于此研究設計了MySQL的性能測試,針對不同大小的數據庫和不同的并發訪問量,對MySQL和基于Docker的MySQL的性能進行測試,并對結果進行比較分析,驗證了將MySQL數據庫部署在Docker上的應用價值。
關鍵詞:Docker;虛擬化;MySQL;性能;數據庫服務器
0 引言
在開發網站項目的過程中,傳統的流程是首先安裝好Web服務器、后臺數據等組件以及它們所依賴的環境,配置組合后進行功能測試,看是否能夠正常工作,否則還需要切換不同的版本再調試,而且當需要加入新應用時,事情會變得更加復雜。并且,在軟件項目流程中的各個階段都要重復上述環境搭建過程,從而耗費大量的時間和人力成本[1],增加了項目的不可控性和風險。而基于容器化技術的Docker技術的出現,提供了一種靈活的解決此類問題的方法,從而使開發、測試、部署、運維等的效率大大提高[2-4]。
在網站項目的后臺數據庫選擇上,目前比較流行的是MySQL,其性能表現非常好,再加上其開源的特性,使得目前MySQL的應用非常廣泛,即使最近NoSQL非關系型數據庫興起,也仍然無法撼動包括MySQL在內的關系型數據庫的地位[5]。
本文將測試并比較分析基于物理機的MySQL和基于Docker的MySQL的性能,為在網站項目中采用Docker技術提供依據。
1 測試環境及設計
1.1 環境
1.1.1? 硬件環境
本次測試在同一主機上安裝MySQL以及Docker,保證兩次測試使用相同的硬件資源。主機采用的是1.8 GHz的CPU和8G的內存。為了防止網絡延時影響測試結果,本測試將服務器主機和客戶端配置在同一個局域網段內。
1.1.2? 軟件環境
服務器的操作系統采用Centos 7.5版本,Docker版本是目前最新的1.13.1版本,MySQL版本是8.0.13。為了讓測試的效果更加準確可靠,采用了流行的壓力測試框架sysbench,使用的版本是1.0.15。
1.2 設計
本次測試設計了只讀和讀寫混合操作測試兩種情況。按照數據庫大小、表數量以及表的記錄數劃分,界定數據庫的并發訪問數,根據網站項用戶和頻次分為四種并發量,分別是30,60,90,120。對于每一種情況,壓測的腳本將運行1分鐘并通過計算平均每秒的數據來獲得最終數據。
第一種只讀操作測試針對20張數據表進行讀操作,數據表的記錄數分別為1 000,5 000,25 000,3種數量級,考慮到后期項目擴展的情況,本次測試增加一種40張表的情況,以達到比較全面的測試。
第二種是兩張常用的數據表進行大量的讀寫操作,這兩張常用的數據表的記錄分別采用10 000,100 000,1 000 000這3種數量級。
為了確保測試的數據有效,在準備測試數據表時,一律采用隨機生成的數據,有效防止由于對數據庫緩存使用頻率的不同造成的測試結果偏差。
對于實驗的數據結果主要關注TPS:Transactions Per Second,每秒完成的數目。
2 測試結果及分析
2.1 只讀操作
第一種情況的測試案例,對數據庫只做讀(查詢)操作的測試,得到了如圖1的數據對比圖。
從圖1中可以看到,直接在物理機上的性能略優于在Docker中的性能,比較大的差距出現在120個線程,差距大小在10%左右,其他大部分情況下差距都在5%以內。
2.2 讀寫混合
第二種情況的測試案例,對數據庫進行了讀寫(查詢,插入,更新,刪除)操作的測試,得到了如圖2的數據對比圖。
從圖2和圖1的對比中可以看到,相比于只做讀操作的測試,在讀寫混合的操作模式下,兩種MySQL的效率顯得更為接近。
綜合上述兩種情況,可以看到,在同樣的壓測腳本以及同樣的軟硬件環境和同一個局域網中,使用隨機的數據,基于Docker的性能要略遜于基于物理機的性能,但總體來看差距比較小。
對于每秒完成的事務數(TPS)比較大的差距出現在使用120個線程做只讀操作的情況下,差距在10%左右,其余情況下差距小于10%,甚至比較接近,特別是讀寫混合操作。
3 結語
在網站和軟件開發、測試、部署中,最讓人頭疼的問題是各種環境配置等不一致造成的問題,而Docker的使用能夠保證軟件開發流程各個階段的環境的一致性,從而大大提高了項目的效率和質量。
通過本次性能測試發現,基于Docker的性能雖然略遜于基于物理機的性能,但差距較小,可以消除在實際項目中采用Docker部署MySQL的疑慮,這也從一個側面展示了Docker這種新的、耗費資源較少的虛擬化技術所具備的價值。當然,如果在并發訪問量比較大的系統中,這種差距在某些時候可能達到10%,這時就需要項目經理或者開發者去權衡利弊,以決定是否要在Docker中部署MySQL。
[參考文獻]
[1]楊保華,戴王劍,曹亞侖,等.Docker技術入門與實戰[M].北京:機械工業出版社,2015.
[2]胡湘菲.軟件自動化測試環境搭建中的Docker應用[J].計算機時代,2017(3):26-29.
[3]凌云.基于Docker平臺的DevOps運維系統的研究與改進[J].電腦知識與技術,2018(26):209-211.
[4]鄒保平,黃文思,張文晉,等.基于Docker的應用部署管理平臺研究[J].電子設計工程,2017(12):41-44.
[5]權治,宋晶晶.基于NoSQL的數據庫技術分析[J].無線電工程,2013(9):4-6.
(編輯 何 琳)