本申請屬于網(wǎng)絡(luò)流量控制領(lǐng)域,特別涉及一種基于Web服務(wù)器配置的限流方法及系統(tǒng)。
背景技術(shù):
對于那些后臺(tái)復(fù)雜、訪問量在特殊時(shí)段有明顯陡增的WEB應(yīng)用,如電商網(wǎng)站的雙十一整點(diǎn)秒殺,大型的新聞門戶網(wǎng)站每日投放內(nèi)容等,由于后臺(tái)邏輯復(fù)雜,為了保證系統(tǒng)整體處理效率,避免網(wǎng)絡(luò)訪問的大量擠壓,往往需要采用一些限流策略。
現(xiàn)有技術(shù)中,主要是通過增加流量控制器來實(shí)現(xiàn)網(wǎng)絡(luò)層面的限流,該方法主要對應(yīng)用和用戶進(jìn)行寬帶的分配和監(jiān)控,從而在網(wǎng)絡(luò)層面實(shí)現(xiàn)流控的目的,這種方法并非針對請求數(shù)層面的控制,因此其流控策略精度不夠,若訪問應(yīng)用不同接口的網(wǎng)絡(luò)包字節(jié)數(shù)也不同,當(dāng)一段時(shí)間內(nèi)請求各接口的占比量出現(xiàn)明顯偏差時(shí),對應(yīng)單位時(shí)間流量就會(huì)出現(xiàn)偏差,從而根據(jù)入口流量帶寬限流就會(huì)出現(xiàn)偏差,從而起不到有效限流目的。
技術(shù)實(shí)現(xiàn)要素:
本申請?zhí)峁┮环N基于Web服務(wù)器配置的網(wǎng)絡(luò)限流方法,用于解決現(xiàn)有技術(shù)中通過流量控制器實(shí)現(xiàn)網(wǎng)絡(luò)層面的限流精度不高,起不到有效限流目的的問題。
為了解決上述技術(shù)問題,本申請的技術(shù)方案為提供一種基于Web服務(wù)器配置的網(wǎng)絡(luò)限流方法,包括:
計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長;
確定Web服務(wù)器網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)(Transactions Per Second,TPS);
通過如下公式計(jì)算Web服務(wù)器允許客戶端的最大連接數(shù):
MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T,
其中,MaxClients為Web服務(wù)器允許客戶端的最大連接數(shù),T為事務(wù)的平均處理時(shí)長;
根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請方法的進(jìn)一步實(shí)施例中,當(dāng)所述MaxClients值為非整數(shù)時(shí),對所述MaxClients值做向上取整處理,判斷取整處理后的MaxClients值是否為質(zhì)數(shù),如果為質(zhì)數(shù),則做加一處理,得到最終的MaxClients值。
本申請方法的進(jìn)一步實(shí)施例中,得到最終的MaxClients值后還包括:根據(jù)最終的MaxClients值調(diào)整ServerLimit值及ThreadPerChild值使其滿足如下公式:
ServerLimit*ThreadPerChild>=MaxClients,MaxClients為ThreadPerChild的整數(shù)倍;
其中,ServerLimit為Web服務(wù)器的最大進(jìn)程數(shù),ThreadPerChild為Web服務(wù)器每一進(jìn)程的最大線程數(shù)。
本申請方法的進(jìn)一步實(shí)施例中,根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流進(jìn)一步為:
根據(jù)所述MaxClients、ServerLimit及ThreadPerChild值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請方法的進(jìn)一步實(shí)施例中,計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長的過程包括:
通過Web服務(wù)器的訪問日志文件收集Web服務(wù)器事務(wù)的實(shí)際處理時(shí)長;
對收集的實(shí)際處理時(shí)長做加權(quán)平均處理得到Web服務(wù)器事務(wù)的平均處理時(shí)長。
本申請另一技術(shù)方案為提供一種基于Web服務(wù)器配置的限流系統(tǒng),包括:
第一計(jì)算模塊,用于計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長;
確定模塊,用于確定Web服務(wù)器網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù);
第二計(jì)算模塊,用于通過如下公式計(jì)算Web服務(wù)器允許客戶端的最大連接數(shù):
MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T,
其中,MaxClients為Web服務(wù)器允許客戶端的最大連接數(shù),T為事務(wù)的平均處理時(shí)長;
設(shè)置模塊,用于根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請系統(tǒng)的進(jìn)一步實(shí)施例中,所述第二計(jì)算模塊具體用于當(dāng)所述MaxClients值為非整數(shù)時(shí),對所述MaxClients值做向上取整處理,判斷取整處理后的MaxClients值是否為質(zhì)數(shù),如果為質(zhì)數(shù),則做加一處理,得到最終的MaxClients值。
本申請系統(tǒng)的進(jìn)一步實(shí)施例中,所述第二計(jì)算模塊還用于根據(jù)最終的MaxClients值調(diào)整ServerLimit值及ThreadPerChild值使其滿足如下公式:
ServerLimit*ThreadPerChild>=MaxClients,MaxClients為ThreadPerChild的整數(shù)倍;
其中,ServerLimit為Web服務(wù)器的最大進(jìn)程數(shù),ThreadPerChild為Web服務(wù)器每一進(jìn)程中的最大線程數(shù)。
本申請系統(tǒng)的進(jìn)一步實(shí)施例中,所述設(shè)置模塊進(jìn)一步用于根據(jù)所述MaxClients、ServerLimit及ThreadPerChild值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請系統(tǒng)的進(jìn)一步實(shí)施例中,所述第一計(jì)算模塊處理過程包括:
通過Web服務(wù)器的訪問日志文件收集Web服務(wù)器事務(wù)的實(shí)際處理時(shí)長;
對收集的實(shí)際處理時(shí)長做加權(quán)平均處理得到Web服務(wù)器事務(wù)的平均處理時(shí)長。
本申請?zhí)峁┑幕赪eb服務(wù)器配置的限流方法及系統(tǒng)對Web服務(wù)器允許客戶端連接數(shù)層面進(jìn)行控制,在已知Web服務(wù)器事務(wù)的平均處理時(shí)長及網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)的情況下,通過“MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T”的計(jì)算公式得出MaxClients的設(shè)置值,能夠?qū)崿F(xiàn)客戶端請求數(shù)流量的精細(xì)化控制。
附圖說明
為了更清楚地說明本申請實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請一實(shí)施例的基于Web服務(wù)器配置的限流方法流程圖;
圖2為本申請一實(shí)施例的計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長的流程圖;
圖3為本申請一實(shí)施例的基于Web服務(wù)器配置的限流系統(tǒng)結(jié)構(gòu)圖。
具體實(shí)施方式
為了使本申請的技術(shù)特點(diǎn)及效果更加明顯,下面結(jié)合附圖對本申請的技術(shù)方案做進(jìn)一步說明,本申請也可有其他不同的具體實(shí)例來加以說明或?qū)嵤?,任何本領(lǐng)域技術(shù)人員在權(quán)利要求范圍內(nèi)做的等同變換均屬于本申請的保護(hù)范疇。
在本說明書的描述中,參考術(shù)語“一實(shí)施例”、“一具體實(shí)施例”、“一些實(shí)施例”、“例如”、“示例”、“具體示例”、或“一些示例”等的描述意指結(jié)合該實(shí)施例或示例描述的具體特征或者特點(diǎn)包含于本申請的至少一個(gè)實(shí)施例或示例中。在本說明書中,對上述術(shù)語的示意性表述不一定指的是相同的實(shí)施例或示例。而且,描述的具體特征或者特點(diǎn)可以在任何的一個(gè)或多個(gè)實(shí)施例或示例中以合適的方式結(jié)合。各實(shí)施例中涉及的步驟順序用于示意性說明本申請的實(shí)施,其中的步驟順序不作限定,可根據(jù)需要作適當(dāng)調(diào)整。
關(guān)于申請中所使用的“包含”、“包括”、“具有”、“含有”等等,均為開放性的用語,即意指包含但不限于。
關(guān)于申請中所使用的用語“最大”為一定范圍內(nèi)的最大值,并非無限大。本領(lǐng)域技術(shù)人員應(yīng)當(dāng)了解,后續(xù)提及的數(shù)值可依實(shí)際需求而調(diào)整,并不做具體限定。
本申請?zhí)峁┑幕赪eb服務(wù)器配置的限流方法及裝置適用于包括MaxClients、ServerLimit及ThreadPerChild參數(shù)的Web服務(wù)器,其中,MaxClients為Web服務(wù)器允許客戶端的最大連接數(shù),ServerLimit為Web服務(wù)器的最大進(jìn)程數(shù),ThreadPerChild為Web服務(wù)器每一進(jìn)程中的最大線程數(shù),本申請所述的Web服務(wù)器如為IBM HTTP Server服務(wù)器(簡稱IHS服務(wù)器,是基于Apache Group開發(fā)的Apache Web服務(wù)器的Web服務(wù)器)。
如圖1所示,圖1為本申請一實(shí)施例的基于Web服務(wù)器配置的限流方法流程圖。該方法能夠?qū)崿F(xiàn)客戶端請求數(shù)流量的精細(xì)化控制。具體的,基于Web服務(wù)器配置的限流方法包括:
步驟101:計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長。其中,一個(gè)事務(wù)是指一個(gè)客戶端向服務(wù)器發(fā)送訪問請求,然后服務(wù)器做出反應(yīng)的過程。
步驟102:確定Web服務(wù)器網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)。該單位時(shí)間如為秒(s),單位時(shí)間處理事務(wù)數(shù)是服務(wù)器單位時(shí)間響應(yīng)客戶端訪問請求的數(shù)量。實(shí)施時(shí),目標(biāo)單位時(shí)間處理事務(wù)數(shù)可根據(jù)歷史記錄數(shù)據(jù)確定。
步驟103:通過如下公式計(jì)算Web服務(wù)器允許客戶端的最大連接數(shù):
MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T, (1)
其中,MaxClients為Web服務(wù)器允許客戶端的最大連接數(shù),T為事務(wù)的平均處理時(shí)長。
步驟104:根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本實(shí)施例對Web服務(wù)器允許客戶端連接數(shù)層面進(jìn)行控制,在已知Web服務(wù)器事務(wù)的平均處理時(shí)長及網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)的情況下,通過“MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T”的計(jì)算公式得出MaxClients的設(shè)置值,能夠?qū)崿F(xiàn)客戶端請求數(shù)流量的精細(xì)化控制。
詳細(xì)的說,當(dāng)計(jì)算得到的所述MaxClients值為非整數(shù)時(shí),步驟103后還包括對所述MaxClients值做向上取整處理,判斷取整處理后的MaxClients值是否為質(zhì)數(shù),如果不為質(zhì)數(shù)(即為合數(shù)),則取整處理后得到最終的MaxClients值,如果為質(zhì)數(shù),則做加一處理,得到最終的MaxClients值。根據(jù)該最終的MaxClients值設(shè)置Web服務(wù)器。
例如:假設(shè)計(jì)算出的Web服務(wù)器的平均響應(yīng)時(shí)長為0.39s,希望Web服務(wù)器網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)達(dá)到500TPS,Web服務(wù)器個(gè)數(shù)為12臺(tái),將上述值帶入公式(1),得到MaxClients=500TPS*0.39s/12=16.25,16.25向上取整數(shù)為17,17為質(zhì)數(shù),對17做加1處理得到18,也就是說,每臺(tái)Web服務(wù)器允許客戶端的最大連接數(shù)為18,當(dāng)12臺(tái)Web服務(wù)器的MaxClients參數(shù)設(shè)置為18時(shí),則在后臺(tái)響應(yīng)時(shí)間不變的前提下理論可以達(dá)到平均單位時(shí)間處理事務(wù)數(shù)為18*12/0.39=554TPS??蛻舳苏埱髷?shù)超過18后會(huì)報(bào)錯(cuò),Web服務(wù)器返回拒絕訪問,從而起到保護(hù)后臺(tái)的作用。
進(jìn)一步的,如圖2所示,上述步驟101計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長的過程進(jìn)一步包括:
步驟201:通過Web服務(wù)器的訪問日志文件收集Web服務(wù)器事務(wù)的實(shí)際處理時(shí)長。
步驟202:對收集的實(shí)際處理時(shí)長做加權(quán)平均處理得到Web服務(wù)器事務(wù)的平均處理時(shí)長。
實(shí)施時(shí),本申請對訪問日志文件包括的訪問數(shù)量不做限定,只要保證計(jì)算出的平均處理時(shí)長能夠達(dá)到一定精度即可。
一實(shí)施例中,上述取整、加一處理之后還包括根據(jù)最終的MaxClients值調(diào)整ServerLimit值及ThreadPerChild值使其滿足如下公式:
ServerLimit*ThreadPerChild>=MaxClients,MaxClients為ThreadPerChild的整數(shù)倍; (2)
其中,ServerLimit為Web服務(wù)器的最大進(jìn)程數(shù),ThreadPerChild為Web服務(wù)器每一進(jìn)程的最大線程數(shù)。
以IHS服務(wù)器為例,IHS服務(wù)器支持prefork.c和worker.c兩種線程模塊下的配置。其中,prefork.c線程模塊下,一個(gè)進(jìn)程只有一個(gè)線程,即ThreadPerChild=1。worker.c線程模塊下,一個(gè)進(jìn)程可有多個(gè)線程。下面針對這兩種線程模塊,分別說明如何確定ServerLimit、ThreadPerChild值:
若是prefork.c模塊,即一個(gè)進(jìn)程只有一個(gè)線程,則ServerLimit應(yīng)該和MaxClients保持一致,均設(shè)置為上述步驟103中計(jì)算的值,ThreadsPerChild參數(shù)將被忽略。
若是worker.c模塊,即一個(gè)進(jìn)程可有多個(gè)線程,則需要調(diào)整(如等比例調(diào)整)IHS服務(wù)器的最大進(jìn)程數(shù)ServerLimit(默認(rèn)為64)和每一進(jìn)程的最大線程數(shù)ThreadPerChild(默認(rèn)為16)的取值,使得滿足ServerLimit*ThreadsPerChild>=MaxClients,且MaxClients為ThreadsPerChild的整數(shù)倍。
進(jìn)一步的,上述步驟104根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流進(jìn)一步為:
根據(jù)最終的MaxClients、ServerLimit及ThreadPerChild值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
如圖3所示,圖3為本申請一實(shí)施例的基于Web服務(wù)器配置的網(wǎng)絡(luò)限流系統(tǒng)結(jié)構(gòu)圖。該系統(tǒng)可以通過邏輯電路實(shí)現(xiàn)運(yùn)行于智能終端,例如手機(jī)、平板電腦等設(shè)備中,或者以功能模塊的方式由軟件實(shí)現(xiàn)各部件的功能,運(yùn)行于所述智能終端上。
具體的,基于Web服務(wù)器配置的網(wǎng)絡(luò)限流系統(tǒng)包括:
第一計(jì)算模塊301,用于計(jì)算Web服務(wù)器事務(wù)的平均處理時(shí)長;
確定模塊302,用于確定Web服務(wù)器網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù);
第二計(jì)算模塊303,用于通過如下公式計(jì)算Web服務(wù)器允許客戶端的最大連接數(shù):
MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T;
其中,MaxClients為Web服務(wù)器允許客戶端的最大連接數(shù),T為事務(wù)的平均處理時(shí)長。
設(shè)置模塊304,用于根據(jù)計(jì)算得到的MaxClients值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請?zhí)峁┑幕赪eb服務(wù)器配置的限流系統(tǒng),對Web服務(wù)器允許客戶端連接數(shù)層面進(jìn)行控制,在已知Web服務(wù)器事務(wù)的平均處理時(shí)長及網(wǎng)絡(luò)流量控制的目標(biāo)單位時(shí)間處理事務(wù)數(shù)的情況下,通過“MaxClients*Web服務(wù)器個(gè)數(shù)=目標(biāo)單位時(shí)間處理事務(wù)數(shù)*T”的計(jì)算公式得出MaxClients的設(shè)置值,能夠?qū)崿F(xiàn)客戶端請求數(shù)流量的精細(xì)化控制。
詳細(xì)的說,所述第一計(jì)算模塊處理過程包括:通過Web服務(wù)器的訪問日志文件收集Web服務(wù)器事務(wù)的實(shí)際處理時(shí)長;對收集的實(shí)際處理時(shí)長做加權(quán)平均處理得到Web服務(wù)器事務(wù)的平均處理時(shí)長。
所述第二計(jì)算模塊具體用于當(dāng)計(jì)算得到的所述MaxClients值為非整數(shù)時(shí),對所述MaxClients做向上取整處理,判斷取整處理后的MaxClients值是否為質(zhì)數(shù),如果為質(zhì)數(shù),則做加一處理,得到最終的MaxClients值,如果不為質(zhì)數(shù),即為合數(shù),則取整處理得到的MaxClients值為最終的MaxClients值。
進(jìn)一步的,第二計(jì)算模塊還用于根據(jù)最終的MaxClients值調(diào)整ServerLimit值及ThreadPerChild值使其滿足如下公式:
ServerLimit*ThreadPerChild>=MaxClients,所述MaxClients為ThreadPerChild的整數(shù)倍;
其中,ServerLimit為Web服務(wù)器的最大進(jìn)程數(shù),ThreadPerChild為Web服務(wù)器每一進(jìn)程中的最大線程數(shù)。
更進(jìn)一步的,所述設(shè)置模塊進(jìn)一步用于根據(jù)計(jì)所述MaxClients、ServerLimit及ThreadPerChild值設(shè)置Web服務(wù)器,重啟Web服務(wù)器以實(shí)現(xiàn)限流。
本申請針對某些后臺(tái)復(fù)雜、訪問量在特殊時(shí)段有明顯陡增的Web應(yīng)用中,通過Web服務(wù)器配置能夠?qū)崿F(xiàn)系統(tǒng)層面的限流,使客戶端請求數(shù)得到精細(xì)控制,相較于現(xiàn)有技術(shù)而言,控制效果更好。
本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本申請的實(shí)施例可提供為方法、系統(tǒng)、或計(jì)算機(jī)程序產(chǎn)品。因此,本申請可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。
本申請是參照根據(jù)本申請實(shí)施例的方法、設(shè)備(系統(tǒng))、和計(jì)算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計(jì)算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計(jì)算機(jī)程序指令到通用計(jì)算機(jī)、專用計(jì)算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個(gè)機(jī)器,使得通過計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的裝置。
這些計(jì)算機(jī)程序指令也可存儲(chǔ)在能引導(dǎo)計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計(jì)算機(jī)可讀存儲(chǔ)器中,使得存儲(chǔ)在該計(jì)算機(jī)可讀存儲(chǔ)器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能。
這些計(jì)算機(jī)程序指令也可裝載到計(jì)算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計(jì)算機(jī)實(shí)現(xiàn)的處理,從而在計(jì)算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個(gè)流程或多個(gè)流程和/或方框圖一個(gè)方框或多個(gè)方框中指定的功能的步驟。
以上所述僅用于說明本申請的技術(shù)方案,任何本領(lǐng)域普通技術(shù)人員均可在不違背本申請的精神及范疇下,對上述實(shí)施例進(jìn)行修飾與改變。因此,本申請的權(quán)利保護(hù)范圍應(yīng)視權(quán)利要求范圍為準(zhǔn)。