劉文博,譚裴,汪寧
(中國移動通信集團設計院有限公司安徽分公司,合肥 230041)
在無線基站智能查勘系統的大范圍推廣應用過程中,LTE和NB-IoT網絡建設規模的日益增大,系統的訪問量急劇增加。由于服務器硬件資源的限制,系統處理能力遇到了瓶頸,在用戶訪問系統時出現頁面反應慢、數據處理效率低下的現象。基于以上問題,本文通過對數據庫進行分布式設計,對Web服務進行負載均衡部署,在應用層對不同數據進行源整合,提出了一套對從數據到應用的整體負載均衡方案。經過壓力測試證明,本方案能夠有效提高系統的承載和處理能力。
從拆分規則上來說,數據拆分可分成兩種拆分的模式。一種是將不同的表分別拆分到不同的數據庫上面,這種拆分被稱作數據庫垂直拆分;第二種是根據表中的不同邏輯關系, 將一張表中的數據按照一定的條件拆分到不同的和數據庫上面,這種拆分叫做水平拆分。
2.1.1 垂直拆分
數據庫是由多個數據塊組成,我們將這些數據塊垂直拆開并分散到多個數據庫上面。具體就是將一個屬性較多,一行數據較大的表,把不同的屬性拆分到不同的表中,以降低單庫(表)大小,達到提升性能的目的的方法。垂直切分后, 各個庫(表)的結果不同, 每個庫(表)的屬性至少有一列交集, 所有庫(表)的并集是全量數據。
一個應用系統的整體功能是由多個功能模塊組成,數據庫中的一張或者多張表對應到每個功能模塊需要的數據。不同的數據庫存放不同功能模塊的數據,這種方式可以避免存在跨數據庫連接。垂直拆分的架構如圖1所示。
垂直拆分的優點是數據庫的拆分簡單、規則明確、系統模塊清晰、易整合、數據維護簡單。

圖1 垂直拆分
2.1.2 水平拆分
水平拆分是將某一張訪問頻繁的表按照某個字段的規則來分散在多張表中,每個表中都包含了部分數據。數據的水平拆分是將表中的部分行拆分到另外一個數據庫中,而其他行拆分到其他數據庫中。拆分需要按照特定的規則來進行,這主要是為了讓我們能夠輕易的判定各行數據存放在哪一個數據庫中。如根據不同用戶群的編碼或者用戶工號等進行拆分?;谟脩舻腎D進行數據水平拆分,如圖2 所示。

圖2 水平拆分
水平拆分的優點在于可以在數據庫端完成表的關聯,不存在高負荷和大數據量的表,事務處理簡單。
2.1.3 聯合拆分
在實際使用過程中,系統的業務邏輯經常會較為復雜,系統負荷高,不能通過單一的數據拆分方式實現,需要將兩種拆分方法進行結合使用。
聯合拆分的優點為可以將垂直和水平拆分的優點進行結合,最大化提升系統的擴展性。
本方案采用的是聯合拆分的方法,將單一數據庫的數據存放在不同的數據庫中。具體來說,無線基站智能查勘系統包括勘察數據、查詢統計、 流程審核、人員管理、 GIS展示等子系統,各個子系統的功能模塊耦合度低。首先把各個業務模塊拆分,拆分后的業務可以形成獨立子系統。具體做法就是把不同用戶群的基本信息、統計信息、人員管理等子系統的數據拆分并存儲在多個服務器的數據庫上并通過中間數據層對不同數據庫的數據進行整合,整合后的分布式系統在用戶使用體驗上與拆分前的系統相同。其次利用讀寫分離以及數據庫的分庫分表解決數據庫高頻讀寫的性能問題。數據拆分的過程其實就是利用特定的手段,將存放在一個數據庫中的數據進行分離并且存儲到多個云主機上從而減輕單個服務器的負載。除此之外,數據拆分還可以提高系統的穩定性,例如突然單臺設備崩潰的情況只會導致總體數據的某部分不能正常的使用,其他部分的數據是安全的。
對于并發訪問量大、單臺服務器處理能力一般導致的卡頓、宕機的問題,我們采用多服務器集群技術來應對,核心就是負載均衡。負載均衡技術能夠將大量并發訪問請求較為合理地均分到集群內的各服務器進行處理,從而能夠避免單個服務器訪問數據量過大的情況,同時可以讓各個服務器的資源都能夠得到均衡使用。負載均衡目前主要有硬件負載均衡和軟件負載均衡兩種技術,由于硬件的成本比較高昂,我們采用Nginx負載均衡的技術。Nginx是一款輕量級的Web服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like協議下發行,其特點是占有內存少,并發能力強,并已在較多門戶網站中成功應用。
如圖3所示,我們可以將服務1部署到A、B兩臺不同的云主機上, 對服務2也可以做類似的部署。這樣部署既能夠有效的避免由于云主機故障導致的服務中斷,又能夠有效地利用了云主機的資源。

圖3 負載均衡
在方案應用后,我們采用了專門的測試工具對改進后的系統性能繼續綜合能力測試。
在完成數據庫分庫,并進行Nginx負載均衡后,我們測試采用的軟件是LoadRunner。LoadRunner是一種預測系統行為和性能的負載測試工具。通過以模擬上千萬用戶實施并發負載及實時性能監測的方式來確認和查找問題,LoadRunner能夠對整個企業架構進行測試。企業使用LoadRunner能最大限度地縮短測試時間,優化性能和加速應用系統的發布周期。LoadRunner可適用于各種體系架構的自動負載測試,能預測系統行為并評估系統性能。
本次測試記錄和分析了并發用戶數量、業務響應的時間、服務器資源利用率3個具有代表性的參數。
3.2.1 并發用戶
指模擬的所有用戶在同一時刻做同一事情或操作,這種操作主要針對同樣類型的業務或者所有用戶進行同樣的操作,主要目的是測試系統對于并發操作的處理能力。
3.2.2 響應時間
響應時間主要是從用戶的角度出發,分析操作的時間延遲。對于用戶來說,只能通過感覺時間的快慢來評價系統性能的優劣,并發訪問量等其他因素并不是他關心的重點。從某種程度上說,系統的平均響應時間的快慢決定了Web應用系統的性能好壞。通常情況下,響應時間越短說明系統應對負載的能力越強。訪問的用戶數越多,相應的系統響應時間就會越慢。
3.2.3 資源利用率
資源利用率只是針對系統資源的使用程度,是測試和分析系統瓶頸所在以及改善系統性能的重要依據。
通過測試分析后,將分析結果與實施本方案前的數據進行對比如圖4所示。

圖4 測試結果
3.3.1 并發用戶
通過數據庫拆分以及負載均衡的優化后,當并發用戶達到13 430個的時候出現第一個訪問錯誤,隨著虛擬用戶并發訪問量的進一步增加,錯誤數量的增加較少,瀏覽器訪問網站頁面速度有所減慢,頁面可以正常登陸,數據庫運行正常。
3.3.2 系統平均響應時間
系統響應時間和優化前相比減少,減少時間平均在2 s左右。
3.3.3 系統資源
通過遠程登錄查看云主機的資源,發現CPU利用率平均約56%,內存利用率平均約55%,跟優化前沒有明顯區別。與優化前相比,服務器在增加了并發訪問量的情況下,減少了系統響應時間,提高了 Web服務器的資源的利用率。
本文綜合應用數據庫分布式設計以及服務器負載均衡技術,解決了高并發訪問量、高頻讀寫數據庫表以及單臺服務器硬件能力一般帶來的訪問變慢、宕機的問題,減少了系統平均響應時間,提高了系統資源的利用率,同時避免了因單一設備故障導致的服務停止的風險。