彭好佑,符天,楊登攀,傅翠玉,姚堅
(海南軟件職業技術學院,海南 瓊海 571400)
隨著信息技術的高速發展,互聯網用戶也得到巨大的增長,爆發式的高并發訪問請求給單一的服務器帶來嚴峻的挑戰,準確及時地響應高并發的訪問請求,是云計算分布式系統一個重要的研究熱點。架構相應的云計算分布式服務系統并實現高質量的負載均衡,是提高云計算服務的響應質量重要方式之一。
負載均衡是云計算分布式應用系統中最核心的技術之一。云計算分布式系統負載均衡最主要目的是通過相應分發策略,將用戶的并發請求通過分配策略平均分配給云計算的服務節點,使服務節點的平均請求響應時間最少,吞吐量最大,資源得到最充分的利用,避免某服務節點過載的目的[1]。在云計算分布式系統中,如果只是單一增加服務器數量,不采用適應負載均衡技術,將會導致有些服務屬于超負載運轉狀態,甚至會出現系統崩潰,而有些服務器卻處于空閑的狀態,影響云計算分布式系統服務質量,用戶體驗較差,系統資源利用率較低。因此,負載均衡算法的轉發策略影響整個云計算分布式系統的服務質量,采用合適的負載均衡器是云計算分布式系統考慮核心問題。Nginx是一個高性能的基于七層負載均衡的反向代理Web 服務器,具有穩定強、高并發、低消耗、安全性高,配置簡單靈活的特點[2],比較適合作為云計算分布式系統的負載均衡器。
本論文通過對負載均衡算法進行研究分析,采用Nginx 負載均衡器高響應并發請求,設計并搭建云計算分布式系統和監控模型,在高并發訪問中實現負載均衡,提高云計算分布式系統的可靠性和穩定性。
負載均衡算法是負載均衡器的核心部分,負載均衡器根據負載均衡算法將用戶并發請求平均分配到不同的服務器,在有限的系統資源中,實現資源利用的最大化。
目前常見的負載均衡算法主要有:
1) 硬件負載均衡。從專門的硬件設備上實現負載均衡功能[3],與系統無關,該設備具有負載均衡能力強,能使整個分布式系統達到最佳的性能,但缺點是設備價格昂貴,成本高。
2) 軟件負載均衡。將軟件安裝某硬件上作為負載均衡器[4],通過軟件來實現系統性能達到最佳的效果,軟件負載均衡器優點是配置靈活,具有各種請求調度算法,成本比較廉價。缺點是安裝和運行負載均衡軟件需要消耗計算機系統的額外開銷,很容易成為系統的性能瓶頸。
Nginx 基于軟件負載均衡算法,其負載均衡策略主要分兩種:內置負載均衡策略和擴展負載均衡策略。內置的負載均衡算法主要有:加權算法、輪詢算法、IP_hash 算法、fare 和url_hash 算法。外置的算法是根據需求,開發人員自己編寫的負載均衡算法。
1) 輪詢算法
該算法根據預先設定好的某種固定順序,按順序周期響應服務請求,當負載均衡器收到用戶請求后,按照預先制定輪詢分配方案,當一個周期結束,按原來固定順序開始新的周期分配給不同的服務節點。
2) 加權輪詢算法
加權輪詢算法根據設定好的權重,根據服務節點權重的大小,選擇權重最大的節點,選中該節點后,該節點的權重自動減1,并重新進行排序,重復以上步驟,根據權重來分發請求到不同的服務節點中,權重weight 和訪問比率成正比,用于后端服務器性能不均的情況。
3) IP hash算法
根據hash 算法將請求訪問服務器的IP 放入一張hash 表中[5],即根據IP 地址進行hash 散列算法找到其相應的后端服務器,把客戶端的請求分配該服務器。該算法主要優點是相同IP 地址將被分配到同一臺后端服務器,這種算法用于有狀態session 會話應用場景[6]。
4) url_hash 算法
按訪問url 的hash 結果來分配請求,使每個url 定向到同一個后端服務器,這種算法在后端服務器為緩存時比較有效。
5) fair 算法
按后端服務器的響應時間來分配請求,響應時間短的服務器優先分配[5]。這種算法適用于對訪問性能要求較高的業務應用,是一種更為智能的負載均衡算法。
云計算分布式系統架構的設計方案如圖1 所示,采用Nginx 中間件作為負載均衡器,實現云計算分布式系統在高并發訪問請求中負載均衡。Nginx負載均衡器通過的負載均衡算法把客戶端的用戶請求分配給適合后端Web服務器,后端Web服務器響應用戶的請求,把請求結果返回客戶端用戶,實現負載均衡。在該架構中,監控服務器定時收集后端Web服務器和Nginx負載均衡器性能信息,監控其運行狀態、負載情況,超過設定負載可發出警告信息,便于及時發現問題和維護。

圖1 云計算分布式系統架構
監控系統的設計。Prometheus是一款開源的監控系統,具備對Kubernetes管理的容器云的監控功能,可對容器云上的Node物理節點、應用容器、Kubernetes集群資源、容器應用運行狀態進行動態發現、監控和智能告警[7]。Grafana是一個開源的度量分析和可視化工具,可將采集的數據進行分析和查詢,最后實現可視化的展示和過載報警[8]。如圖2所示,云計算分布式系統監控方案采用Prometheus和Grafana 建立監控系統,分為數據收集、數據提取和數據展示三部分。在數據收集端的Web服務器中采用Node_exporter 監控工具,將被采集的數據信息通過HTTP服務的方式發給監控服務器Prometheus Server。在數據提取模塊,監控服務器Prometheus Server 負責獲取、查詢和保存被監控端的信息,將收集到監控端的數據保存到時序數據庫(Time Series Database,TSDB) 。數據展示端通過Grafana軟件實現可視化業務系統監控展示和過載警告信息的輸出。

圖2 監控系統模型
云計算分布式系統仿真平臺搭建需求如表1 所示,其中4 臺PC 機都在VMware Workstation 部署centos 7.6 操作系統,負載均衡采用Nginx實現,Web01和Web02 是部署PHP 和MySQL 的Web 服務器。客戶端為Win 10 操作系統PC 機,采用Apache Bench 工具模擬高并發訪問請求,測試云計算分布式系統性能,這5臺PC 通過網線連接在同一個交換機上。Prometheus Server實時采集Web01、Web02和Nginx負載均衡器的運行信息和負載情況,為云計算分布式系統的性能分析提供依據。

表1 10組并發總數4000個并發數500個高并發訪問請求測試
Web01 和Web02 中安裝Nginx 和MySQL,在Web01 和Web02 中修改nginx.conf,將Nginx 關聯PHP服務,完成的Web 服務器搭建。編寫測試腳本test.php,查詢數據庫test 中的mobile 表中數據,并把查詢到的數據返回到Web頁面。
負載均衡器采用加權算法,根據服務器性能內存、CPU 等情況分配相應的權重,Web01 設置權重值為1,Web02 設置權重值為2。Nginx 負載均衡器當檢測到Web服務器連接異常時,在timeout周期內,Nginx將請求發送給可用的服務節點,在Nginx 負載均衡器修改配置代碼:
1) node_exporter的安裝
Web01、Web02 和Nginx 負載均衡器中安裝Node_exporter 組件工具,并啟動node_exporter 收集服務器信息。
2) 在監控服務器中安裝prometheus server,在Prometheus.yml 文件中,增加需要抓取的節點的信息,啟動prometheus server 抓取Web01、Web02 和Nginx 負載均衡器運行信息。
修改Prometheus.yml,增加以下代碼
3) 安裝和啟動Grafana 服務,通過http://192.168.40.13:3000 登錄Grafana,加載數據源,加載Dashboard監控模塊,查看Web01、Web02和nginx負載均衡器運行信息。
客戶端使用Apache 的Apache Bench 工具向服務器端發送高并發連接訪問請求,發送請求總是分別4000、4500、5000、5500、6000、6500、7000、7500、8000個高并發請求,同時并發數500 個。對單一服務器Web01 提供請求響應,當在并發總數是5000 個時,開始出現丟包現象,丟包數為2個;而云計算分布式系統在4 000~8 000 個的高并發訪問時,并無丟包情況。如圖3 所示,單獨服務器Web01 響應高并發請求時,隨著請求總數的增加,CPU 的使用率越來越高,增長較快。而云計算分布式系統中Web01 和Web02 同時響應高并發請求,其CPU使用率較低,且增長較緩慢,實現了負載均衡。

圖3 高并發請求響應時CPU使用率
并發請求連接總數分別為2100、2400、2700、3000、3300、3600、3900、4200、4500高并發訪問,并發連接500 個,模擬500 用戶在線同時HTTP 訪問,統計Web01和Web02 的TCP連接數。實驗結果如圖4和圖5所示,經過Nginx 進行負載均衡后, Web01和Web02的TCP連接比例基本是1:2,實驗表明根據后端服務器的性能實現加權輪詢算法分配策略的負載均衡。

表2 9組高并發數請求Web01和Web02的TCP_tw連接數
本文根據云計算分布式系統在高并發訪問請求中存在的負載不均衡、響應速度下降的問題,對負載均衡算法進行研究,設計云計算分布式系統架構,采用Nginx 負載均衡器架構云計算分布式系統和采用Prometheus和Grafana建立監控系統,監控后端服務器運行情況和超載預警。最后,對云計算分布式系統進行高并發仿真測試,實驗表明該云計算分布式系統比單一的服務器系統有較高的可靠性,較低的系統資源使用率,實現基于加權輪詢算法的負載均衡。