摘 要: 在C/S模式下,車載終端的并發(fā)接入量是檢驗(yàn)GPS車輛監(jiān)控系統(tǒng)服務(wù)器性能的重要因素。為了滿足大量終端的并發(fā)連接請(qǐng)求并快速響應(yīng)用戶操作,首先采用三層體系結(jié)構(gòu)設(shè)計(jì)服務(wù)器,增強(qiáng)系統(tǒng)的可擴(kuò)展性,實(shí)現(xiàn)模塊間高內(nèi)聚低耦合。其次對(duì)服務(wù)器接入模塊部分應(yīng)用IOCP模型進(jìn)行優(yōu)化,針對(duì)實(shí)際應(yīng)用中信息定位、多類型終端接入、資源優(yōu)化管理、數(shù)據(jù)正確性等問題,分別采取緩沖鏈表、內(nèi)存池以及分包策略等方法進(jìn)行有效解決。最后在實(shí)際應(yīng)用項(xiàng)目中進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果均表明優(yōu)化后的服務(wù)器性能和穩(wěn)定性具有明顯的改善。
關(guān)鍵詞: GPS車輛監(jiān)控;IOCP;線程池;內(nèi)存池
近年隨著社會(huì)經(jīng)濟(jì)的快速發(fā)展,城市交通緊張的狀況不斷地加劇,為了實(shí)現(xiàn)有效的、科學(xué)的車輛信息管理,GPS車輛監(jiān)控系統(tǒng)應(yīng)運(yùn)而生。GPS車輛監(jiān)控系統(tǒng)通過無線網(wǎng)絡(luò),根據(jù)需要將車載終端GPS數(shù)據(jù)包括當(dāng)前車輛的運(yùn)行狀況、位置信息和速度等接入服務(wù)器,并通過客戶端向用戶提供監(jiān)控服務(wù)[1]。該監(jiān)控系統(tǒng)主要由服務(wù)器、客戶端和GPS車載終端三部分組成[2]。
其中,服務(wù)器部分是整個(gè)車輛監(jiān)控系統(tǒng)的核心,主要完成車輛GPS車載終端定位信息和報(bào)警信息的采集、處理、轉(zhuǎn)發(fā),對(duì)客戶端軟件的指令快速響應(yīng)與處理以及實(shí)現(xiàn)平臺(tái)數(shù)據(jù)的管理,并且需要滿足7×24小時(shí)為大規(guī)模的GPS車載終端提供接入服務(wù)。然而由于終端連接數(shù)目龐大,使服務(wù)器程序負(fù)載量大,無法快速地響應(yīng)并處理海量終端的連接請(qǐng)求,造成系統(tǒng)不穩(wěn)定。本文設(shè)計(jì)了一種性能和穩(wěn)定性良好的服務(wù)器軟件平臺(tái),采用三層體系結(jié)構(gòu)實(shí)現(xiàn)模塊高內(nèi)聚低耦合,并結(jié)合IOCP網(wǎng)絡(luò)通信模型來優(yōu)化服務(wù)端,快速響應(yīng)并處理海量車載終端的并發(fā)接入請(qǐng)求,在此基礎(chǔ)上改善系統(tǒng)資源的優(yōu)化管理,從而有效提高系統(tǒng)的性能和穩(wěn)定性。
1 服務(wù)器設(shè)計(jì)
1.1 服務(wù)器體系結(jié)構(gòu)
本文設(shè)計(jì)的服務(wù)器采用三層體系結(jié)構(gòu),如圖1所示,分為數(shù)據(jù)接入層、處理分析層和業(yè)務(wù)服務(wù)層,目的是實(shí)現(xiàn)交通信息接入規(guī)范化、功能模塊化、系統(tǒng)可擴(kuò)展性強(qiáng)和模塊間高內(nèi)聚低耦合化等特點(diǎn);并且在不影響業(yè)務(wù)正常運(yùn)行情況下,各個(gè)模塊可獨(dú)立升級(jí),符合定位業(yè)務(wù)不斷發(fā)展的需求。
數(shù)據(jù)接入層通過各種數(shù)據(jù)接入與轉(zhuǎn)換手段,實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一接入,具體通過Socket接口由車載終端連接到設(shè)備接入服務(wù),實(shí)現(xiàn)雙向數(shù)據(jù)通信,并在接入服務(wù)中實(shí)現(xiàn)數(shù)據(jù)的轉(zhuǎn)換與統(tǒng)一,數(shù)據(jù)最后在網(wǎng)關(guān)進(jìn)行匯總。
處理分析層實(shí)現(xiàn)模塊化的統(tǒng)一處理,便于系統(tǒng)的擴(kuò)展。不同類型的終端信息在經(jīng)過數(shù)據(jù)接入層的處理后,由處理分析程序進(jìn)行加工,實(shí)現(xiàn)業(yè)務(wù)功能。同時(shí)處理分析層也處理從用戶端發(fā)送的業(yè)務(wù)請(qǐng)求,并將其通過終端操作完成后返回。
業(yè)務(wù)服務(wù)層基于處理分析層的數(shù)據(jù)處理結(jié)果,以及數(shù)據(jù)接入層采集并保存在數(shù)據(jù)庫中的原始數(shù)據(jù),向用戶提供顯示的平臺(tái)業(yè)務(wù)功能。服務(wù)器體系結(jié)構(gòu)如圖1所示。
1.2 總體邏輯結(jié)構(gòu)設(shè)計(jì)
服務(wù)器部分主要由設(shè)備接入服務(wù)、數(shù)據(jù)轉(zhuǎn)發(fā)、GPS信息服務(wù)、命令服務(wù)、業(yè)務(wù)信息服務(wù)和數(shù)據(jù)處理應(yīng)用、網(wǎng)絡(luò)監(jiān)控等模塊共同組成。其邏輯結(jié)構(gòu)圖如圖2 所示。
2 設(shè)備接入服務(wù)模塊
在服務(wù)器設(shè)計(jì)過程中,設(shè)備接入服務(wù)模塊需要快速響應(yīng)和處理高并發(fā)終端的連接請(qǐng)求,設(shè)備接入服務(wù)模塊設(shè)計(jì)的優(yōu)劣直接影響到整個(gè)系統(tǒng)的穩(wěn)定性和性能。為了進(jìn)一步提高系統(tǒng)的性能,本節(jié)針對(duì)該模塊的網(wǎng)絡(luò)通信模型進(jìn)行了優(yōu)化,通過完成端口(IOCP)通信模型設(shè)計(jì)并實(shí)現(xiàn)海量終端的連接請(qǐng)求,并通過優(yōu)化系統(tǒng)資源管理使性能得到提高。
2.1 IOCP機(jī)理
IOCP(Input Output Completion Port)也稱完成端口,是微軟提供的一種高效異步I/O通信模型。它摒棄了普通通信模型在接收到一個(gè)客戶端連接請(qǐng)求時(shí)就對(duì)應(yīng)地創(chuàng)建一個(gè)線程來應(yīng)答,而是通過創(chuàng)建一定數(shù)量的工作線程,對(duì)重疊I/O操作完成處理[3-6]。
實(shí)際上,將完成端口看作系統(tǒng)維護(hù)的一個(gè)消息隊(duì)列,系統(tǒng)將所有用戶的I/O請(qǐng)求都放入該消息隊(duì)列中,并且從起先創(chuàng)建好的一定數(shù)量的工作線程中喚醒某一個(gè)線程來從I/O完成隊(duì)列中取出消息,完成數(shù)據(jù)的處理。
2.2 線程管理
由于數(shù)據(jù)收發(fā)的處理對(duì)系統(tǒng)資源和處理器時(shí)間的消耗極為巨大,而本文所采用的完成端口通過使用線程池技術(shù)對(duì)所創(chuàng)建的線程進(jìn)行有效的管理,從而較好地解決并發(fā)用戶連接的請(qǐng)求以及并發(fā)處理數(shù)據(jù)。一般系統(tǒng)線程池中工作線程可以歸納為3種狀態(tài):運(yùn)行中的狀態(tài)、被掛起的狀態(tài)以及在完成端口上等待的狀態(tài)[7]。
默認(rèn)情況下,線程池中的所創(chuàng)建的線程數(shù)目等于CPU的數(shù)目,但是一旦線程處于被掛起狀態(tài),CPU就會(huì)處于空閑的狀態(tài)。因此定義線程數(shù)目對(duì)系統(tǒng)效率也有很大的影響。然而過多數(shù)目的線程不一定換來系統(tǒng)的高處理能力,因?yàn)槿绻^多的線程并行運(yùn)行在操作系統(tǒng)中,那么任何一個(gè)線程都有可能獲得時(shí)間運(yùn)行分片,使得CPU疲于線程之間的上下文切換,造成CPU時(shí)間浪費(fèi),從而降低系統(tǒng)的處理能力。而根據(jù)實(shí)際應(yīng)用的效果,可以得出合理的工作線程的數(shù)目=CPU的個(gè)數(shù)×2+2。
2.3 GPS車載終端接入管理
2.3.1 監(jiān)聽優(yōu)化管理
對(duì)于終端接入的管理,主要采用緩沖鏈表策略處理。當(dāng)終端連接上系統(tǒng),先將其插入到緩沖鏈表中,然后對(duì)此鏈表中終端進(jìn)行2 min的判斷。若2 min內(nèi)終端連接并且發(fā)送數(shù)據(jù),就將其從緩沖鏈表中刪除;若終端連接卻不發(fā)送數(shù)據(jù),就將其連接斷開,目的是用來防止長時(shí)間連接的Socket不發(fā)數(shù)據(jù)卻一直霸占著系統(tǒng)資源,造成資源浪費(fèi)。
2.3.2 多類型車載終端的接入管理
由于各地GPS車載終端廠商不一樣,導(dǎo)致設(shè)備終端的生產(chǎn)設(shè)計(jì)標(biāo)準(zhǔn)各異。在實(shí)際應(yīng)用中,需要在設(shè)備接入模塊中考慮解決多類型的車載終端接入問題,本文在設(shè)計(jì)接入模塊時(shí),為每一種類型的終端建立一個(gè)對(duì)應(yīng)的協(xié)議類,并且為每一類型的終端建立單獨(dú)的監(jiān)聽端口。在監(jiān)聽之前事先根據(jù)端口進(jìn)行注冊(cè)協(xié)議,即將協(xié)議與監(jiān)聽端口相綁定,當(dāng)終端接入時(shí),根據(jù)Socket所連接的端口映射到對(duì)應(yīng)的協(xié)議解析類中進(jìn)行解析。如果有新類型的GPS車載終端,就對(duì)應(yīng)的構(gòu)造一個(gè)對(duì)應(yīng)的協(xié)議解析類,這樣不僅增加了系統(tǒng)的可擴(kuò)展性,也解決了車載終端設(shè)備多樣化的問題。
2.4 內(nèi)存資源優(yōu)化管理
作為設(shè)備接入服務(wù)端的開發(fā),合理地管理內(nèi)存是一個(gè)極其重要的問題。在處理數(shù)據(jù)的過程中,必定不斷地進(jìn)行內(nèi)存申請(qǐng)和釋放的操作。由于系統(tǒng)的資源有限,如果頻繁對(duì)內(nèi)存進(jìn)行new和delete,勢(shì)必造成系統(tǒng)堆棧變得雜亂無序,產(chǎn)生很多內(nèi)存碎片,造成系統(tǒng)不穩(wěn)定,降低性能。在此本文采取內(nèi)存池的方法來解決,首先根據(jù)實(shí)際應(yīng)用需求,事先創(chuàng)建好一定數(shù)量的單IO操作數(shù)據(jù)塊,并將其一并放入到一個(gè)空閑鏈表中。當(dāng)需要進(jìn)行單IO操作數(shù)據(jù)空間的申請(qǐng)時(shí),就從空閑鏈表檢查是否有滿足的空間,若滿足,則分出一部分內(nèi)存空間進(jìn)行使用;若不滿足,則繼續(xù)申請(qǐng)新的內(nèi)存空間。當(dāng)使用完這個(gè)單IO操作數(shù)據(jù)空間時(shí),并非直接銷毀掉,而是將其保存到空閑鏈表中,供下次使用。這樣就會(huì)消除因?yàn)轭l繁申請(qǐng)和釋放內(nèi)存帶來的碎片,減少了系統(tǒng)資源的浪費(fèi),使系統(tǒng)性能得到提高。
2.5 數(shù)據(jù)處理
在開發(fā)接入模塊時(shí),傳輸層通信的協(xié)議采用TCP協(xié)議。由于TCP字節(jié)流的特性以及網(wǎng)絡(luò)狀況,在進(jìn)行數(shù)據(jù)傳輸時(shí)可能出現(xiàn)TCP粘包現(xiàn)象。假設(shè)接收端接收數(shù)據(jù)時(shí),可能出現(xiàn)圖3所示的4種情況,白色表示Package1,黑色表示Package2。
第一種情況是所需要的。而后3種情況屬于TCP粘包現(xiàn)象,需要對(duì)數(shù)據(jù)進(jìn)行拆包,拆成如第一種情況一樣的獨(dú)立的數(shù)據(jù)包。
針對(duì)以上現(xiàn)象給出分包算法。假設(shè)接收到的數(shù)據(jù)長度為N,首先將數(shù)據(jù)轉(zhuǎn)換成自定義的結(jié)構(gòu)體形式,并獲取結(jié)構(gòu)體中數(shù)據(jù)長度字段的值L進(jìn)行對(duì)比判斷。
(1)如果L<N,則說明所接收到的數(shù)據(jù)是多包數(shù)據(jù),按照長度字段的值截取L字節(jié)數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,而后繼續(xù)按照如此做法截取,直至結(jié)束;
(2)如果L=N,則說明所接收到的數(shù)據(jù)是一個(gè)完整的數(shù)據(jù)包大小,直接進(jìn)行數(shù)據(jù)處理;
(3)如果L>N,則說明所接收到的數(shù)據(jù)不足一個(gè)數(shù)據(jù)包大小,存進(jìn)臨時(shí)緩沖區(qū)中,等待接收下一個(gè)數(shù)據(jù)包進(jìn)行合并后再進(jìn)行判斷。
通過分包算法能很好地解決TCP粘包的現(xiàn)象,并正確執(zhí)行數(shù)據(jù)處理。
3 實(shí)驗(yàn)結(jié)果與分析
針對(duì)設(shè)備接入服務(wù)模塊的性能測(cè)試,本文主要從最大可支持終端的連接數(shù)目、車載終端饑餓數(shù)目(在指定時(shí)間內(nèi)無法得到設(shè)備接入服務(wù)模塊響應(yīng)的終端數(shù)目)、系統(tǒng)CPU和內(nèi)存使用情況等4個(gè)方面來測(cè)試。為了更好地驗(yàn)證本文應(yīng)用IOCP模型對(duì)終端響應(yīng)進(jìn)行優(yōu)化的效果,在測(cè)試階段實(shí)現(xiàn)了基于線程模型的性能對(duì)比測(cè)試。
3.1 實(shí)驗(yàn)環(huán)境
使用5臺(tái)處于同一個(gè)局域網(wǎng)的臺(tái)式機(jī),其中接入模塊所在的主機(jī)配置為:Intel I3 雙核處理器,主頻2.66 GHz,2 GB內(nèi)存。另外4臺(tái)客戶機(jī)配置為:Intel Pentium雙核處理器,主頻2.20 GHz,1 GB內(nèi)存。每臺(tái)客戶機(jī)上運(yùn)行一個(gè)模擬車載終端程序,能創(chuàng)建5 000個(gè)Socket連接模擬實(shí)際GPS車載終端的連接情況。
3.2 實(shí)驗(yàn)結(jié)果分析
通過實(shí)驗(yàn)驗(yàn)證,可以得出基于IOCP模型的設(shè)備接入服務(wù)模塊最大可支持終端的連接數(shù)目可達(dá)20 000個(gè)。從圖4(a)可以明顯看出,隨著終端數(shù)目的增加,即隨著Socket連接數(shù)的增多,基于線程模型的服務(wù)端饑餓的終端數(shù)量也隨之增多,而基于IOCP模型的服務(wù)端沒有出現(xiàn)終端連接請(qǐng)求得不到響應(yīng)的情況。
圖4(b)、圖4(c)為基于IOCP模型接入模塊的系統(tǒng)資源消耗情況??梢钥闯觯m然剛啟動(dòng)程序,內(nèi)存資源就消耗了100 MB,但隨著終端數(shù)目的增加,CPU和內(nèi)存的消耗情況并沒有隨之而快速增長,而是緩慢地增長,因此可以得出基于IOCP模型的設(shè)備接入服務(wù)模塊具有良好的伸縮性能。
基于上述設(shè)備接入服務(wù)模塊實(shí)現(xiàn)了GPS車輛監(jiān)控系統(tǒng),該系統(tǒng)已在福州某出租車公司接近500輛車在線運(yùn)營監(jiān)控管理應(yīng)用。在實(shí)際運(yùn)行過程中,系統(tǒng)都能快速、及時(shí)地響應(yīng)GPS車載終端的接入請(qǐng)求,并且呈現(xiàn)出良好的穩(wěn)定性和性能。
針對(duì)需要快速響應(yīng)并處理高并發(fā)量的GPS車載終端的連接請(qǐng)求,本文對(duì)GPS車輛監(jiān)控系統(tǒng)的服務(wù)器進(jìn)行優(yōu)化。一方面本文優(yōu)化服務(wù)器架構(gòu)設(shè)計(jì),將服務(wù)器結(jié)構(gòu)劃分成三個(gè)層次,避免單個(gè)服務(wù)器程序壓力太大,實(shí)現(xiàn)高內(nèi)聚低耦合。另一方面結(jié)合IOCP通信模型對(duì)設(shè)備接入服務(wù)模塊進(jìn)行性能優(yōu)化。通過采用線程池、內(nèi)存池等方法較好地解決海量終端并發(fā)接入請(qǐng)求、信息定位和資源浪費(fèi)等問題。其次,采用緩沖鏈表對(duì)終端接入進(jìn)行監(jiān)聽優(yōu)化,避免惡意連接消耗系統(tǒng)資源。對(duì)多類型的終端協(xié)議進(jìn)行統(tǒng)一管理,解決多類型終端接入問題。最后,為了確保數(shù)據(jù)的正確性,在報(bào)文數(shù)據(jù)處理部分結(jié)合分包策略使得TCP粘包現(xiàn)象得到有效解決。另外,經(jīng)過實(shí)際項(xiàng)目的應(yīng)用,表明該服務(wù)器具有較好的性能和穩(wěn)定性。
參考文獻(xiàn)
[1] Liu Dan,Liang Zongwen,Li Yichao,et al.Research and design of a high performance GPS vehicle monitoring system[C].2010 International Conference on Future Information Technology and Management Engineering,2010.
[2] 齊躍,劉瀏.GPS車載監(jiān)控系統(tǒng)并發(fā)服務(wù)器的設(shè)計(jì)策略[J]. 武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2012,34(4):471-473.
[3] Wang Xinyu.A method using IOCP model to improve the performence of network equipment management systems[J]. Journal of Guangxi Academy of Sciences,2012(1):9.
[4] Zhang Weiguo,Shi Donghui,Li Lifeng.The design of the underlying network communication module based on IOCP[M]. Communications and Information Processing.Springer Berlin Heidelberg,2012:17-24.
[5] 廖宏建,楊玉寶,唐連章.完成端口實(shí)現(xiàn)高性能服務(wù)端通信層的關(guān)鍵問題[J].計(jì)算機(jī)應(yīng)用,2012,32(3):812-815.
[6] GAO W,WU H,ZHANG Q,et al.An agricultural information transmission system based on smart display terminal and IOCP[J].Intelligent Automation and Soft Computing,2010,16(6):935-943.
[7] 陳懷松,陳家琪.IOCP寫服務(wù)程序時(shí)的關(guān)鍵問題研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì),2010,31(17):3793-3796.