劉 炎,李曉明
(浙江理工大學 機械與自動控制學院,浙江 杭州 310018)
杭州市公共自行車系統(tǒng)是目前世界上最大的公共自行車系統(tǒng)[1],截止2014年6月底共有服務點3 111個,自行車7.8萬輛,日均租用量28.8人次,最高日租量達41.14萬人次.在現(xiàn)有系統(tǒng)中,所有的站點終端數(shù)據(jù)只能通過一臺服務器實現(xiàn)存儲和訪問,當短時間內(nèi)數(shù)據(jù)存取量較大時,該服務器程序響應時間較長,交易數(shù)據(jù)延遲量較大,在一定程度上影響了用戶的使用體驗;另外,系統(tǒng)中所有數(shù)據(jù)均通過一臺服務器與數(shù)據(jù)庫交互,該服務器一旦發(fā)生故障,就會造成整個系統(tǒng)無法正常運行,因此必須改變這種單一節(jié)點服務的現(xiàn)狀.為了解決公共自行車系統(tǒng)在數(shù)據(jù)存儲方面存在的瓶頸問題,本文設計了一種面向公共自行車業(yè)務的數(shù)據(jù)分流和存儲系統(tǒng).新的存儲服務器架構分為分流(負載分配)服務器和區(qū)域服務器兩大部分.其中分流服務器數(shù)量為一,用于接收系統(tǒng)中所有自行車站點的數(shù)據(jù)包裹,同時監(jiān)測區(qū)域服務器的負載情況并實現(xiàn)數(shù)據(jù)轉發(fā);區(qū)域服務器可按照系統(tǒng)區(qū)域劃分為多臺,用于接收分流節(jié)點轉發(fā)來的數(shù)據(jù)并將數(shù)據(jù)寫入后臺數(shù)據(jù)庫中.
目前,負載計算方法已經(jīng)成熟,比較簡單的方法是根據(jù)計算機的CPU使用率和內(nèi)存使用率等情況對服務器的負載進行分析[2];也可以根據(jù)服務器處理的請求數(shù)據(jù)量進行負載能力計算.通常情況下,服務器處理請求的數(shù)量是一個比較準確的負載估算值,而并發(fā)的網(wǎng)絡連接數(shù)是服務器服務能力的一個制約因素[3].在配置相同的情況下,單位時間內(nèi)處理請求數(shù)目多的服務器負載更高.考慮到公共自行車系統(tǒng)需要根據(jù)請求的區(qū)域來源和服務器的負載狀態(tài)進行綜合分析,本文提出了一種區(qū)域負載均衡算法.
公共自行車系統(tǒng)中的數(shù)據(jù)存儲系統(tǒng)主要包括數(shù)據(jù)的接收和存儲兩部分.在傳統(tǒng)的單服務器結構中,存儲服務器直接接收自行車站點終端的數(shù)據(jù)并將數(shù)據(jù)存入數(shù)據(jù)庫中.傳統(tǒng)的單服務器結構如圖1所示.
圖1 單服務器結構
為了解決傳統(tǒng)公共自行車系統(tǒng)單服務器結構的數(shù)據(jù)存儲瓶頸問題,新系統(tǒng)應滿足短時間內(nèi)大量數(shù)據(jù)的存儲需求.由公共自行車業(yè)務特點所決定,公共自行車系統(tǒng)的數(shù)據(jù)流量具有很強的時段性,受時間、事件、天氣條件的影響較大,每天早、晚時段的數(shù)據(jù)量較大,借還車、押金操作等數(shù)據(jù)集中上傳,會給服務器帶來較大的壓力.因此,數(shù)據(jù)分流和存儲系統(tǒng)應當適應這種處理數(shù)據(jù)的壓力.這是其一.
其次,新系統(tǒng)需要具有靈活、動態(tài)分配服務器處理和存儲數(shù)據(jù)的能力.區(qū)域服務器的劃分通常是依據(jù)站點地理區(qū)劃進行的,以便于布置.但是由于公共自行車數(shù)據(jù)有較為鮮明的區(qū)域特點,按地理區(qū)劃設置區(qū)域服務器會造成某一區(qū)域的服務器負載較大而其他區(qū)域服務器較為空閑的局面.因此,新系統(tǒng)的數(shù)據(jù)存儲和分流管理系統(tǒng)應能夠動態(tài)均衡各個區(qū)域服務器的壓力,使數(shù)據(jù)流量在不同區(qū)域服務器之間合理分配.
其三,新的區(qū)域分流和存儲系統(tǒng)需要兼容原有數(shù)據(jù)庫和前端設備,以便將部署的成本減到最低.
根據(jù)新系統(tǒng)的基本需求,本文設計了圖2所示的分流服務器和區(qū)域服務器結構.
圖2 分流服務器和區(qū)域服務器結構
與傳統(tǒng)系統(tǒng)相比,新系統(tǒng)設置了區(qū)域服務器和分流服務器.這樣做的優(yōu)點在于:①安全性更強(將原有單一的服務器數(shù)據(jù)處理模式改成了多臺服務器并行處理,通過服務器冗余,避免了服務器故障造成系統(tǒng)停止服務的風險);②速度更快(并行處理數(shù)據(jù)請求的優(yōu)勢就在于處理能力成倍增長,在相同數(shù)據(jù)庫性能之下,系統(tǒng)能夠處理的終端請求量大大增加);③更柔性(增加區(qū)域服務器的數(shù)量就可以增加系統(tǒng)的服務能力,隨著業(yè)務量的不斷增大,可采用漸進升級服務器的方式滿足更高的性能要求.
該系統(tǒng)對分流服務器提出了更高的要求.因為所有的數(shù)據(jù)均需要通過分流服務器轉發(fā)到對應的區(qū)域服務器,所以分流服務器性能的好壞會直接影響整個公共自行車系統(tǒng)的運行.
區(qū)域服務器和分流服務器采用云計算虛擬機方式,可根據(jù)需要給不同的服務器分配不同的計算資源,靈活性非常強.
在圖3所示的存儲系統(tǒng)功能模型中,將區(qū)域服務器劃分為3個功能模塊,分別為請求處理模塊、數(shù)據(jù)存取模塊和負載計算模塊.同時將分流服務器劃分為4個功能模塊,分別為請求響應模塊、服務器節(jié)點隊列模塊、選擇器模塊和請求分配器模塊.
圖3 存儲系統(tǒng)功能模型
1.3.1 分流服務器功能模塊
(1)請求響應模塊:該模塊監(jiān)聽網(wǎng)絡端口,響應終端設備發(fā)送的各種數(shù)據(jù)請求,并與終端建立連接.該模塊并不處理終端的請求,而是根據(jù)選擇器模塊的輸出將該請求傳遞給請求分配器.此外,該模塊會將不符合要求的請求或者非法連接剔除.
(2)服務器節(jié)點負載隊列模塊:該模塊與服務器節(jié)點進行通信,以維護一個隊列數(shù)據(jù)結構.該數(shù)據(jù)結構能夠描述各服務器節(jié)點的狀態(tài)及負載情況.
(3)選擇器模塊:該模塊根據(jù)預設規(guī)則動態(tài)地決定負責處理請求的服務器ID.
(4)請求分配器模塊:該模塊將請求轉發(fā)給指定的服務器.
1.3.2 區(qū)域服務器功能模塊
(1)請求處理模塊:該模塊處理來自分流服務器或終端的請求,負責創(chuàng)建網(wǎng)絡連接和監(jiān)聽請求端口,并過濾掉不合法的請求.
(2)數(shù)據(jù)存取模塊:該模塊與數(shù)據(jù)庫系統(tǒng)交互,負責數(shù)據(jù)的讀取及寫入.
(3)負載計算模塊:該模塊主要計算服務器的負載情況.其計算的依據(jù)主要是服務器單位時間內(nèi)處理的請求數(shù)目以及數(shù)據(jù)庫存取的數(shù)據(jù)量.
1.3.3 終端請求的代理交接模式
對于來自終端的請求,分流服務器和區(qū)域服務器一般有兩種交接方式(跳轉式和代理式),本系統(tǒng)采用代理式服務方案.首先,終端設備向分流服務器發(fā)送請求,分流服務器受理后會維持連接,并將該請求內(nèi)容轉發(fā)給區(qū)域服務器.區(qū)域服務器對請求處理后將結果反饋給分流服務器,然后分流服務器將結果傳給前端設備.在該方案中,分流服務器的一部分功能充當了代理的功能,終端無需做任何改動,只需要等待請求的結果就可以完成一次訪問.這在網(wǎng)絡質(zhì)量不高的情況下能夠提高終端設備存取數(shù)據(jù)的速度.其缺點在于整個服務過程中分流服務器都要保持與終端設備的連接,在一定程度上會限制分流服務器的響應能力.當然,由于分流服務器不處理數(shù)據(jù)也不與數(shù)據(jù)庫交互,僅需要維持連接,因此可以采取低CPU配置和高內(nèi)存分配的策略來彌補大網(wǎng)絡連接的網(wǎng)絡延遲.
負載均衡技術指以對稱的方式在系統(tǒng)中部署多臺服務器,每臺服務器都具有相同的狀態(tài)和能力,并且可以獨立地向外部提供服務而不需要其他服務器的支撐[4].使用負載均衡技術,將前端發(fā)送來的請求按照某種策略分配給系統(tǒng)中的一臺服務器,接收請求的服務器執(zhí)行處理流程并給予響應.它通過服務器陣列高效地分配前端請求,以最少的資源實現(xiàn)了大型機的性能,是高效處理關鍵數(shù)據(jù)的有效手段[5].
為了確保算法的有效性和準確性,系統(tǒng)需要實時監(jiān)控存儲服務器的任務隊列以及數(shù)據(jù)庫連接池的使用情況,并根據(jù)服務器中任務隊列的數(shù)據(jù)量以及數(shù)據(jù)庫連接池的使用率來判斷該服務器的負載狀況.
用i表示存儲服務器系統(tǒng)中區(qū)域服務器的第i臺服務器,Nr、Nmax和P分別表示區(qū)域服務器當前連接數(shù)、總連接數(shù)和數(shù)據(jù)庫連接池的使用率.那么,區(qū)域服務器的負載為:
B=αNr/Nmax+(1-α)P
(1)
式中,α為調(diào)節(jié)區(qū)域服務器中任務線程池和數(shù)據(jù)庫連接池使用率的權重.通常區(qū)域服務器會出現(xiàn)等待連接的情況,而數(shù)據(jù)庫連接池由于速度較快,常常處于等待狀態(tài),所以α的值一般大于0.5,即優(yōu)先考慮服務器連接池的使用率.
(2)
式中:t為數(shù)據(jù)包裹的編號;Tj為系統(tǒng)中第j臺服務站點;Bj為第j臺區(qū)域服務器的實時負載.
從式(2)可知,如果某個服務站點向存儲服務器發(fā)送連接請求,系統(tǒng)需要先判斷該站點屬于哪個區(qū)域服務器的管轄范圍.如果該區(qū)域服務器處于正常運行狀態(tài),沒有達到臨界負載,則選擇該區(qū)域服務器進行連接處理;如果該區(qū)域服務器已經(jīng)飽和,負載能力已經(jīng)達到臨界值,則選擇剩下區(qū)域服務器中負載情況最為良好的一臺進行連接轉發(fā).
由于分流服務器的主要功能在于分流和轉發(fā),幾乎不對數(shù)據(jù)做任何處理,因此分流服務器軟件在運行時僅需要消耗較低的CPU資源,但是需要大量的網(wǎng)絡資源和文件描述符資源,而網(wǎng)絡資源和文件描述符資源均受限于操作系統(tǒng)的約束,存在上限.因此需要合理地選擇測試方案和測試系統(tǒng).該測試系統(tǒng)的結構如圖4所示.它包括一臺測試服務器、多臺測試客戶機,并且它們被置于同一個局域網(wǎng)中[6-7].
圖4 測試系統(tǒng)結構
測試客戶機上的測試程序模擬公共自行車站點工控機的功能,向安裝在測試服務器上的分流服務器軟件發(fā)起連接請求,建立網(wǎng)絡連接并傳送一定長度的數(shù)據(jù),然后關閉網(wǎng)絡連接.
在模擬測試環(huán)境下,測試客戶機不可能太多,因此需要在一臺測試客戶機上模擬運行多個站點的數(shù)據(jù)請求.在測試程序開發(fā)過程中使用了多線程技術,一個線程代表一臺站點機器.由于大部分操作系統(tǒng)將網(wǎng)絡連接的并發(fā)數(shù)限制為1 024,因此一臺測試客戶機上的測試程序在默認條件下可創(chuàng)建1 000個虛擬站點(也可更改配置模擬更多站點).當需要更多測試客戶機時可以動態(tài)地接入更多計算機.
實驗中服務器通過WIFI與實驗室路由器連接,測試客戶機通過有線或無線的方式與同一路由器連接.測試用服務器配置為Intel Core i7-470HQ CPU @2.5 GHz,16 G內(nèi)存,64位Windows操作系統(tǒng).所選計算機和操作系統(tǒng)均為普通的桌面計算機和桌面操作系統(tǒng).存儲服務器程序采用Java編寫,在CMD(命令提示符)程序中運行,并實時輸出過程數(shù)據(jù).
最終測試結果如圖5所示.從圖5可以看出,服務器在滿負荷情況下會出現(xiàn)少許連接失敗的情況.但在實際測試的過程中,服務器未到達滿負載的時候連接成功率是100%,只有在極端情況下才會出現(xiàn)丟包的現(xiàn)象.
圖5 測試結果截圖
表1所示為具體的測試結果.其中服務器平均每分鐘處理連接數(shù)為16 138,這一速率對于存儲服務來說已綽綽有余.目前杭州市的公共自行車系統(tǒng)大約有3 000多個站點,每個站點平均每5 min發(fā)起一次請求,此系統(tǒng)完全能夠勝任高峰期的數(shù)據(jù)存儲任務.
表1 具體測試結果
本文提出的公共自行車數(shù)據(jù)分流和存儲系統(tǒng),經(jīng)過需求調(diào)研、設計開發(fā)和實驗測試,最終證明可以有效緩解公共自行車系統(tǒng)在數(shù)據(jù)存儲方面的困難,實現(xiàn)了數(shù)據(jù)的分區(qū)轉發(fā)和動態(tài)存儲.下一階段將著重研究存儲系統(tǒng)的備份系統(tǒng)和異常處理系統(tǒng),進一步提高系統(tǒng)的安全性和實用性.
參考文獻:
[1] Fishman E, Washington S, Haworth N,et al.Factors influencing bike share membership: An analysis of melbourne and brisbane[J]. Transportation Research Part A,2015,71:17-30.
[2] 周瑩蓮,劉 甫.服務器負載均衡技術研究[J].計算機與數(shù)字工程,2010,38(4):11-14.
[3] 李 坤,王百杰.服務器集群負載均衡技術研究及算法比較[J].計算機與現(xiàn)代化,2009(8):7-10.
[4] 田紹亮,左 明,吳紹偉.一種改進的基于動態(tài)反饋的負載均衡算法[J].計算機工程與設計,2007,28(3):572-573.
[5] 龔 梅,王 鵬,吳 躍.一種集群系統(tǒng)的透明動態(tài)反饋負載均衡算法[J].計算機應用,2007,27(11):2662-2665.
[6] 李志崢,楊社堂.基于B/S結構下的軟件系統(tǒng)測試研究[J].科技情報開發(fā)與經(jīng)濟,2006,16(7):232-234,251.
[7] 武海平,蔣東興,程志銳,等.Web服務器通用性能測試系統(tǒng)的設計與實現(xiàn)[J].小型微型計算機系統(tǒng),2003,24(2):188-190.