摘 要: 在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)資源消耗情況??梢钥闯?,雖然剛啟動(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.