張鵬



摘要:互聯(lián)網(wǎng)技術(shù)的逐步成熟使得越來越多的用戶進(jìn)入網(wǎng)絡(luò),享受網(wǎng)絡(luò)給自己生活帶來的便捷。但是,用戶的增多給許多商業(yè)網(wǎng)站提出了新的挑戰(zhàn)。如何在大用戶量訪問網(wǎng)站時(shí),保證網(wǎng)站的流暢度和穩(wěn)定性,成為判斷一個(gè)商業(yè)網(wǎng)站是否成功的顯著標(biāo)志。該文基于SSH框架提出了一種高并發(fā)、高可用網(wǎng)站架構(gòu)以解決上述問題。首先利用SSH技術(shù)構(gòu)建服務(wù)器端,利用集群理念,延伸服務(wù)器數(shù)量,形成服務(wù)器集群。通過Nginx技術(shù)實(shí)現(xiàn)多服務(wù)器間的負(fù)載均衡,減輕大訪問量單一服務(wù)器上的壓力,保證服務(wù)器的高可用性。同時(shí),使用RabbitMQ消息隊(duì)列的異步處理機(jī)制,對(duì)訪問高峰期請(qǐng)求進(jìn)行削峰處理,減少響應(yīng)所需時(shí)間,提高網(wǎng)站高并發(fā)處理能力。
關(guān)鍵詞:負(fù)載均衡;高并發(fā);高可用;消息隊(duì)列
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)27-0100-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
互聯(lián)網(wǎng)技術(shù)日趨成熟帶來了大量用戶的網(wǎng)站訪問需求,高并發(fā)[1]和高可用已經(jīng)成為對(duì)于一個(gè)成熟的商業(yè)網(wǎng)站必備的要求。而以往的單服務(wù)器網(wǎng)站面對(duì)高并發(fā)的情形時(shí),極易導(dǎo)致單位時(shí)間內(nèi)服務(wù)器壓力驟增,既無法及時(shí)響應(yīng)用戶請(qǐng)求,而且容易導(dǎo)致服務(wù)器崩潰,降低系統(tǒng)可用性。面對(duì)以上問題,本系統(tǒng)采用集群理念,延伸服務(wù)器數(shù)量,形成服務(wù)器集群[3],保證在一臺(tái)服務(wù)器宕機(jī)的情況下,仍有其他服務(wù)器可用。并且通過Nginx技術(shù)實(shí)現(xiàn)多服務(wù)器間的負(fù)載均衡[2],實(shí)現(xiàn)網(wǎng)站的高可用性。同時(shí),使用RabbitMQ消息隊(duì)列[4-5]的異步處理機(jī)制,對(duì)訪問高峰期請(qǐng)求進(jìn)行削峰處理,減少響應(yīng)所需時(shí)間,提高網(wǎng)站高并發(fā)處理能力。
2 系統(tǒng)分析與設(shè)計(jì)
網(wǎng)站整體架構(gòu)如圖1所示,當(dāng)網(wǎng)站遭遇高并發(fā)時(shí),大量的用戶請(qǐng)求從瀏覽器端進(jìn)入到后臺(tái)服務(wù)器。此時(shí)Nginx會(huì)根據(jù)服務(wù)器權(quán)重優(yōu)先級(jí)進(jìn)行請(qǐng)求分配,實(shí)現(xiàn)負(fù)載均衡,減輕單服務(wù)器處理壓力。為保證在高并發(fā)時(shí),網(wǎng)站達(dá)到減少服務(wù)器響應(yīng)時(shí)間、增強(qiáng)用戶體驗(yàn)度的目標(biāo),網(wǎng)站架構(gòu)中加入消息隊(duì)列服務(wù)器,通過其異步處理功能,使得網(wǎng)站系統(tǒng)在不影響響應(yīng)速度的同時(shí),利用消息驅(qū)動(dòng)機(jī)制,降低數(shù)據(jù)庫壓力,最終形成一個(gè)高并發(fā)、高可用的網(wǎng)絡(luò)架構(gòu)。
2.1 服務(wù)器的設(shè)計(jì)
服務(wù)器端采用SSH框架技術(shù)進(jìn)行設(shè)計(jì),如圖2所示,采用SSH框架[6-8]進(jìn)行服務(wù)器設(shè)計(jì)的優(yōu)點(diǎn)在于各個(gè)框架可以發(fā)揮各自在Web應(yīng)用各層上的特點(diǎn),互相協(xié)同,實(shí)現(xiàn)“低耦合、高內(nèi)聚”的軟件系統(tǒng)設(shè)計(jì)思想。在JavaEE分層設(shè)計(jì)結(jié)構(gòu)中,Hibernate框架主要負(fù)責(zé)數(shù)據(jù)持久層,進(jìn)行數(shù)據(jù)庫的交互處理工作;Struts框架專注于控制層工作,對(duì)用戶請(qǐng)求響應(yīng)進(jìn)行控制調(diào)度;而Spring框架利用其IOC和AOP技術(shù),貫穿于各層當(dāng)中,負(fù)責(zé)整個(gè)Web項(xiàng)目中類的集中管理,通過IOC容器進(jìn)行各類的實(shí)例化創(chuàng)建工作。并且借助于AOP技術(shù)[9]實(shí)現(xiàn)核心業(yè)務(wù)與輔助業(yè)務(wù)相分離,真正做到各模塊間低耦合的設(shè)計(jì)效果。
2.2 Nginx技術(shù)與服務(wù)器集群的分析與使用
當(dāng)大量的用戶請(qǐng)求從瀏覽器端進(jìn)入到后臺(tái)服務(wù)器時(shí),如圖3所示,Nginx會(huì)根據(jù)服務(wù)器權(quán)重優(yōu)先級(jí)進(jìn)行請(qǐng)求分配,將用戶請(qǐng)求進(jìn)行分流,減輕單位時(shí)間單體服務(wù)器的請(qǐng)求處理壓力,實(shí)現(xiàn)負(fù)載均衡,減輕單服務(wù)器處理壓力。同時(shí),Nginx在處理靜態(tài)文件的吞吐量?jī)?yōu)于tomcat,通過Nginx的反向代理功能,實(shí)現(xiàn)動(dòng)態(tài)資源請(qǐng)求與靜態(tài)資源請(qǐng)求相分離,即諸如css、png.js等靜態(tài)資源交由Nginx處理,而諸如jsp、servlet等動(dòng)態(tài)資源交由tomcat處理,從而達(dá)到動(dòng)靜分離的效果。本網(wǎng)站架構(gòu)充分利用集群理念,延伸服務(wù)器數(shù)量,形成服務(wù)器集群,保證在出現(xiàn)某一個(gè)服務(wù)器宕機(jī)的情況下,能夠?qū)崿F(xiàn)運(yùn)行不斷檔,形成一個(gè)高可用性網(wǎng)站架構(gòu)。
2.3 消息隊(duì)列服務(wù)器的設(shè)計(jì)
當(dāng)傳統(tǒng)的網(wǎng)絡(luò)架構(gòu)中遭遇高并發(fā)的情形時(shí),如圖4所示,大量的用戶請(qǐng)求會(huì)直接與數(shù)據(jù)庫進(jìn)行互動(dòng),導(dǎo)致數(shù)據(jù)庫瞬時(shí)壓力驟增,從而接受響應(yīng)的時(shí)間增加,嚴(yán)重影響用戶體驗(yàn)。本網(wǎng)站架構(gòu)中使用RabbitMQ作為消息隊(duì)列使用,如圖5所示。消息隊(duì)列的引入使得用戶請(qǐng)求在到達(dá)消息隊(duì)列服務(wù)器時(shí)立即返回,之后由消息隊(duì)列的消費(fèi)者進(jìn)程獲取剛剛的數(shù)據(jù),異步寫入數(shù)據(jù)庫。因消息隊(duì)列服務(wù)器在處理速度與伸縮性上均優(yōu)于數(shù)據(jù)庫,所以響應(yīng)速度得到大幅改善。
2.4 緩存機(jī)制的設(shè)計(jì)
在大并發(fā)量的情況下,大量的數(shù)據(jù)需要進(jìn)行讀取操作,如果每次程序都需要向數(shù)據(jù)庫直接做查詢操作,則其所帶來的性能開銷顯而易見,頻繁的網(wǎng)絡(luò)傳輸也會(huì)大大降低系統(tǒng)的整體性能。因此cache的引入對(duì)于解決高并發(fā)問題非常有效,它能讓數(shù)據(jù)在本地內(nèi)存中保留一個(gè)鏡像,下次訪問時(shí)只需從內(nèi)存中直接獲取,對(duì)于網(wǎng)站整體性能提升明顯。
在hibernate框架中,一級(jí)緩存存在于Session中,屬于事務(wù)級(jí)數(shù)據(jù)緩沖。一旦事務(wù)結(jié)束,一級(jí)Cache也隨之失效。同時(shí),如圖6所示,本網(wǎng)站架構(gòu)中增加第三方的數(shù)據(jù)庫連接池C3PO。因?yàn)榻?shù)據(jù)庫連接時(shí)會(huì)消耗一定時(shí)間,所以采用數(shù)據(jù)庫連接池技術(shù)預(yù)先建立多條數(shù)據(jù)庫連接,并在將來持續(xù)使用,從而節(jié)約掉建立數(shù)據(jù)庫連所需時(shí)間,C3PO的引入對(duì)于高并發(fā)隨機(jī)訪問數(shù)據(jù)庫時(shí)的效率提升有很大幫助。
3 實(shí)驗(yàn)
測(cè)試部分中,本文將上述所設(shè)計(jì)集群服務(wù)器架構(gòu)與傳統(tǒng)的單體服務(wù)器架構(gòu)相對(duì)比。通過JMeter發(fā)起海量并發(fā)數(shù)據(jù)請(qǐng)求,對(duì)兩種不同的架構(gòu)進(jìn)行壓力測(cè)試,驗(yàn)證其是否滿足高并發(fā)與高可用網(wǎng)絡(luò)架構(gòu)要求。表1展示了數(shù)據(jù)訪問性測(cè)試用例內(nèi)容。
為了保證數(shù)據(jù)訪問測(cè)試的可信度,本文分別從4個(gè)維度,對(duì)比兩種不同類型架構(gòu)數(shù)據(jù)訪問所需耗時(shí)。表2展示了在4種不同性能指標(biāo)下,兩種不同類型架構(gòu)的性能數(shù)據(jù)。
如圖7所示,通過對(duì)比測(cè)試,本文網(wǎng)站架構(gòu)在TP90、TP95、TP99各維度中均大幅度優(yōu)于傳統(tǒng)架構(gòu),網(wǎng)絡(luò)請(qǐng)求耗時(shí)相比之前更少、響應(yīng)速度更快、用戶體驗(yàn)流暢度更優(yōu)。滿足一個(gè)高并發(fā)與高可用網(wǎng)站架構(gòu)要求。
4 總結(jié)
本文是基于SSH框架提出了一種高并發(fā)、高可用網(wǎng)站架構(gòu)。主要是在面臨海量用戶請(qǐng)求業(yè)務(wù)場(chǎng)景時(shí),可以保證服務(wù)器快速響應(yīng)、運(yùn)行平穩(wěn),無差錯(cuò)。本文在SSH構(gòu)建服務(wù)器的基礎(chǔ)上形成集群,并輔之以Nginx高性能技術(shù)、RabbitMQ消息隊(duì)列和緩存機(jī)制等。經(jīng)過壓力測(cè)試,網(wǎng)絡(luò)請(qǐng)求耗時(shí)顯著減少,證明了本文所述框架的有效性。
參考文獻(xiàn):
[1]潘樂,胡鑫,余偉,等,一種高并發(fā)服務(wù)處理的優(yōu)化方法[J].信息技術(shù)與信息化,2020(3):22-24.
[2]張宇星,馬明棟,王得玉.基于Nginx負(fù)載均衡的動(dòng)態(tài)改進(jìn)算法[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(3):73-76,81.
[3]王瑛,基于Java應(yīng)用的高并發(fā)高可用集群服務(wù)器的設(shè)計(jì)與實(shí)現(xiàn)[J].電子技術(shù)與軟件工程,2019(20):139-140.
[4]余永城,翁秋華,段卿,等.RabbitMQ在氣象通信系統(tǒng)中的應(yīng)用研究[J].計(jì)算機(jī)技術(shù)與發(fā)展,2020,30(4):216-220.
[5]陳思媛,易國洪,金旺.智能停車系統(tǒng)中消息中間件的設(shè)計(jì)與實(shí)現(xiàn)[J].武漢工程大學(xué)學(xué)報(bào),2020,42(2):224-230.
[6]何晶,以SSH框架與iQuery技術(shù)為基礎(chǔ)的Java-Web開發(fā)應(yīng)用探討[J].計(jì)算機(jī)產(chǎn)品與流通,2019(11):104-105.
[7]潘愷曄.基于SSM框架的CRM系統(tǒng)的實(shí)現(xiàn)[J].山東農(nóng)業(yè)工程學(xué)院學(xué)報(bào),2019,36(8):20-21,102.
[8]張健.基于SSH框架技術(shù)重構(gòu)OA管理系統(tǒng)的實(shí)現(xiàn)[J].信息技術(shù),2019,43(7):106-109,115.
[9]唐念剛,張勇.AOP技術(shù)在Web系統(tǒng)日志和事物管理中的應(yīng)用[J].電子設(shè)計(jì)工程,2017,25(16):42-45.
【通聯(lián)編輯:聞翔軍】