王歡,趙建平,姜曉明,陳占芳,張偉,趙巍
(1.長春理工大學(xué) 信息化中心,長春 130022;2.長春理工大學(xué) 計算機科學(xué)技術(shù)學(xué)院,長春 130022;3.吉林省教育考試院,長春 130022)
近年來,隨著互聯(lián)網(wǎng)和信息技術(shù)的迅速發(fā)展,各行各業(yè)都在通過信息化手段來提升各自的業(yè)務(wù)水平,提高各自的辦公效率,力爭為自己的用戶提供更加方便、快捷的服務(wù)?;赪eb的應(yīng)用平臺具有操作便捷、簡單、隨時隨地辦辦公的特點,已經(jīng)成為政府、企事業(yè)單位和各類公司提高自己業(yè)務(wù)水平的載體,廣泛地存在于各行各業(yè)之中,為社會和經(jīng)濟發(fā)展起到了支撐作用,收到廣大用戶的歡迎。
隨著Web應(yīng)用平臺的廣泛使用,平臺中所支撐的用戶人數(shù)越來越多,訪問的頻率也越來越高。如當(dāng)今流行的電商網(wǎng)站淘寶、京東商城、火車票購票網(wǎng)12306、各類考試招生報名等網(wǎng)站每天都要承擔(dān)大量的高并發(fā)訪問。當(dāng)大量用戶集中并發(fā)訪問這些應(yīng)用系統(tǒng)時,就會出現(xiàn)應(yīng)用平臺響應(yīng)過慢,嚴(yán)重的情況下甚至?xí)霈F(xiàn)系統(tǒng)崩潰和宕機等情形,影響了應(yīng)用系統(tǒng)的使用規(guī)模和范圍。為此Web應(yīng)用平臺的高并發(fā)性已經(jīng)成為了眾多應(yīng)用系統(tǒng)開發(fā)的瓶頸,亟待解決。本文針對Web應(yīng)用系統(tǒng)的問題進行深入研究,分別就平臺的整體結(jié)構(gòu)、Web訪問應(yīng)用負(fù)載均衡、數(shù)據(jù)庫負(fù)載均衡、平臺的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、數(shù)據(jù)緩存等高并發(fā)的關(guān)鍵問題進行研究[1]。
高并發(fā)Web應(yīng)用平臺主要由數(shù)據(jù)庫服務(wù)、Web集群、應(yīng)用負(fù)載均衡、管理中間件等部分構(gòu)成。其中數(shù)據(jù)庫服務(wù)也需要進行負(fù)載均衡設(shè)置。
圖1 平臺總體結(jié)構(gòu)
通常情況下,平臺用戶可以分為普通用戶和管理用戶。普通用戶一般情況下在平臺中操作較少,不需要打印和統(tǒng)計,只涉及到數(shù)據(jù)提交;管理用戶使用的功能相對較多,包括統(tǒng)計和打印等資源消耗較多的功能。為此普通用戶使用網(wǎng)頁端進行操作,通過應(yīng)用負(fù)載均衡的策略調(diào)度將Web訪問分散到Web集群節(jié)點上;管理用戶采用客戶端進行操作,通過客戶端對數(shù)據(jù)進行打印和統(tǒng)計。
為了解決Web平臺的高并發(fā)訪問問題,保證所有用戶均能正常訪問平臺,在應(yīng)用平臺的部署過程中需要進行應(yīng)用負(fù)載均衡考慮。應(yīng)用負(fù)載均衡的策略方式一般包括輪詢、權(quán)重、ip_hash等。其各自的特點為:
(1)輪詢方式:客戶端的每個請求按訪問時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動剔除,指向下一臺服務(wù)器。
(2)權(quán)重方式:為后端服務(wù)器指定輪詢幾率,權(quán)重(weight)和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
(3)ip_hash方式:每個請求按訪問ip的hash結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決Session的問題[2]。
Web應(yīng)用平臺的開發(fā)過程中,一般都會涉及Session會話的保存問題,故本文采用基于ip_hash的方式進行負(fù)載均衡。具體過程如圖2所示。
圖2 ip_hash策略的執(zhí)行過程
在ip_hash策略的執(zhí)行過程中,產(chǎn)生的hash值既與客戶端ip有關(guān)又與后端機器的數(shù)量有關(guān),算法可以連續(xù)產(chǎn)生1045個互異的值。在hash過程中,如果經(jīng)過20次hash仍然找不到可用的機器時,算法退化成輪詢,直接對后端服務(wù)器進行輪詢。
在應(yīng)對高并發(fā)的數(shù)據(jù)庫訪問過程中,數(shù)據(jù)庫需要建立集群系統(tǒng),來進行負(fù)載均衡,這樣既可以滿足負(fù)載均衡的需要,同時也可以防止數(shù)據(jù)庫服務(wù)宕機情況的發(fā)生。本文采用數(shù)據(jù)庫負(fù)載均衡采用基于Oracle數(shù)據(jù)庫的RAC模式進行設(shè)計,建立多節(jié)點的數(shù)據(jù)集群,具體結(jié)構(gòu)如圖3所示。
每一個節(jié)點在本地硬盤安裝數(shù)據(jù)庫實例,不存放數(shù)據(jù)文件,兩個節(jié)點之間通過心跳線進行連接,互相通訊,并由此進行復(fù)雜均衡調(diào)度。數(shù)據(jù)文件則存儲在由磁盤陣列構(gòu)成的共享存儲上,每一個節(jié)點將處理完畢的結(jié)果存放于共享存儲上,進而保證節(jié)點數(shù)據(jù)的一致性和穩(wěn)定性。
圖3 數(shù)據(jù)庫負(fù)載均衡集群結(jié)構(gòu)
在web平臺中會存在一些字典數(shù)據(jù),如性別、名族、政治面貌等。這些字典數(shù)據(jù)為整個系統(tǒng)高頻訪問。在高并發(fā)的情況,如果每次都對這些數(shù)據(jù)進行數(shù)據(jù)庫查詢,勢必會影響整個系統(tǒng)的性能,消耗系統(tǒng)資源。本文采用哈希緩存技術(shù)將這些字典數(shù)據(jù)緩存在內(nèi)存中,減少數(shù)據(jù)庫的連接操作。
應(yīng)用平臺在第一次啟動時,完成數(shù)據(jù)加載。在緩存過程中,通過字典數(shù)據(jù)的編碼和名稱形成鍵值對,進行哈希散列。關(guān)鍵字的哈希方法為:
value=hash(code,struct_zd)
當(dāng)發(fā)生字典數(shù)據(jù)變化,管理員需要進行遠程數(shù)據(jù)同步,包括數(shù)據(jù)庫和系統(tǒng)內(nèi)存兩部分。具體同步過程如圖4所示。
圖4 遠程數(shù)據(jù)字典同步過程
一般的應(yīng)用系統(tǒng)的對于數(shù)據(jù)的統(tǒng)計都采用實時性統(tǒng)計。由于在統(tǒng)計的過程中,統(tǒng)計的結(jié)構(gòu)化查詢語句與數(shù)據(jù)庫的插入、修改和刪除操作會在一定程度上存在交叉,這就會導(dǎo)致數(shù)據(jù)庫死鎖的出現(xiàn)。為此本文就高并發(fā)訪問的統(tǒng)計,提出一種緩存統(tǒng)計結(jié)果方案[3]。
方案為通過建立統(tǒng)計服務(wù)程序,定時統(tǒng)計結(jié)果并進行緩存,用戶隨時訪問緩存的統(tǒng)計結(jié)果。具體過程為:
(1)在數(shù)據(jù)庫中建立與統(tǒng)計表格結(jié)構(gòu)相同對的預(yù)統(tǒng)計表Y_TJ;
(2)服務(wù)定時啟動統(tǒng)計數(shù)據(jù),并將結(jié)果插入到預(yù)統(tǒng)計表Y_TJ中,并標(biāo)記統(tǒng)計進行的時間;
(3)讀取預(yù)統(tǒng)計表Y_TJ的結(jié)果,并將統(tǒng)計響應(yīng)給用戶,并在統(tǒng)計結(jié)果中告知統(tǒng)計數(shù)據(jù)的截止時間;
(4)用戶查詢統(tǒng)計結(jié)果。
結(jié)合軟件的部署和平臺性能的發(fā)揮,綜合考慮平臺的性能和穩(wěn)定性,將Web應(yīng)用、數(shù)據(jù)庫服務(wù)、共享存儲和安全審計納入進平臺的拓?fù)渲?。平臺網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用雙冗余設(shè)計,并在關(guān)鍵設(shè)備上進行BYPASS設(shè)置,當(dāng)某一個設(shè)備出現(xiàn)宕機的情況直接進行數(shù)據(jù)透傳,防止網(wǎng)絡(luò)斷開情況發(fā)生。平臺的網(wǎng)絡(luò)結(jié)構(gòu)采用全千兆的光纖網(wǎng)絡(luò)鏈路和設(shè)備。并在web前端增加網(wǎng)絡(luò)安全設(shè)備,為了提高鏈路的效率所有設(shè)備在接入的過程中均采用旁路監(jiān)聽的模式方式[4]。具體的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖5所示。
考慮到平臺的安全性,在網(wǎng)絡(luò)拓?fù)渲羞M行區(qū)域劃分,包括存儲備份區(qū)、數(shù)據(jù)中心區(qū)、審計管理區(qū)、應(yīng)用區(qū)和網(wǎng)絡(luò)邊界區(qū)五部分。同時對區(qū)域劃分不同的VLAN,從而實現(xiàn)網(wǎng)絡(luò)間的限制。存儲備份區(qū)域主要進行數(shù)據(jù)備份和數(shù)據(jù)庫共享存儲。數(shù)據(jù)中心區(qū)主要進行數(shù)據(jù)庫負(fù)載系統(tǒng)的部署。審計管理區(qū)主要進行安全設(shè)備的掛接、對整個網(wǎng)絡(luò)進行監(jiān)控。應(yīng)用區(qū)主要存放應(yīng)用負(fù)載均衡和web集群。網(wǎng)絡(luò)邊界區(qū)主要與互聯(lián)網(wǎng)進行交互,并進行抗DDOS攻擊等安全防護。
圖5 共享數(shù)據(jù)中心與各應(yīng)用系統(tǒng)間數(shù)據(jù)流向
平臺中對數(shù)據(jù)安全性主要包括防止sql注入式破壞和數(shù)據(jù)完整性兩個方面。在注入式攻擊方面,與數(shù)據(jù)的交互過程中避免使用結(jié)構(gòu)化查詢語句直接拼湊,而是采用存儲過程,進而達到對結(jié)構(gòu)化查詢語句關(guān)鍵字注入的過濾。對于數(shù)據(jù)完整性安全,平臺為數(shù)據(jù)庫中的每一條記錄進行數(shù)據(jù)簽名,簽名的內(nèi)容包括數(shù)據(jù)庫中的所有字段,具體的簽名過程為:key=MD5(column1,column2,…)
然后在每次操作前都對記錄數(shù)據(jù)和簽名數(shù)據(jù)進行匹配和校驗,校驗通過方可進行操作,否則進行數(shù)據(jù)糾錯,檢查數(shù)據(jù)庫日志[5]。
本文設(shè)計和實現(xiàn)了一種高并發(fā)Web應(yīng)用平臺。討論了高并發(fā)Web應(yīng)用平臺的總體架構(gòu)和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),設(shè)計了Web應(yīng)用和數(shù)據(jù)庫負(fù)載均衡系統(tǒng),給出了負(fù)載均衡的映射算法,劃分了安全區(qū)域,并采用字典緩存技術(shù)和分時統(tǒng)計技術(shù)提高系統(tǒng)性能。該平臺已于2014年和2015年成功運用于吉林省高考網(wǎng)上報名工作中,對Web平臺的高并發(fā)性研究與應(yīng)用具有一定的現(xiàn)實意義。
[1]王亞楠,吳華瑞,黃鋒.高并發(fā)Web應(yīng)用系統(tǒng)的性能優(yōu)化分析與研究[J].計算機工程與設(shè)計,2014,35(8):2976-2980.
[2]張宴.實戰(zhàn)Nginx:取代Apache的高性能Web服務(wù)器[M].北京:電子工業(yè)出版社,2010.
[3]包立輝,黃彥飛.高并發(fā)網(wǎng)站的架構(gòu)研究及解決方案[J].計算機科學(xué),2012,39(10):184-187.
[4]Chen C,Chen G,Jiang DW,et al.Providing scalable database services on the cloud[C].The 11th Int'l Conf.on Web Information Systems Engineering(WISE),Xiamen,2010.
[5]陳占芳,王歡,畢琳,等.基于OA系統(tǒng)的即時通訊平臺關(guān)鍵技術(shù)研究與實現(xiàn)[J].長春理工大學(xué)學(xué)報:自然科學(xué)版,2012,35(4):125-129.