《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > GPS車(chē)輛監(jiān)控系統(tǒng)服務(wù)器性能優(yōu)化與實(shí)現(xiàn)
GPS車(chē)輛監(jiān)控系統(tǒng)服務(wù)器性能優(yōu)化與實(shí)現(xiàn)
來(lái)源:微型機(jī)與應(yīng)用2013年第24期
薛 津,葉少珍
(福州大學(xué) 數(shù)學(xué)與計(jì)算機(jī)科學(xué)學(xué)院,福建 福州350108)
摘要: 在C/S模式下,,車(chē)載終端的并發(fā)接入量是檢驗(yàn)GPS車(chē)輛監(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ù)正確性等問(wèn)題,,分別采取緩沖鏈表,、內(nèi)存池以及分包策略等方法進(jìn)行有效解決。最后在實(shí)際應(yīng)用項(xiàng)目中進(jìn)行測(cè)試,,實(shí)驗(yàn)結(jié)果均表明優(yōu)化后的服務(wù)器性能和穩(wěn)定性具有明顯的改善,。
Abstract:
Key words :

摘  要: 在C/S模式下,車(chē)載終端的并發(fā)接入量是檢驗(yàn)GPS車(chē)輛監(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ù)正確性等問(wèn)題,,分別采取緩沖鏈表,、內(nèi)存池以及分包策略等方法進(jìn)行有效解決。最后在實(shí)際應(yīng)用項(xiàng)目中進(jìn)行測(cè)試,,實(shí)驗(yàn)結(jié)果均表明優(yōu)化后的服務(wù)器性能和穩(wěn)定性具有明顯的改善,。
關(guān)鍵詞: GPS車(chē)輛監(jiān)控;IOCP,;線程池,;內(nèi)存池

    近年隨著社會(huì)經(jīng)濟(jì)的快速發(fā)展,城市交通緊張的狀況不斷地加劇,,為了實(shí)現(xiàn)有效的,、科學(xué)的車(chē)輛信息管理,GPS車(chē)輛監(jiān)控系統(tǒng)應(yīng)運(yùn)而生,。GPS車(chē)輛監(jiān)控系統(tǒng)通過(guò)無(wú)線網(wǎng)絡(luò),,根據(jù)需要將車(chē)載終端GPS數(shù)據(jù)包括當(dāng)前車(chē)輛的運(yùn)行狀況、位置信息和速度等接入服務(wù)器,,并通過(guò)客戶端向用戶提供監(jiān)控服務(wù)[1],。該監(jiān)控系統(tǒng)主要由服務(wù)器、客戶端和GPS車(chē)載終端三部分組成[2],。
    其中,,服務(wù)器部分是整個(gè)車(chē)輛監(jiān)控系統(tǒng)的核心,主要完成車(chē)輛GPS車(chē)載終端定位信息和報(bào)警信息的采集,、處理,、轉(zhuǎn)發(fā),,對(duì)客戶端軟件的指令快速響應(yīng)與處理以及實(shí)現(xiàn)平臺(tái)數(shù)據(jù)的管理,并且需要滿足7×24小時(shí)為大規(guī)模的GPS車(chē)載終端提供接入服務(wù),。然而由于終端連接數(shù)目龐大,,使服務(wù)器程序負(fù)載量大,無(wú)法快速地響應(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ò)通信模型來(lái)優(yōu)化服務(wù)端,,快速響應(yīng)并處理海量車(chē)載終端的并發(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ù)接入層通過(guò)各種數(shù)據(jù)接入與轉(zhuǎn)換手段,,實(shí)現(xiàn)數(shù)據(jù)的統(tǒng)一接入,具體通過(guò)Socket接口由車(chē)載終端連接到設(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)過(guò)數(shù)據(jù)接入層的處理后,,由處理分析程序進(jìn)行加工,,實(shí)現(xiàn)業(yè)務(wù)功能。同時(shí)處理分析層也處理從用戶端發(fā)送的業(yè)務(wù)請(qǐng)求,,并將其通過(guò)終端操作完成后返回,。
    業(yè)務(wù)服務(wù)層基于處理分析層的數(shù)據(jù)處理結(jié)果,以及數(shù)據(jù)接入層采集并保存在數(shù)據(jù)庫(kù)中的原始數(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ì)過(guò)程中,,設(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)化,,通過(guò)完成端口(IOCP)通信模型設(shè)計(jì)并實(shí)現(xiàn)海量終端的連接請(qǐng)求,并通過(guò)優(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è)線程來(lái)應(yīng)答,,而是通過(guò)創(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è)線程來(lái)從I/O完成隊(duì)列中取出消息,,完成數(shù)據(jù)的處理,。
2.2 線程管理
    由于數(shù)據(jù)收發(fā)的處理對(duì)系統(tǒng)資源和處理器時(shí)間的消耗極為巨大,,而本文所采用的完成端口通過(guò)使用線程池技術(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)效率也有很大的影響,。然而過(guò)多數(shù)目的線程不一定換來(lái)系統(tǒng)的高處理能力,,因?yàn)槿绻^(guò)多的線程并行運(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車(chē)載終端接入管理
2.3.1 監(jiān)聽(tīng)優(yōu)化管理

    對(duì)于終端接入的管理,主要采用緩沖鏈表策略處理,。當(dāng)終端連接上系統(tǒng),,先將其插入到緩沖鏈表中,然后對(duì)此鏈表中終端進(jìn)行2 min的判斷,。若2 min內(nèi)終端連接并且發(fā)送數(shù)據(jù),,就將其從緩沖鏈表中刪除;若終端連接卻不發(fā)送數(shù)據(jù),,就將其連接斷開(kāi),,目的是用來(lái)防止長(zhǎng)時(shí)間連接的Socket不發(fā)數(shù)據(jù)卻一直霸占著系統(tǒng)資源,造成資源浪費(fèi),。
2.3.2 多類型車(chē)載終端的接入管理
    由于各地GPS車(chē)載終端廠商不一樣,,導(dǎo)致設(shè)備終端的生產(chǎn)設(shè)計(jì)標(biāo)準(zhǔn)各異。在實(shí)際應(yīng)用中,,需要在設(shè)備接入模塊中考慮解決多類型的車(chē)載終端接入問(wèn)題,,本文在設(shè)計(jì)接入模塊時(shí),為每一種類型的終端建立一個(gè)對(duì)應(yīng)的協(xié)議類,,并且為每一類型的終端建立單獨(dú)的監(jiān)聽(tīng)端口,。在監(jiān)聽(tīng)之前事先根據(jù)端口進(jìn)行注冊(cè)協(xié)議,,即將協(xié)議與監(jiān)聽(tīng)端口相綁定,,當(dāng)終端接入時(shí),根據(jù)Socket所連接的端口映射到對(duì)應(yīng)的協(xié)議解析類中進(jìn)行解析,。如果有新類型的GPS車(chē)載終端,,就對(duì)應(yīng)的構(gòu)造一個(gè)對(duì)應(yīng)的協(xié)議解析類,這樣不僅增加了系統(tǒng)的可擴(kuò)展性,,也解決了車(chē)載終端設(shè)備多樣化的問(wèn)題,。
2.4 內(nèi)存資源優(yōu)化管理
    作為設(shè)備接入服務(wù)端的開(kāi)發(fā),合理地管理內(nèi)存是一個(gè)極其重要的問(wèn)題,。在處理數(shù)據(jù)的過(guò)程中,,必定不斷地進(jìn)行內(nèi)存申請(qǐng)和釋放的操作。由于系統(tǒng)的資源有限,,如果頻繁對(duì)內(nèi)存進(jìn)行new和delete,,勢(shì)必造成系統(tǒng)堆棧變得雜亂無(wú)序,產(chǎn)生很多內(nèi)存碎片,,造成系統(tǒng)不穩(wěn)定,,降低性能,。在此本文采取內(nèi)存池的方法來(lá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í),,并非直接銷(xiāo)毀掉,,而是將其保存到空閑鏈表中,供下次使用,。這樣就會(huì)消除因?yàn)轭l繁申請(qǐng)和釋放內(nèi)存帶來(lái)的碎片,,減少了系統(tǒng)資源的浪費(fèi),,使系統(tǒng)性能得到提高。
2.5 數(shù)據(jù)處理
    在開(kāi)發(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ù)長(zhǎng)度為N,,首先將數(shù)據(jù)轉(zhuǎn)換成自定義的結(jié)構(gòu)體形式,并獲取結(jié)構(gòu)體中數(shù)據(jù)長(zhǎng)度字段的值L進(jìn)行對(duì)比判斷,。
    (1)如果L<N,,則說(shuō)明所接收到的數(shù)據(jù)是多包數(shù)據(jù),按照長(zhǎng)度字段的值截取L字節(jié)數(shù)據(jù)進(jìn)行數(shù)據(jù)處理,,而后繼續(xù)按照如此做法截取,,直至結(jié)束,;
    (2)如果L=N,則說(shuō)明所接收到的數(shù)據(jù)是一個(gè)完整的數(shù)據(jù)包大小,,直接進(jìn)行數(shù)據(jù)處理,;
    (3)如果L>N,則說(shuō)明所接收到的數(shù)據(jù)不足一個(gè)數(shù)據(jù)包大小,,存進(jìn)臨時(shí)緩沖區(qū)中,,等待接收下一個(gè)數(shù)據(jù)包進(jìn)行合并后再進(jìn)行判斷。
    通過(guò)分包算法能很好地解決TCP粘包的現(xiàn)象,,并正確執(zhí)行數(shù)據(jù)處理,。
3 實(shí)驗(yàn)結(jié)果與分析
    針對(duì)設(shè)備接入服務(wù)模塊的性能測(cè)試,本文主要從最大可支持終端的連接數(shù)目,、車(chē)載終端饑餓數(shù)目(在指定時(shí)間內(nèi)無(wú)法得到設(shè)備接入服務(wù)模塊響應(yīng)的終端數(shù)目),、系統(tǒng)CPU和內(nèi)存使用情況等4個(gè)方面來(lái)測(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è)模擬車(chē)載終端程序,,能創(chuàng)建5 000個(gè)Socket連接模擬實(shí)際GPS車(chē)載終端的連接情況,。
3.2 實(shí)驗(yàn)結(jié)果分析
    通過(guò)實(shí)驗(yàn)驗(yàn)證,可以得出基于IOCP模型的設(shè)備接入服務(wù)模塊最大可支持終端的連接數(shù)目可達(dá)20 000個(gè),。從圖4(a)可以明顯看出,,隨著終端數(shù)目的增加,,即隨著Socket連接數(shù)的增多,,基于線程模型的服務(wù)端饑餓的終端數(shù)量也隨之增多,而基于IOCP模型的服務(wù)端沒(méi)有出現(xiàn)終端連接請(qǐng)求得不到響應(yīng)的情況,。
    圖4(b),、圖4(c)為基于IOCP模型接入模塊的系統(tǒng)資源消耗情況??梢钥闯?,雖然剛啟動(dòng)程序,內(nèi)存資源就消耗了100 MB,,但隨著終端數(shù)目的增加,,CPU和內(nèi)存的消耗情況并沒(méi)有隨之而快速增長(zhǎng),,而是緩慢地增長(zhǎng),因此可以得出基于IOCP模型的設(shè)備接入服務(wù)模塊具有良好的伸縮性能,。

 

 

    基于上述設(shè)備接入服務(wù)模塊實(shí)現(xiàn)了GPS車(chē)輛監(jiān)控系統(tǒng),,該系統(tǒng)已在福州某出租車(chē)公司接近500輛車(chē)在線運(yùn)營(yíng)監(jiān)控管理應(yīng)用。在實(shí)際運(yùn)行過(guò)程中,,系統(tǒng)都能快速,、及時(shí)地響應(yīng)GPS車(chē)載終端的接入請(qǐng)求,并且呈現(xiàn)出良好的穩(wěn)定性和性能,。
    針對(duì)需要快速響應(yīng)并處理高并發(fā)量的GPS車(chē)載終端的連接請(qǐng)求,,本文對(duì)GPS車(chē)輛監(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)化,。通過(guò)采用線程池、內(nèi)存池等方法較好地解決海量終端并發(fā)接入請(qǐng)求,、信息定位和資源浪費(fèi)等問(wèn)題,。其次,采用緩沖鏈表對(duì)終端接入進(jìn)行監(jiān)聽(tīng)優(yōu)化,,避免惡意連接消耗系統(tǒng)資源,。對(duì)多類型的終端協(xié)議進(jìn)行統(tǒng)一管理,解決多類型終端接入問(wèn)題,。最后,,為了確保數(shù)據(jù)的正確性,在報(bào)文數(shù)據(jù)處理部分結(jié)合分包策略使得TCP粘包現(xiàn)象得到有效解決,。另外,,經(jīng)過(guò)實(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車(chē)載監(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)鍵問(wè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寫(xiě)服務(wù)程序時(shí)的關(guān)鍵問(wèn)題研究[J]. 計(jì)算機(jī)工程與設(shè)計(jì),,2010,,31(17):3793-3796.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載,。