劉文博,譚裴,汪寧
(中國移動通信集團設(shè)計院有限公司安徽分公司,合肥 230041)
在無線基站智能查勘系統(tǒng)的大范圍推廣應(yīng)用過程中,LTE和NB-IoT網(wǎng)絡(luò)建設(shè)規(guī)模的日益增大,系統(tǒng)的訪問量急劇增加。由于服務(wù)器硬件資源的限制,系統(tǒng)處理能力遇到了瓶頸,在用戶訪問系統(tǒng)時出現(xiàn)頁面反應(yīng)慢、數(shù)據(jù)處理效率低下的現(xiàn)象?;谝陨蠁栴},本文通過對數(shù)據(jù)庫進行分布式設(shè)計,對Web服務(wù)進行負載均衡部署,在應(yīng)用層對不同數(shù)據(jù)進行源整合,提出了一套對從數(shù)據(jù)到應(yīng)用的整體負載均衡方案。經(jīng)過壓力測試證明,本方案能夠有效提高系統(tǒng)的承載和處理能力。
從拆分規(guī)則上來說,數(shù)據(jù)拆分可分成兩種拆分的模式。一種是將不同的表分別拆分到不同的數(shù)據(jù)庫上面,這種拆分被稱作數(shù)據(jù)庫垂直拆分;第二種是根據(jù)表中的不同邏輯關(guān)系, 將一張表中的數(shù)據(jù)按照一定的條件拆分到不同的和數(shù)據(jù)庫上面,這種拆分叫做水平拆分。
2.1.1 垂直拆分
數(shù)據(jù)庫是由多個數(shù)據(jù)塊組成,我們將這些數(shù)據(jù)塊垂直拆開并分散到多個數(shù)據(jù)庫上面。具體就是將一個屬性較多,一行數(shù)據(jù)較大的表,把不同的屬性拆分到不同的表中,以降低單庫(表)大小,達到提升性能的目的的方法。垂直切分后, 各個庫(表)的結(jié)果不同, 每個庫(表)的屬性至少有一列交集, 所有庫(表)的并集是全量數(shù)據(jù)。
一個應(yīng)用系統(tǒng)的整體功能是由多個功能模塊組成,數(shù)據(jù)庫中的一張或者多張表對應(yīng)到每個功能模塊需要的數(shù)據(jù)。不同的數(shù)據(jù)庫存放不同功能模塊的數(shù)據(jù),這種方式可以避免存在跨數(shù)據(jù)庫連接。垂直拆分的架構(gòu)如圖1所示。
垂直拆分的優(yōu)點是數(shù)據(jù)庫的拆分簡單、規(guī)則明確、系統(tǒng)模塊清晰、易整合、數(shù)據(jù)維護簡單。
圖1 垂直拆分
2.1.2 水平拆分
水平拆分是將某一張訪問頻繁的表按照某個字段的規(guī)則來分散在多張表中,每個表中都包含了部分?jǐn)?shù)據(jù)。數(shù)據(jù)的水平拆分是將表中的部分行拆分到另外一個數(shù)據(jù)庫中,而其他行拆分到其他數(shù)據(jù)庫中。拆分需要按照特定的規(guī)則來進行,這主要是為了讓我們能夠輕易的判定各行數(shù)據(jù)存放在哪一個數(shù)據(jù)庫中。如根據(jù)不同用戶群的編碼或者用戶工號等進行拆分?;谟脩舻腎D進行數(shù)據(jù)水平拆分,如圖2 所示。
圖2 水平拆分
水平拆分的優(yōu)點在于可以在數(shù)據(jù)庫端完成表的關(guān)聯(lián),不存在高負荷和大數(shù)據(jù)量的表,事務(wù)處理簡單。
2.1.3 聯(lián)合拆分
在實際使用過程中,系統(tǒng)的業(yè)務(wù)邏輯經(jīng)常會較為復(fù)雜,系統(tǒng)負荷高,不能通過單一的數(shù)據(jù)拆分方式實現(xiàn),需要將兩種拆分方法進行結(jié)合使用。
聯(lián)合拆分的優(yōu)點為可以將垂直和水平拆分的優(yōu)點進行結(jié)合,最大化提升系統(tǒng)的擴展性。
本方案采用的是聯(lián)合拆分的方法,將單一數(shù)據(jù)庫的數(shù)據(jù)存放在不同的數(shù)據(jù)庫中。具體來說,無線基站智能查勘系統(tǒng)包括勘察數(shù)據(jù)、查詢統(tǒng)計、 流程審核、人員管理、 GIS展示等子系統(tǒng),各個子系統(tǒng)的功能模塊耦合度低。首先把各個業(yè)務(wù)模塊拆分,拆分后的業(yè)務(wù)可以形成獨立子系統(tǒng)。具體做法就是把不同用戶群的基本信息、統(tǒng)計信息、人員管理等子系統(tǒng)的數(shù)據(jù)拆分并存儲在多個服務(wù)器的數(shù)據(jù)庫上并通過中間數(shù)據(jù)層對不同數(shù)據(jù)庫的數(shù)據(jù)進行整合,整合后的分布式系統(tǒng)在用戶使用體驗上與拆分前的系統(tǒng)相同。其次利用讀寫分離以及數(shù)據(jù)庫的分庫分表解決數(shù)據(jù)庫高頻讀寫的性能問題。數(shù)據(jù)拆分的過程其實就是利用特定的手段,將存放在一個數(shù)據(jù)庫中的數(shù)據(jù)進行分離并且存儲到多個云主機上從而減輕單個服務(wù)器的負載。除此之外,數(shù)據(jù)拆分還可以提高系統(tǒng)的穩(wěn)定性,例如突然單臺設(shè)備崩潰的情況只會導(dǎo)致總體數(shù)據(jù)的某部分不能正常的使用,其他部分的數(shù)據(jù)是安全的。
對于并發(fā)訪問量大、單臺服務(wù)器處理能力一般導(dǎo)致的卡頓、宕機的問題,我們采用多服務(wù)器集群技術(shù)來應(yīng)對,核心就是負載均衡。負載均衡技術(shù)能夠?qū)⒋罅坎l(fā)訪問請求較為合理地均分到集群內(nèi)的各服務(wù)器進行處理,從而能夠避免單個服務(wù)器訪問數(shù)據(jù)量過大的情況,同時可以讓各個服務(wù)器的資源都能夠得到均衡使用。負載均衡目前主要有硬件負載均衡和軟件負載均衡兩種技術(shù),由于硬件的成本比較高昂,我們采用Nginx負載均衡的技術(shù)。Nginx是一款輕量級的Web服務(wù)器/反向代理服務(wù)器及電子郵件(IMAP/POP3)代理服務(wù)器,并在一個BSD-like協(xié)議下發(fā)行,其特點是占有內(nèi)存少,并發(fā)能力強,并已在較多門戶網(wǎng)站中成功應(yīng)用。
如圖3所示,我們可以將服務(wù)1部署到A、B兩臺不同的云主機上, 對服務(wù)2也可以做類似的部署。這樣部署既能夠有效的避免由于云主機故障導(dǎo)致的服務(wù)中斷,又能夠有效地利用了云主機的資源。
圖3 負載均衡
在方案應(yīng)用后,我們采用了專門的測試工具對改進后的系統(tǒng)性能繼續(xù)綜合能力測試。
在完成數(shù)據(jù)庫分庫,并進行Nginx負載均衡后,我們測試采用的軟件是LoadRunner。LoadRunner是一種預(yù)測系統(tǒng)行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發(fā)負載及實時性能監(jiān)測的方式來確認和查找問題,LoadRunner能夠?qū)φ麄€企業(yè)架構(gòu)進行測試。企業(yè)使用LoadRunner能最大限度地縮短測試時間,優(yōu)化性能和加速應(yīng)用系統(tǒng)的發(fā)布周期。LoadRunner可適用于各種體系架構(gòu)的自動負載測試,能預(yù)測系統(tǒng)行為并評估系統(tǒng)性能。
本次測試記錄和分析了并發(fā)用戶數(shù)量、業(yè)務(wù)響應(yīng)的時間、服務(wù)器資源利用率3個具有代表性的參數(shù)。
3.2.1 并發(fā)用戶
指模擬的所有用戶在同一時刻做同一事情或操作,這種操作主要針對同樣類型的業(yè)務(wù)或者所有用戶進行同樣的操作,主要目的是測試系統(tǒng)對于并發(fā)操作的處理能力。
3.2.2 響應(yīng)時間
響應(yīng)時間主要是從用戶的角度出發(fā),分析操作的時間延遲。對于用戶來說,只能通過感覺時間的快慢來評價系統(tǒng)性能的優(yōu)劣,并發(fā)訪問量等其他因素并不是他關(guān)心的重點。從某種程度上說,系統(tǒng)的平均響應(yīng)時間的快慢決定了Web應(yīng)用系統(tǒng)的性能好壞。通常情況下,響應(yīng)時間越短說明系統(tǒng)應(yīng)對負載的能力越強。訪問的用戶數(shù)越多,相應(yīng)的系統(tǒng)響應(yīng)時間就會越慢。
3.2.3 資源利用率
資源利用率只是針對系統(tǒng)資源的使用程度,是測試和分析系統(tǒng)瓶頸所在以及改善系統(tǒng)性能的重要依據(jù)。
通過測試分析后,將分析結(jié)果與實施本方案前的數(shù)據(jù)進行對比如圖4所示。
圖4 測試結(jié)果
3.3.1 并發(fā)用戶
通過數(shù)據(jù)庫拆分以及負載均衡的優(yōu)化后,當(dāng)并發(fā)用戶達到13 430個的時候出現(xiàn)第一個訪問錯誤,隨著虛擬用戶并發(fā)訪問量的進一步增加,錯誤數(shù)量的增加較少,瀏覽器訪問網(wǎng)站頁面速度有所減慢,頁面可以正常登陸,數(shù)據(jù)庫運行正常。
3.3.2 系統(tǒng)平均響應(yīng)時間
系統(tǒng)響應(yīng)時間和優(yōu)化前相比減少,減少時間平均在2 s左右。
3.3.3 系統(tǒng)資源
通過遠程登錄查看云主機的資源,發(fā)現(xiàn)CPU利用率平均約56%,內(nèi)存利用率平均約55%,跟優(yōu)化前沒有明顯區(qū)別。與優(yōu)化前相比,服務(wù)器在增加了并發(fā)訪問量的情況下,減少了系統(tǒng)響應(yīng)時間,提高了 Web服務(wù)器的資源的利用率。
本文綜合應(yīng)用數(shù)據(jù)庫分布式設(shè)計以及服務(wù)器負載均衡技術(shù),解決了高并發(fā)訪問量、高頻讀寫數(shù)據(jù)庫表以及單臺服務(wù)器硬件能力一般帶來的訪問變慢、宕機的問題,減少了系統(tǒng)平均響應(yīng)時間,提高了系統(tǒng)資源的利用率,同時避免了因單一設(shè)備故障導(dǎo)致的服務(wù)停止的風(fēng)險。