毛云峰,邵劍飛
(昆明理工大學(xué) 信息工程與自動化學(xué)院,云南 昆明 650500)
?
基于M/M/n/n排隊系統(tǒng)的動態(tài)數(shù)據(jù)庫連接池
毛云峰,邵劍飛
(昆明理工大學(xué) 信息工程與自動化學(xué)院,云南 昆明 650500)
對系統(tǒng)并發(fā)性能進(jìn)行優(yōu)化時,通常采用連接池技術(shù)進(jìn)行數(shù)據(jù)庫的訪問。針對大量用戶環(huán)境下數(shù)據(jù)庫訪問需求,分析了傳統(tǒng)數(shù)據(jù)庫連接池的不足,并在此基礎(chǔ)上,提出了一種基于M/M/n/n損失制多服務(wù)窗排隊系統(tǒng)的動態(tài)連接池模型。該模型根據(jù)排隊系統(tǒng)參量變化,動態(tài)改變數(shù)據(jù)庫連接池規(guī)模,使系統(tǒng)既能滿足正常的連接需求,又能滿足高并發(fā)量下的連接請求,有效改善了系統(tǒng)性能。試驗結(jié)果表明,在高并發(fā)量連接請求下,系統(tǒng)能夠適應(yīng)連接需求,且系統(tǒng)性能優(yōu)于應(yīng)用傳統(tǒng)連接池的系統(tǒng)。
JDBC;連接池;排隊論;M/M/n/n模型;動態(tài)調(diào)整
隨著Web應(yīng)用系統(tǒng)的不斷發(fā)展,對于Web應(yīng)用系統(tǒng)的性能也提出了更高的要求。在規(guī)模較大和復(fù)雜性較高的Web應(yīng)用中,如何保證在負(fù)載數(shù)量迅速增長、系統(tǒng)資源動態(tài)變化的情況下,讓W(xué)eb應(yīng)用的服務(wù)質(zhì)量(QoS)滿足客戶的需求,成為Web應(yīng)用開發(fā)的一個重要課題。例如,對于用戶量龐大的各大電商,如何解決其性能問題,在保證用戶可以正常使用的同時,提高用戶滿意度則成為開發(fā)關(guān)鍵。為了提高系統(tǒng)性能,減少用戶訪問系統(tǒng)時等待的時間,對數(shù)據(jù)庫連接的優(yōu)化也成為提高Web應(yīng)用性能的一大重要因素[1]。近年的研究熱點主要是如何改進(jìn)連接池技術(shù),使得系統(tǒng)資源得到更合理的應(yīng)用。
數(shù)據(jù)庫連接作為Java應(yīng)用程序與數(shù)據(jù)庫溝通的樞紐,一般每當(dāng)有數(shù)據(jù)庫連接請求時,應(yīng)用程序通過JDBC建立連接、執(zhí)行SQL語句、完成操作后,再關(guān)閉連接。面對頻繁的數(shù)據(jù)庫訪問,使用數(shù)據(jù)庫連接池可以極大地緩解這種壓力,其基本思想就是連接復(fù)用。數(shù)據(jù)庫連接池是指預(yù)先創(chuàng)建一定量數(shù)據(jù)庫連接,在用戶請求時直接取得連接,使用后再將連接返回到池中以便其他請求調(diào)用[2]。
目前,有關(guān)數(shù)據(jù)庫連接池技術(shù)存在的難點是連接池管理如何有效控制連接池規(guī)模,既不造或系統(tǒng)資源浪費,又能保證系統(tǒng)并發(fā)訪問需求,成為研究連接池技術(shù)的目標(biāo)。本文以傳統(tǒng)連接池技術(shù)為基礎(chǔ),提出一種基于排隊系統(tǒng)動態(tài)調(diào)整連接池大小的模型(Dynamic Database Connection Pool model,DDCP)。該模型首先對大量的連接請求進(jìn)行排隊,得出相應(yīng)的目標(biāo)參量;然后通過各參量得出響應(yīng)因素,以此驅(qū)動擴(kuò)展連接池動態(tài)調(diào)整,從而改善系統(tǒng)性能。
傳統(tǒng)的數(shù)據(jù)庫連接池是通過XML配置連接池參數(shù),包括連接池名,初始連接數(shù),連接池的最大、最小容量,數(shù)據(jù)庫的位置URL和驅(qū)動程序類名等。在某些應(yīng)用環(huán)境(如高并發(fā)和大規(guī)模應(yīng)用系統(tǒng))中,這樣的靜態(tài)配置策略往往不能滿足實際需求。如:連接池容量過大則造成資源浪費,而過小又無法滿足系統(tǒng)需求。
文獻(xiàn)[3]采用基于XML配置連接池控制參數(shù),給出了可以根據(jù)用戶需求動態(tài)自適應(yīng)的連接池優(yōu)化方法。在連接池的調(diào)度算法中采用類似工作集的策略,同時對用戶實行優(yōu)先級管理。這種配置策略優(yōu)點是可以根據(jù)過去對資源的使用情況決定連接池的大小,以及連接池中各連接的優(yōu)先級,利用Java緩存技術(shù)實現(xiàn)資源的分級調(diào)度;但是沒有考慮大并發(fā)量情況下,對于用戶的請求應(yīng)該怎樣管理。文獻(xiàn)[4]提出了基于日志文件的記錄自動優(yōu)化方法,該方法的基本思路是設(shè)計具有物理連接和管理策略功能的連接池類庫,對連接對象按照預(yù)定策略進(jìn)行分配、釋放連接等操作。創(chuàng)建監(jiān)視線程類分析配置文件的內(nèi)容,依據(jù)配置文件動態(tài)調(diào)整連接池中的參數(shù)配置。文獻(xiàn)[5]引入離散時間排隊論思想,建立離散時間多服務(wù)臺排隊模型。采用嵌入馬爾科夫鏈方法,分析并導(dǎo)出請求阻塞率、系統(tǒng)平均連接數(shù)、系統(tǒng)利用率和系統(tǒng)吞吐量等系統(tǒng)性能指標(biāo)參量, 為數(shù)據(jù)庫連接池
技術(shù)建立了離散時間多服務(wù)臺損失制的Geom/Geom/c/c排隊模型,雖然分析了該模型并發(fā)訪問性能;但是沒有考慮實際中連接池的大小對系統(tǒng)性能的影響。文獻(xiàn)[6]提出了一種動態(tài)自適應(yīng)的數(shù)據(jù)庫連接方案,該方案采用參數(shù)匹配算法對連接池參數(shù)進(jìn)行優(yōu)化,動態(tài)調(diào)整配置文件,運用連接池并發(fā)調(diào)度策略達(dá)到連接池自適應(yīng)調(diào)整的目的;但是,當(dāng)并發(fā)請求數(shù)達(dá)到一定數(shù)量時,動態(tài)修改配置文件會造成一部分資源浪費,響應(yīng)速度還是會有所降低。文獻(xiàn)[7-9]從數(shù)據(jù)庫連接池技術(shù)的具體實現(xiàn)和性能優(yōu)化的角度進(jìn)行了研究,并取得了一些有意義的成果。
上述相關(guān)研究表明,大多數(shù)研究者都認(rèn)識到動態(tài)連接池能夠使系統(tǒng)性能得到提示;但有效的影響因素還有待進(jìn)一步討論,并根據(jù)影響因素有針對性地給出了解決方案。
2.1 連接池模型
本文將應(yīng)用程序發(fā)出的連接請求看作服務(wù)系統(tǒng)中的顧客,將連接池中預(yù)先創(chuàng)建的連接看作服務(wù)窗,連接超時則拋出異常。根據(jù)數(shù)據(jù)庫連接池的工作原理,建立損失制多服務(wù)窗排隊模型M/M/n/n,對應(yīng)用程序中的大量連接請求進(jìn)行排隊;然后在基本連接池的基礎(chǔ)上引入擴(kuò)展連接池,通過池管理器配置參數(shù)和控制消息的傳遞,以獲取系統(tǒng)性能指標(biāo),并根據(jù)動態(tài)優(yōu)化策略,創(chuàng)建新連接和阻塞擴(kuò)展連接。DDCP模型示意圖如圖1所示。
圖1 DDCP模型示意圖
2.2 排隊系統(tǒng)
能否有效處理不同數(shù)量的數(shù)據(jù)庫訪問連接請求,是評價一個Web應(yīng)用性能的指標(biāo)之一。如果連接請求和連接池中連接數(shù)量不協(xié)調(diào),系統(tǒng)性能必定會下降;因此,在DDCP模型中,使用M/M/n/n排隊系統(tǒng)對請求進(jìn)行排隊,通過排隊模型得出系統(tǒng)中平均排隊隊長、平均等待時間等目標(biāo)參量,以此作為動態(tài)調(diào)整連接池規(guī)模的參數(shù),從而盡可能多地處理連接請求。
圖2 M/M/n/n狀態(tài)流圖
由圖2可寫出平衡條件下K氏代數(shù)方程。
對0狀態(tài),有λp0=μp1,設(shè)λ/μ=ρ1,故有:
p1=ρ1p0
對1狀態(tài),有λp1=2μp2,故有:
…
對k-1狀態(tài),有λpk-1=kμpk,故有:
…
對n-1狀態(tài),有λpn-1=nμpn,故有:
(1)
式中,pk是狀態(tài)概率。于是:
(2)
故相應(yīng)的目標(biāo)參量[10]如下。
1)損失概率為:
(3)
2)平均進(jìn)入系統(tǒng)的顧客數(shù)λe為:
(4)
3)系統(tǒng)在單位時間內(nèi)占用服務(wù)窗的均值為:
(5)
4)系統(tǒng)服務(wù)窗的效率為:
(6)
5)顧客被服務(wù)時間即平均等待時間為:
(7)
根據(jù)排隊系統(tǒng)中平均系統(tǒng)隊長Ls和平均等待時間Ws,確定模型中響應(yīng)系數(shù),構(gòu)造擴(kuò)展連接池的執(zhí)行響應(yīng)因素。當(dāng)Web應(yīng)用性能下降時,根據(jù)響應(yīng)因素觸發(fā)擴(kuò)展連接池中數(shù)據(jù)庫連接的創(chuàng)建或阻塞活動,從而達(dá)到實現(xiàn)動態(tài)調(diào)整連接池的目的。
3.1 連接請求執(zhí)行過程中的調(diào)整策略
在實際運行中,當(dāng)應(yīng)用程序請求數(shù)據(jù)庫連接時,如果基本連接池中有空閑的連接,或連接數(shù)未超過基本連接池限制,則分配給該請求或新建連接供該請求使用;如果基本連接池中無空閑連接,則激活擴(kuò)展連接池。根據(jù)上述情況,應(yīng)用程序的連接請求存在2種變化趨勢,分別為連接請求量漸增和連接請求量逐漸減少。
1)當(dāng)連接請求量漸增時,基本連接池中的連接都將逐漸處于工作狀態(tài),這時將激活擴(kuò)展連接池。設(shè)請求處理完成的全部時間為T,調(diào)用連接等花費的時間為Ts,處理請求花費的時間為Tp。為了衡量系統(tǒng)的響應(yīng)速度,在連接請求處理完成的時間T內(nèi),應(yīng)盡可能減少等待時間,提高請求處理時間的占有率,因此本文定義響應(yīng)系數(shù)Tc:
(8)
Tc值的大小直接反映了所有連接請求的響應(yīng)速率,Tc值越大,系統(tǒng)響應(yīng)速度越快,性能越好;反之,系統(tǒng)性能越差。連接池管理器根據(jù)Tc的值,判斷系統(tǒng)性能,當(dāng)性能下降時,連接池管理器做出相應(yīng)調(diào)整。
2)當(dāng)連接請求量逐漸減少時,由于已激活擴(kuò)展連接池,連接池中連接數(shù)量處于過剩狀態(tài)。連接損失率P損減小,平均等待時間Ws和平均系統(tǒng)隊長Ls隨之不斷變化,設(shè)Tmax為請求處理過程中Tc的最大值,根據(jù)上述排隊模型參量分析,本文定義連接阻塞指標(biāo)Ta為:
(9)
當(dāng)Tc逐漸減少時,連接池中的連接數(shù)大于系統(tǒng)連接請求。當(dāng)Tc逐漸減少到Ta時,池管理器觸發(fā)阻塞連接步驟;當(dāng)Tc值大約減少到Tmax/2時,即Tc=Tmax/2±Δ(Δ→0),則停止連接阻塞步驟,以避免請求數(shù)過少或為0時,連接池規(guī)模隨之變小或變?yōu)?,這樣確保系統(tǒng)中還有一定數(shù)量的連接[11]。
3.2 連接池動態(tài)調(diào)整策略
3.2.1 連接池初始大小判定算法
本文采用日志文件記錄連接池的連接信息。在發(fā)生連接請求時,為每個連接請求自動分配ID,分別將獲取連接和釋放連接的時間寫入日志文件中,從而可以根據(jù)連接的開始時間和結(jié)束時間計算并發(fā)連接數(shù)和并發(fā)持續(xù)時間,并寫入配置文件中,以供下次啟動應(yīng)用時初始化連接池。其基本算法為:將每個連接的參數(shù)作為參考值,遍歷其后的每個連接,當(dāng)獲取連接的時間小于參考連接的開始時間時,則視為并發(fā)連接,為計數(shù)器加1。實現(xiàn)算法的偽代碼如下:
public LogFile(String filePah){
for(i=1;i for(j=i;j if(staTime[j] count++;} if(endTime[j]>=Time[i]]){ temConnTime= endTime[j]-staTime[j]; } } } vec.add(count); vec.add(max(temConnTime)); return vec; } 3.2.2 連接池動態(tài)調(diào)整算法 在M/M/n/n排隊模型和連接請求的2個狀態(tài),提出一個連接調(diào)度算法。算法的偽代碼以及主要步驟如下。 1)接收應(yīng)用程序連接請求,由M/M/n/n模型進(jìn)行排隊,輸出平均系統(tǒng)隊長Ls和平均等待時間Ws。 2)連接池管理器開始記錄相應(yīng)系數(shù)的值,存放在數(shù)組array1[]中。 3)while(array1[i] createNewConnection(); if(Tc→k) break;//跳出步驟3) } 4)連接池管理器記錄連接阻塞指標(biāo)的值。 5)while(array1[i]<=Ta){ 阻塞擴(kuò)展連接池中的連接; if(擴(kuò)展連接池中的連接未激活) 停止連接阻塞步驟; else if(Tc=Tmax/2±Δ,Δ→0){ 停止連接阻塞并跳出步驟5); } 6)重復(fù)執(zhí)行步驟1和步驟2。 上述動態(tài)調(diào)整算法,利用響應(yīng)系數(shù)和阻塞指標(biāo)對連接池規(guī)模進(jìn)行調(diào)整,由于響應(yīng)系數(shù)和阻塞指標(biāo)引入了平均系統(tǒng)隊長Ls和平均等待時間Ws,合理地評估了影響連接池性能的因素,以此調(diào)整連接池規(guī)模,有利于提升系統(tǒng)響應(yīng)時間和性能。 通過上述分析,本文基于筆者所在團(tuán)隊開發(fā)的網(wǎng)上報名系統(tǒng)項目,采用壓力測試工具Apache Jmeter分別模擬10、25、50、100和200個用戶的連接請求,每個用戶迭代10次,即不同用戶環(huán)境下連接請求的用戶數(shù)的10倍;然后在傳統(tǒng)數(shù)據(jù)庫連接池、文獻(xiàn)[6]中的自適應(yīng)連接池模型以及基于DDCP模型的連接池分別做測試并統(tǒng)計測試結(jié)果。本文的試驗環(huán)境為:2.7 GHz Intel core i5,4 G內(nèi)存,Windows操作系統(tǒng);Eclipse LUNA,Tomcat;Jmeter 2.13。 為了便于分析試驗結(jié)果,在網(wǎng)上報名系統(tǒng)上分別應(yīng)用DDCP模型和傳統(tǒng)的數(shù)據(jù)庫連接池,分別部署到Tomcat服務(wù)器上,使用Jmeter測試工具模擬連接請求。 試驗結(jié)果將從系統(tǒng)的平均響應(yīng)時間、90%用戶的響應(yīng)時間、請求錯誤率以及吞吐量等對系統(tǒng)性能進(jìn)行比較[12]。試驗結(jié)果見表1~表3。其中,吞吐量表示每秒完成的請求數(shù)。 表1 傳統(tǒng)連接池模型 表2 自適應(yīng)連接池模型 表3 DDCP模型 從表1~表3中可以看出,當(dāng)用戶數(shù)較少,并發(fā)連接請求量較小時,系統(tǒng)對請求的平均響應(yīng)時間相當(dāng),對90%用戶的響應(yīng)時間相差不大,應(yīng)用DDCP模型的系統(tǒng)吞吐量表現(xiàn)較好;隨著用戶數(shù)增多,應(yīng)用DDCP模型的系統(tǒng)對請求的平均響應(yīng)時間、對90%用戶的響應(yīng)時間以及系統(tǒng)吞吐量相應(yīng)增加,和自適應(yīng)連接池模型性能相當(dāng),但相對于應(yīng)用傳統(tǒng)連接池的系統(tǒng)表現(xiàn)較好;當(dāng)用戶數(shù)達(dá)到200個時,迭代后的并發(fā)請求量達(dá)到2 000,應(yīng)用DDCP模型的系統(tǒng)平均響應(yīng)時間較傳統(tǒng)連接池有明顯改善,自適應(yīng)連接池模型的系統(tǒng)次之,并且該次測試中,2種模型發(fā)生的請求錯誤率為0.00%,而應(yīng)用傳統(tǒng)連接池的系統(tǒng)發(fā)生0.40%請求錯誤率。試驗數(shù)據(jù)表明,DDCP模型相對于傳統(tǒng)連接池有明顯優(yōu)勢,且對于自適應(yīng)連接池模型性能有所提高,從而有效改善了系統(tǒng)性能。 本文提出了一種基于M/M/n/n排隊系統(tǒng)的動態(tài)數(shù)據(jù)庫連接池模型,完成理論分析并根據(jù)調(diào)整算法實現(xiàn)高并發(fā)量下,通過調(diào)整連接池規(guī)模,達(dá)到有效改善系統(tǒng)性能的目的。該模型的特點在于連接池基于排隊系統(tǒng)得出目標(biāo)參量,利用這些參量計算出影響連接池規(guī)模的響應(yīng)系數(shù),并通過響應(yīng)系數(shù)動態(tài)地調(diào)整連接池。原型試驗驗證了DDCP模型能夠根據(jù)系統(tǒng)的需求,合理調(diào)整連接池規(guī)模,保證系統(tǒng)的高性能,同時也最大限度地利用了資源,避免了系統(tǒng)資源的浪費。 [1] 修永富.JDBC數(shù)據(jù)庫連接池技術(shù)及其在JSP中的實現(xiàn)[J].中國教育技術(shù)裝備, 2011(18):110-111. [2] 馬海燕,彭宇行.基于JDBC數(shù)據(jù)庫連接池的自適應(yīng)管理策略研究[J].計算機(jī)應(yīng)用研究, 2006,23(2):57-59. [3] 朱長生,沈云付.自適應(yīng)數(shù)據(jù)庫連接池的研究[J].計算機(jī)工程與應(yīng)用, 2003,39(36):187-190. [4] Li B Z, Jing Z J, Liu Y J, et al. XML configuration-based self-adaptive database connection pooling in NMVS[C]//Computer Science and Information Technology, 2009. [5] 霍占強,張錦程,王志衡.數(shù)據(jù)庫連接池的數(shù)學(xué)建模與性能分析[J].計算機(jī)工程, 2014,40(10):32-36. [6] 牛毅,劉峰,徐川.一種動態(tài)自適應(yīng)的圖片服務(wù)器數(shù)據(jù)庫連接方案[J]. 中國安防, 2015(6):79-83. [7] 王國亮,安世全.一種數(shù)據(jù)庫連接池的動態(tài)控制策略[J].重慶郵電大學(xué)學(xué)報:自然科學(xué)版, 2007, 19(4):446-449. [8] 曾國林,傅秀芬.一種新的數(shù)據(jù)庫連接池模型的研究[J].計算機(jī)與數(shù)字工程, 2011,39(2):163-166. [9] 孟培超,胡圣波,舒恒,等.基于ADO數(shù)據(jù)庫連接池優(yōu)化策略[J].計算機(jī)工程與設(shè)計, 2013, 34(5):1706-1715. [10] 陸傳賚.排隊論[M]. 2版. 北京: 北京郵電大學(xué)出版社, 2009. [11] 陳寧江,林盤.一種基于排隊系統(tǒng)的啟發(fā)式中間件動態(tài)線程池管理機(jī)制[J].計算機(jī)科學(xué), 2010, 37(10):161-164. [12] 康明光,廖勝利,程春田,等. 管家式自適應(yīng)數(shù)據(jù)庫連接池及其應(yīng)用[J]. 南方電網(wǎng)技術(shù),2012, 6(1):78-82. 責(zé)任編輯 鄭練 Dynamic Database Connection Pool based on M/M/n/n Queuing Model MAO Yunfeng, SHAO Jianfei (College of Information Engineering and Automation, Kunming University of Science and Technology, Kunming 650500, China) When optimizing the concurrent performance of the application, the connection pool technology is usually used to access the database. In order to meet the demand of database access in a large number of users, firstly, analyse the deficiencies of the traditional database connection pool; then, a dynamic connection pool queuing model with multi-service based on the M/M/n/n is proposed. According to parameters of the queuing model, the application dynamically changes the size of the database connection pool, which can satisfy the requirement of the normal connection, and meet the requirement of a large number of concurrent connections to improve the performance of the application. Experiments verify that this model can meet the requirement of the connection in face of a large number of concurrent connection request, and show that this model is better than that of the traditional connection pool. JDBC, connection pool, queuing theory, M/M/n/n queuing model, dynamic adjustment TP 392 A 毛云峰(1992-),男,碩士研究生,主要從事移動應(yīng)用研究、大數(shù)據(jù)分析和網(wǎng)絡(luò)安全等方面的研究。 2016-05-314 試驗與分析
5 結(jié)語