王歡,趙建平,姜曉明,陳占芳,張偉,趙巍
(1.長(zhǎng)春理工大學(xué) 信息化中心,長(zhǎng)春 130022;2.長(zhǎng)春理工大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長(zhǎng)春 130022;3.吉林省教育考試院,長(zhǎng)春 130022)
近年來(lái),隨著互聯(lián)網(wǎng)和信息技術(shù)的迅速發(fā)展,各行各業(yè)都在通過(guò)信息化手段來(lái)提升各自的業(yè)務(wù)水平,提高各自的辦公效率,力爭(zhēng)為自己的用戶(hù)提供更加方便、快捷的服務(wù)。基于Web的應(yīng)用平臺(tái)具有操作便捷、簡(jiǎn)單、隨時(shí)隨地辦辦公的特點(diǎn),已經(jīng)成為政府、企事業(yè)單位和各類(lèi)公司提高自己業(yè)務(wù)水平的載體,廣泛地存在于各行各業(yè)之中,為社會(huì)和經(jīng)濟(jì)發(fā)展起到了支撐作用,收到廣大用戶(hù)的歡迎。
隨著Web應(yīng)用平臺(tái)的廣泛使用,平臺(tái)中所支撐的用戶(hù)人數(shù)越來(lái)越多,訪問(wèn)的頻率也越來(lái)越高。如當(dāng)今流行的電商網(wǎng)站淘寶、京東商城、火車(chē)票購(gòu)票網(wǎng)12306、各類(lèi)考試招生報(bào)名等網(wǎng)站每天都要承擔(dān)大量的高并發(fā)訪問(wèn)。當(dāng)大量用戶(hù)集中并發(fā)訪問(wèn)這些應(yīng)用系統(tǒng)時(shí),就會(huì)出現(xiàn)應(yīng)用平臺(tái)響應(yīng)過(guò)慢,嚴(yán)重的情況下甚至?xí)霈F(xiàn)系統(tǒng)崩潰和宕機(jī)等情形,影響了應(yīng)用系統(tǒng)的使用規(guī)模和范圍。為此Web應(yīng)用平臺(tái)的高并發(fā)性已經(jīng)成為了眾多應(yīng)用系統(tǒng)開(kāi)發(fā)的瓶頸,亟待解決。本文針對(duì)Web應(yīng)用系統(tǒng)的問(wèn)題進(jìn)行深入研究,分別就平臺(tái)的整體結(jié)構(gòu)、Web訪問(wèn)應(yīng)用負(fù)載均衡、數(shù)據(jù)庫(kù)負(fù)載均衡、平臺(tái)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、數(shù)據(jù)緩存等高并發(fā)的關(guān)鍵問(wèn)題進(jìn)行研究[1]。
高并發(fā)Web應(yīng)用平臺(tái)主要由數(shù)據(jù)庫(kù)服務(wù)、Web集群、應(yīng)用負(fù)載均衡、管理中間件等部分構(gòu)成。其中數(shù)據(jù)庫(kù)服務(wù)也需要進(jìn)行負(fù)載均衡設(shè)置。

圖1 平臺(tái)總體結(jié)構(gòu)
通常情況下,平臺(tái)用戶(hù)可以分為普通用戶(hù)和管理用戶(hù)。普通用戶(hù)一般情況下在平臺(tái)中操作較少,不需要打印和統(tǒng)計(jì),只涉及到數(shù)據(jù)提交;管理用戶(hù)使用的功能相對(duì)較多,包括統(tǒng)計(jì)和打印等資源消耗較多的功能。為此普通用戶(hù)使用網(wǎng)頁(yè)端進(jìn)行操作,通過(guò)應(yīng)用負(fù)載均衡的策略調(diào)度將Web訪問(wèn)分散到Web集群節(jié)點(diǎn)上;管理用戶(hù)采用客戶(hù)端進(jìn)行操作,通過(guò)客戶(hù)端對(duì)數(shù)據(jù)進(jìn)行打印和統(tǒng)計(jì)。
為了解決Web平臺(tái)的高并發(fā)訪問(wèn)問(wèn)題,保證所有用戶(hù)均能正常訪問(wèn)平臺(tái),在應(yīng)用平臺(tái)的部署過(guò)程中需要進(jìn)行應(yīng)用負(fù)載均衡考慮。應(yīng)用負(fù)載均衡的策略方式一般包括輪詢(xún)、權(quán)重、ip_hash等。其各自的特點(diǎn)為:
(1)輪詢(xún)方式:客戶(hù)端的每個(gè)請(qǐng)求按訪問(wèn)時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除,指向下一臺(tái)服務(wù)器。
(2)權(quán)重方式:為后端服務(wù)器指定輪詢(xún)幾率,權(quán)重(weight)和訪問(wèn)比率成正比,用于后端服務(wù)器性能不均的情況。
(3)ip_hash方式:每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決Session的問(wèn)題[2]。
Web應(yīng)用平臺(tái)的開(kāi)發(fā)過(guò)程中,一般都會(huì)涉及Session會(huì)話的保存問(wèn)題,故本文采用基于ip_hash的方式進(jìn)行負(fù)載均衡。具體過(guò)程如圖2所示。

圖2 ip_hash策略的執(zhí)行過(guò)程
在ip_hash策略的執(zhí)行過(guò)程中,產(chǎn)生的hash值既與客戶(hù)端ip有關(guān)又與后端機(jī)器的數(shù)量有關(guān),算法可以連續(xù)產(chǎn)生1045個(gè)互異的值。在hash過(guò)程中,如果經(jīng)過(guò)20次hash仍然找不到可用的機(jī)器時(shí),算法退化成輪詢(xún),直接對(duì)后端服務(wù)器進(jìn)行輪詢(xún)。
在應(yīng)對(duì)高并發(fā)的數(shù)據(jù)庫(kù)訪問(wèn)過(guò)程中,數(shù)據(jù)庫(kù)需要建立集群系統(tǒng),來(lái)進(jìn)行負(fù)載均衡,這樣既可以滿(mǎn)足負(fù)載均衡的需要,同時(shí)也可以防止數(shù)據(jù)庫(kù)服務(wù)宕機(jī)情況的發(fā)生。本文采用數(shù)據(jù)庫(kù)負(fù)載均衡采用基于Oracle數(shù)據(jù)庫(kù)的RAC模式進(jìn)行設(shè)計(jì),建立多節(jié)點(diǎn)的數(shù)據(jù)集群,具體結(jié)構(gòu)如圖3所示。
每一個(gè)節(jié)點(diǎn)在本地硬盤(pán)安裝數(shù)據(jù)庫(kù)實(shí)例,不存放數(shù)據(jù)文件,兩個(gè)節(jié)點(diǎn)之間通過(guò)心跳線進(jìn)行連接,互相通訊,并由此進(jìn)行復(fù)雜均衡調(diào)度。數(shù)據(jù)文件則存儲(chǔ)在由磁盤(pán)陣列構(gòu)成的共享存儲(chǔ)上,每一個(gè)節(jié)點(diǎn)將處理完畢的結(jié)果存放于共享存儲(chǔ)上,進(jìn)而保證節(jié)點(diǎn)數(shù)據(jù)的一致性和穩(wěn)定性。

圖3 數(shù)據(jù)庫(kù)負(fù)載均衡集群結(jié)構(gòu)
在web平臺(tái)中會(huì)存在一些字典數(shù)據(jù),如性別、名族、政治面貌等。這些字典數(shù)據(jù)為整個(gè)系統(tǒng)高頻訪問(wèn)。在高并發(fā)的情況,如果每次都對(duì)這些數(shù)據(jù)進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),勢(shì)必會(huì)影響整個(gè)系統(tǒng)的性能,消耗系統(tǒng)資源。本文采用哈希緩存技術(shù)將這些字典數(shù)據(jù)緩存在內(nèi)存中,減少數(shù)據(jù)庫(kù)的連接操作。
應(yīng)用平臺(tái)在第一次啟動(dòng)時(shí),完成數(shù)據(jù)加載。在緩存過(guò)程中,通過(guò)字典數(shù)據(jù)的編碼和名稱(chēng)形成鍵值對(duì),進(jìn)行哈希散列。關(guān)鍵字的哈希方法為:
value=hash(code,struct_zd)
當(dāng)發(fā)生字典數(shù)據(jù)變化,管理員需要進(jìn)行遠(yuǎn)程數(shù)據(jù)同步,包括數(shù)據(jù)庫(kù)和系統(tǒng)內(nèi)存兩部分。具體同步過(guò)程如圖4所示。

圖4 遠(yuǎn)程數(shù)據(jù)字典同步過(guò)程
一般的應(yīng)用系統(tǒng)的對(duì)于數(shù)據(jù)的統(tǒng)計(jì)都采用實(shí)時(shí)性統(tǒng)計(jì)。由于在統(tǒng)計(jì)的過(guò)程中,統(tǒng)計(jì)的結(jié)構(gòu)化查詢(xún)語(yǔ)句與數(shù)據(jù)庫(kù)的插入、修改和刪除操作會(huì)在一定程度上存在交叉,這就會(huì)導(dǎo)致數(shù)據(jù)庫(kù)死鎖的出現(xiàn)。為此本文就高并發(fā)訪問(wèn)的統(tǒng)計(jì),提出一種緩存統(tǒng)計(jì)結(jié)果方案[3]。
方案為通過(guò)建立統(tǒng)計(jì)服務(wù)程序,定時(shí)統(tǒng)計(jì)結(jié)果并進(jìn)行緩存,用戶(hù)隨時(shí)訪問(wèn)緩存的統(tǒng)計(jì)結(jié)果。具體過(guò)程為:
(1)在數(shù)據(jù)庫(kù)中建立與統(tǒng)計(jì)表格結(jié)構(gòu)相同對(duì)的預(yù)統(tǒng)計(jì)表Y_TJ;
(2)服務(wù)定時(shí)啟動(dòng)統(tǒng)計(jì)數(shù)據(jù),并將結(jié)果插入到預(yù)統(tǒng)計(jì)表Y_TJ中,并標(biāo)記統(tǒng)計(jì)進(jìn)行的時(shí)間;
(3)讀取預(yù)統(tǒng)計(jì)表Y_TJ的結(jié)果,并將統(tǒng)計(jì)響應(yīng)給用戶(hù),并在統(tǒng)計(jì)結(jié)果中告知統(tǒng)計(jì)數(shù)據(jù)的截止時(shí)間;
(4)用戶(hù)查詢(xún)統(tǒng)計(jì)結(jié)果。
結(jié)合軟件的部署和平臺(tái)性能的發(fā)揮,綜合考慮平臺(tái)的性能和穩(wěn)定性,將Web應(yīng)用、數(shù)據(jù)庫(kù)服務(wù)、共享存儲(chǔ)和安全審計(jì)納入進(jìn)平臺(tái)的拓?fù)渲小F脚_(tái)網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)采用雙冗余設(shè)計(jì),并在關(guān)鍵設(shè)備上進(jìn)行BYPASS設(shè)置,當(dāng)某一個(gè)設(shè)備出現(xiàn)宕機(jī)的情況直接進(jìn)行數(shù)據(jù)透?jìng)鳎乐咕W(wǎng)絡(luò)斷開(kāi)情況發(fā)生。平臺(tái)的網(wǎng)絡(luò)結(jié)構(gòu)采用全千兆的光纖網(wǎng)絡(luò)鏈路和設(shè)備。并在web前端增加網(wǎng)絡(luò)安全設(shè)備,為了提高鏈路的效率所有設(shè)備在接入的過(guò)程中均采用旁路監(jiān)聽(tīng)的模式方式[4]。具體的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖5所示。
考慮到平臺(tái)的安全性,在網(wǎng)絡(luò)拓?fù)渲羞M(jìn)行區(qū)域劃分,包括存儲(chǔ)備份區(qū)、數(shù)據(jù)中心區(qū)、審計(jì)管理區(qū)、應(yīng)用區(qū)和網(wǎng)絡(luò)邊界區(qū)五部分。同時(shí)對(duì)區(qū)域劃分不同的VLAN,從而實(shí)現(xiàn)網(wǎng)絡(luò)間的限制。存儲(chǔ)備份區(qū)域主要進(jìn)行數(shù)據(jù)備份和數(shù)據(jù)庫(kù)共享存儲(chǔ)。數(shù)據(jù)中心區(qū)主要進(jìn)行數(shù)據(jù)庫(kù)負(fù)載系統(tǒng)的部署。審計(jì)管理區(qū)主要進(jìn)行安全設(shè)備的掛接、對(duì)整個(gè)網(wǎng)絡(luò)進(jìn)行監(jiān)控。應(yīng)用區(qū)主要存放應(yīng)用負(fù)載均衡和web集群。網(wǎng)絡(luò)邊界區(qū)主要與互聯(lián)網(wǎng)進(jìn)行交互,并進(jìn)行抗DDOS攻擊等安全防護(hù)。

圖5 共享數(shù)據(jù)中心與各應(yīng)用系統(tǒng)間數(shù)據(jù)流向
平臺(tái)中對(duì)數(shù)據(jù)安全性主要包括防止sql注入式破壞和數(shù)據(jù)完整性?xún)蓚€(gè)方面。在注入式攻擊方面,與數(shù)據(jù)的交互過(guò)程中避免使用結(jié)構(gòu)化查詢(xún)語(yǔ)句直接拼湊,而是采用存儲(chǔ)過(guò)程,進(jìn)而達(dá)到對(duì)結(jié)構(gòu)化查詢(xún)語(yǔ)句關(guān)鍵字注入的過(guò)濾。對(duì)于數(shù)據(jù)完整性安全,平臺(tái)為數(shù)據(jù)庫(kù)中的每一條記錄進(jìn)行數(shù)據(jù)簽名,簽名的內(nèi)容包括數(shù)據(jù)庫(kù)中的所有字段,具體的簽名過(guò)程為:key=MD5(column1,column2,…)
然后在每次操作前都對(duì)記錄數(shù)據(jù)和簽名數(shù)據(jù)進(jìn)行匹配和校驗(yàn),校驗(yàn)通過(guò)方可進(jìn)行操作,否則進(jìn)行數(shù)據(jù)糾錯(cuò),檢查數(shù)據(jù)庫(kù)日志[5]。
本文設(shè)計(jì)和實(shí)現(xiàn)了一種高并發(fā)Web應(yīng)用平臺(tái)。討論了高并發(fā)Web應(yīng)用平臺(tái)的總體架構(gòu)和網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),設(shè)計(jì)了Web應(yīng)用和數(shù)據(jù)庫(kù)負(fù)載均衡系統(tǒng),給出了負(fù)載均衡的映射算法,劃分了安全區(qū)域,并采用字典緩存技術(shù)和分時(shí)統(tǒng)計(jì)技術(shù)提高系統(tǒng)性能。該平臺(tái)已于2014年和2015年成功運(yùn)用于吉林省高考網(wǎng)上報(bào)名工作中,對(duì)Web平臺(tái)的高并發(fā)性研究與應(yīng)用具有一定的現(xiàn)實(shí)意義。
[1]王亞楠,吳華瑞,黃鋒.高并發(fā)Web應(yīng)用系統(tǒng)的性能優(yōu)化分析與研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(8):2976-2980.
[2]張宴.實(shí)戰(zhàn)Nginx:取代Apache的高性能Web服務(wù)器[M].北京:電子工業(yè)出版社,2010.
[3]包立輝,黃彥飛.高并發(fā)網(wǎng)站的架構(gòu)研究及解決方案[J].計(jì)算機(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)的即時(shí)通訊平臺(tái)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[J].長(zhǎng)春理工大學(xué)學(xué)報(bào):自然科學(xué)版,2012,35(4):125-129.