劉汪洋, 林 菲, 馬曉婷
(杭州電子科技大學(xué) 計算機(jī)學(xué)院 城市計算與大數(shù)據(jù)實驗室,浙江 杭州 310018)
公共自行車系統(tǒng)的用戶量較大,對系統(tǒng)的性能要求偏高,如何構(gòu)建穩(wěn)定性強(qiáng)、可用性高的系統(tǒng)是當(dāng)前公共自行車可視化分析系統(tǒng)面臨的一個挑戰(zhàn)。目前公共自行車可視化系統(tǒng)主要著眼于公共自行車數(shù)據(jù)的可視化分析[1,2],對公共自行車可視化系統(tǒng)的性能和可用性研究較少。
近年來隨著客戶機(jī)數(shù)量和密集性任務(wù)的增加,單個Web服務(wù)器受處理能力的限制,成為訪問的一個新瓶頸。為了解決這個問題,Web服務(wù)器集群采用負(fù)載均衡策略[3],將請求分配給集群中某臺服務(wù)器進(jìn)行處理,通過數(shù)據(jù)冗余和軟件檢測等方法實現(xiàn)系統(tǒng)的高可用性[4]。負(fù)載均衡和讀寫分離以及緩存等技術(shù)有助于解決大型系統(tǒng)的性能瓶頸,在不同領(lǐng)域得到廣泛應(yīng)用。周瑩蓮等人[5]對負(fù)載均衡的概念和常見算法進(jìn)行了研究,并對負(fù)載均衡的發(fā)展進(jìn)行了展望。讀寫分離可以極大提升數(shù)據(jù)的讀取性能以及整個系統(tǒng)的業(yè)務(wù)承載能力[5]。宋滸等人[6]將讀寫分離技術(shù)應(yīng)用在運(yùn)行支撐系統(tǒng)中,極大地提升了數(shù)據(jù)讀取性能以及整個系統(tǒng)的業(yè)務(wù)承載能力。李軍等人[7]利用負(fù)載均衡和MySQL主從復(fù)制讀寫分離等技術(shù)構(gòu)建高可用的云盤系統(tǒng)。陳巖等人[8]采用模塊化設(shè)計思想和云平臺架構(gòu)設(shè)計出城市綠地監(jiān)測系統(tǒng)。劉桂龍等人[9]設(shè)計了一種基于Android的跨移動端和電腦端的架構(gòu)。
結(jié)合上述設(shè)計思想,本文設(shè)計出一種服務(wù)器集群架構(gòu)以提高公共自行車可視化系統(tǒng)的性能和可用性。
如圖1,公共自行車可視化系統(tǒng)整體架構(gòu)主要包括4個部分:數(shù)據(jù)層、算法層、業(yè)務(wù)邏輯層和表示層。數(shù)據(jù)層主要包括杭州公共自行車站點基本信息和公共自行車租還記錄。算法層綜合考慮地理位置和租還記錄構(gòu)建距離矩陣,采用Affinity Propagation 算法[10]對站點進(jìn)行區(qū)域劃分;采用新型遺傳模擬退火算法[11]對區(qū)域間調(diào)度站點的公共自行車進(jìn)行調(diào)度;采用XGBoost回歸模型[12]對站點和區(qū)域的租還流量進(jìn)行預(yù)測。業(yè)務(wù)邏輯層采用Spring MVC和Python將業(yè)務(wù)邏輯封裝成接口,提供給展示層調(diào)用。展示層由Web可視化端和普通用戶移動端APP兩部分構(gòu)成,其中Web可視化端采用Echarts結(jié)合百度地圖API以及Bootstrap前端框架開發(fā),移動端采用React Native實現(xiàn)跨平臺開發(fā)。
圖1 公共自行車可視化系統(tǒng)整體架構(gòu)
該系統(tǒng)的服務(wù)端架構(gòu)由 Web服務(wù)器集群、數(shù)據(jù)庫集群、共享Session服務(wù)器和緩存服務(wù)器等部分構(gòu)成,如圖2所示??蛻舳撕拓?fù)載均衡服務(wù)器之間交互,負(fù)載均衡服務(wù)器根據(jù)負(fù)載均衡策略,將大量請求有效地分發(fā)到不同的Web服務(wù)器上,增加了系統(tǒng)吞吐量,提高了系統(tǒng)的靈活性和可用性。由于本系統(tǒng)Web服務(wù)器的性能有差異,故本系統(tǒng)的負(fù)載均衡策略采用了經(jīng)典的加權(quán)輪詢算法,給配置高、負(fù)載低的機(jī)器配置更高的權(quán)重,讓其處理更多的請求;給配置低、負(fù)載高的機(jī)器分配較低的權(quán)重,降低系統(tǒng)負(fù)載。并選取一臺具有較高性能服務(wù)器作為備份服務(wù)器,該服務(wù)器會在其他節(jié)點全部無法使用時自動啟用,實現(xiàn)服務(wù)器高可用性。
圖2 公共自行車可視化系統(tǒng)集群架構(gòu)
Web服務(wù)器采用集群架構(gòu),就要考慮不同服務(wù)器之間的Session共享問題。系統(tǒng)采用高速緩存框架Memcache搭建共享Session服務(wù),以實現(xiàn)Web服務(wù)器集群中不同服務(wù)器之間的Session一致性。本系統(tǒng)對公共自行車數(shù)據(jù)讀功能需求遠(yuǎn)遠(yuǎn)大于寫功能需求,因此,數(shù)據(jù)庫集群采用主從復(fù)制、讀/寫分離的方式減輕主庫的讀請求的壓力。選取一臺數(shù)據(jù)庫服務(wù)器作為主庫,其他三臺服務(wù)器作為從庫,主庫主要負(fù)責(zé)處理寫業(yè)務(wù),從庫負(fù)責(zé)讀業(yè)務(wù)??紤]到Redis緩存架構(gòu)讀/寫速度非??欤С重S富的數(shù)據(jù)類型、支持事務(wù)等特性,因此本系統(tǒng)選取Redis作為緩存框架,數(shù)據(jù)查詢時,如果緩存中有相關(guān)數(shù)據(jù)就可以優(yōu)先從緩存中讀取,提高查詢速度。本系統(tǒng)對Web前端性能也進(jìn)行了優(yōu)化,對JavaScript和CSS文件的體積采用壓縮工具進(jìn)行了壓縮,靜態(tài)資源采用CDN加速,公共自行車站點等部分短期不變的少量數(shù)據(jù)在localStorage中進(jìn)行緩存,以此來提高前端頁面的加載速度。
本系統(tǒng)主要設(shè)計目的是為公共自行車管理者提供站點和區(qū)域視角的可視化系統(tǒng);為普通用戶提供便捷的站點信息查詢和租還等功能。如圖3所示,本系統(tǒng)原始數(shù)據(jù)包括站點信息和用戶租還記錄。在數(shù)據(jù)預(yù)處理階段首先對原始數(shù)據(jù)進(jìn)行數(shù)據(jù)清洗,然后對數(shù)據(jù)進(jìn)行編碼。根據(jù)公共自行車管理員和普通用戶兩種視角,分別設(shè)計了針對公共自行車管理員的可視化系統(tǒng)和普通用戶的跨平臺APP。
圖3 公共自行車可視化系統(tǒng)工作流程
圖3(a)展示了公共自行車站點分布情況。通過不同顏色的標(biāo)注將公共自行車站點標(biāo)記在地圖上。以紅色標(biāo)注表示該站點無可借公共自行車;藍(lán)色標(biāo)注表示該站點無可還車位;綠色標(biāo)注表示該站點既可借車也可以還車;灰色標(biāo)注表示該站點當(dāng)前停止服務(wù)。當(dāng)公共自行車管理者將鼠標(biāo)停留在站點標(biāo)注上時,顯示該站點的自行車樁位數(shù)、可借車數(shù)、可還車位數(shù)、可借車數(shù)和總樁位數(shù)比例等信息。當(dāng)公共自行車管理者用鼠標(biāo)點擊站點標(biāo)注時,站點的短期和長期租還預(yù)測信息將通過折線圖直觀展現(xiàn)。
圖3(b)展示根據(jù)站點地理位置和租還記錄作為主要因素的公共自行車聚類結(jié)果。不同區(qū)域用不同顏色圖形進(jìn)行標(biāo)識。當(dāng)公共自行車管理者將鼠標(biāo)停留在區(qū)域上時,區(qū)域的基本信息和調(diào)度中心站點名稱和位置將通過信息窗顯示出來。當(dāng)公共自行車管理者用鼠標(biāo)點擊區(qū)域時,區(qū)域的短時和長時預(yù)測信息通過折線圖展示出來。
圖3(c), 系統(tǒng)通過動畫方式為公共自行車管理者提供可視化的調(diào)度方案。該視圖中調(diào)度結(jié)點為區(qū)域視圖中每個區(qū)域中的調(diào)度站點。當(dāng)公共自行車管理者將鼠標(biāo)停留在某段線路上,可以查看該段線路從前一個調(diào)度站點到下一個調(diào)度站點需要移入或者移除車輛數(shù)。
圖3(d),系統(tǒng)通過動畫方式根據(jù)區(qū)域間的公共自行車騎行狀況,為公共自行車管理者提供可視化信息展示功能。不同顏色表示跨區(qū)域騎行數(shù)量的不同,顏色越深表示跨區(qū)域騎行數(shù)量越大。公共自行車管理者可以實時掌握區(qū)域間公共自行車的用戶騎行的情況。
如圖3(e)所示,將地圖和可視化圖形結(jié)合在一起。市場調(diào)研發(fā)現(xiàn)當(dāng)前公共自行車系統(tǒng)普通用戶APP主要提供公共自行車站點自行車和樁位情況的實時查詢功能。本系統(tǒng)不僅為普通用戶提供站點的實時信息查詢和路線推薦等功能,且提供了站點公共自行車的短期和的長期預(yù)測的功能。普通用戶可以通過此APP查看待租和待還車公共自行車站點的短期和長期預(yù)測信息。該功能能夠避免公共自行車用戶到達(dá)公共自行車站點時,該站點無公共自行車可借或無樁位可還的狀況。
本系統(tǒng)主要采用Java和Python兩種編程語言編寫。軟件環(huán)境為:服務(wù)端為Linux衍生版本Ubuntu 4.04版本,客戶端為Windows 10系統(tǒng),Google瀏覽器。硬件環(huán)境客戶端 Lenovo ThinkPad x201i, 服務(wù)端 阿里云服務(wù)器11臺,其中6臺配置為2核/1 GB/1 Mbps,5臺服務(wù)器(包括共享Session服務(wù)器、Redis緩存服務(wù)器和數(shù)據(jù)庫主庫)為2核/2 GB/2 Mbps。網(wǎng)絡(luò)環(huán)境為100 MHz寬帶。
通過阿里性能測試服務(wù)對系統(tǒng)性能進(jìn)行了測試,并根據(jù)測試數(shù)據(jù)生成測試結(jié)果。本系統(tǒng)采用加權(quán)輪詢算法,由圖4可知,并發(fā)量優(yōu)于其他幾種負(fù)載均衡算法。
圖4 不同負(fù)載均衡算法并發(fā)數(shù)對比
從圖5性能對比可以看出:采用服務(wù)器集群架構(gòu)的公共自行車可視化系統(tǒng)的系統(tǒng)性能重要指標(biāo):TPS、并發(fā)數(shù)和請求成功率均更優(yōu),服務(wù)器平均中央處理器(central processing unit,CPU)占用率由96 %降低到75 %,平均響應(yīng)時間也由812 ms降低為459 ms。充分說明負(fù)載均衡和讀/寫分離等技術(shù)的運(yùn)用提高了TPS、并發(fā)數(shù)以及平均請求成功率。前端頁面性能優(yōu)化和服務(wù)端緩存技術(shù)的運(yùn)用,縮小了平均頁面加載時間,使得系統(tǒng)運(yùn)行更加流暢。
圖5 性能對比
本文將集群架構(gòu)運(yùn)用到公共自行車可視化系統(tǒng)中,通過負(fù)載均衡、讀/寫分離和緩存機(jī)制提高了系統(tǒng)的響應(yīng)速度、穩(wěn)定性和可用性。但系統(tǒng)可視化組件不夠豐富,系統(tǒng)也存在一定局限性。后續(xù)將為系統(tǒng)增加更豐富的可視化組件和圖形,探究公共自行車數(shù)據(jù)背后的規(guī)律,為公共自行車系統(tǒng)管理者提供更科學(xué)的參考方案。