王歡,趙建平,姜曉明,陳占芳,張偉,趙巍
(1.長春理工大學(xué) 信息化中心,長春 130022;2.長春理工大學(xué) 計(jì)算機(jī)科學(xué)技術(shù)學(xué)院,長春 130022;3.吉林省教育考試院,長春 130022)
近年來,隨著互聯(lián)網(wǎng)和信息技術(shù)的迅速發(fā)展,各行各業(yè)都在通過信息化手段來提升各自的業(yè)務(wù)水平,提高各自的辦公效率,力爭為自己的用戶提供更加方便、快捷的服務(wù)。基于Web的應(yīng)用平臺(tái)具有操作便捷、簡單、隨時(shí)隨地辦辦公的特點(diǎn),已經(jīng)成為政府、企事業(yè)單位和各類公司提高自己業(yè)務(wù)水平的載體,廣泛地存在于各行各業(yè)之中,為社會(huì)和經(jīng)濟(jì)發(fā)展起到了支撐作用,收到廣大用戶的歡迎。
隨著Web應(yīng)用平臺(tái)的廣泛使用,平臺(tái)中所支撐的用戶人數(shù)越來越多,訪問的頻率也越來越高。如當(dāng)今流行的電商網(wǎng)站淘寶、京東商城、火車票購票網(wǎng)12306、各類考試招生報(bào)名等網(wǎng)站每天都要承擔(dān)大量的高并發(fā)訪問。當(dāng)大量用戶集中并發(fā)訪問這些應(yīng)用系統(tǒng)時(shí),就會(huì)出現(xiàn)應(yīng)用平臺(tái)響應(yīng)過慢,嚴(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)開發(fā)的瓶頸,亟待解決。本文針對(duì)Web應(yīng)用系統(tǒng)的問題進(jìn)行深入研究,分別就平臺(tái)的整體結(jié)構(gòu)、Web訪問應(yīng)用負(fù)載均衡、數(shù)據(jù)庫負(fù)載均衡、平臺(tái)的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)、數(shù)據(jù)緩存等高并發(fā)的關(guān)鍵問題進(jìn)行研究[1]。
高并發(fā)Web應(yīng)用平臺(tái)主要由數(shù)據(jù)庫服務(wù)、Web集群、應(yīng)用負(fù)載均衡、管理中間件等部分構(gòu)成。其中數(shù)據(jù)庫服務(wù)也需要進(jìn)行負(fù)載均衡設(shè)置。
圖1 平臺(tái)總體結(jié)構(gòu)
通常情況下,平臺(tái)用戶可以分為普通用戶和管理用戶。普通用戶一般情況下在平臺(tái)中操作較少,不需要打印和統(tǒng)計(jì),只涉及到數(shù)據(jù)提交;管理用戶使用的功能相對(duì)較多,包括統(tǒng)計(jì)和打印等資源消耗較多的功能。為此普通用戶使用網(wǎng)頁端進(jìn)行操作,通過應(yīng)用負(fù)載均衡的策略調(diào)度將Web訪問分散到Web集群節(jié)點(diǎn)上;管理用戶采用客戶端進(jìn)行操作,通過客戶端對(duì)數(shù)據(jù)進(jìn)行打印和統(tǒng)計(jì)。
為了解決Web平臺(tái)的高并發(fā)訪問問題,保證所有用戶均能正常訪問平臺(tái),在應(yīng)用平臺(tái)的部署過程中需要進(jìn)行應(yīng)用負(fù)載均衡考慮。應(yīng)用負(fù)載均衡的策略方式一般包括輪詢、權(quán)重、ip_hash等。其各自的特點(diǎn)為:
(1)輪詢方式:客戶端的每個(gè)請(qǐng)求按訪問時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉,能自動(dòng)剔除,指向下一臺(tái)服務(wù)器。
(2)權(quán)重方式:為后端服務(wù)器指定輪詢幾率,權(quán)重(weight)和訪問比率成正比,用于后端服務(wù)器性能不均的情況。
(3)ip_hash方式:每個(gè)請(qǐng)求按訪問ip的hash結(jié)果分配,這樣每個(gè)訪客固定訪問一個(gè)后端服務(wù)器,可以解決Session的問題[2]。
Web應(yīng)用平臺(tái)的開發(fā)過程中,一般都會(huì)涉及Session會(huì)話的保存問題,故本文采用基于ip_hash的方式進(jìn)行負(fù)載均衡。具體過程如圖2所示。
圖2 ip_hash策略的執(zhí)行過程
在ip_hash策略的執(zhí)行過程中,產(chǎn)生的hash值既與客戶端ip有關(guān)又與后端機(jī)器的數(shù)量有關(guān),算法可以連續(xù)產(chǎn)生1045個(gè)互異的值。在hash過程中,如果經(jīng)過20次hash仍然找不到可用的機(jī)器時(shí),算法退化成輪詢,直接對(duì)后端服務(wù)器進(jìn)行輪詢。
在應(yīng)對(duì)高并發(fā)的數(shù)據(jù)庫訪問過程中,數(shù)據(jù)庫需要建立集群系統(tǒng),來進(jìn)行負(fù)載均衡,這樣既可以滿足負(fù)載均衡的需要,同時(shí)也可以防止數(shù)據(jù)庫服務(wù)宕機(jī)情況的發(fā)生。本文采用數(shù)據(jù)庫負(fù)載均衡采用基于Oracle數(shù)據(jù)庫的RAC模式進(jìn)行設(shè)計(jì),建立多節(jié)點(diǎn)的數(shù)據(jù)集群,具體結(jié)構(gòu)如圖3所示。
每一個(gè)節(jié)點(diǎn)在本地硬盤安裝數(shù)據(jù)庫實(shí)例,不存放數(shù)據(jù)文件,兩個(gè)節(jié)點(diǎn)之間通過心跳線進(jìn)行連接,互相通訊,并由此進(jìn)行復(fù)雜均衡調(diào)度。數(shù)據(jù)文件則存儲(chǔ)在由磁盤陣列構(gòu)成的共享存儲(chǔ)上,每一個(gè)節(jié)點(diǎn)將處理完畢的結(jié)果存放于共享存儲(chǔ)上,進(jìn)而保證節(jié)點(diǎn)數(shù)據(jù)的一致性和穩(wěn)定性。
圖3 數(shù)據(jù)庫負(fù)載均衡集群結(jié)構(gòu)
在web平臺(tái)中會(huì)存在一些字典數(shù)據(jù),如性別、名族、政治面貌等。這些字典數(shù)據(jù)為整個(gè)系統(tǒng)高頻訪問。在高并發(fā)的情況,如果每次都對(duì)這些數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢,勢(shì)必會(huì)影響整個(gè)系統(tǒng)的性能,消耗系統(tǒng)資源。本文采用哈希緩存技術(shù)將這些字典數(shù)據(jù)緩存在內(nèi)存中,減少數(shù)據(jù)庫的連接操作。
應(yīng)用平臺(tái)在第一次啟動(dòng)時(shí),完成數(shù)據(jù)加載。在緩存過程中,通過字典數(shù)據(jù)的編碼和名稱形成鍵值對(duì),進(jìn)行哈希散列。關(guān)鍵字的哈希方法為:
value=hash(code,struct_zd)
當(dāng)發(fā)生字典數(shù)據(jù)變化,管理員需要進(jìn)行遠(yuǎn)程數(shù)據(jù)同步,包括數(shù)據(jù)庫和系統(tǒng)內(nèi)存兩部分。具體同步過程如圖4所示。
圖4 遠(yuǎn)程數(shù)據(jù)字典同步過程
一般的應(yīng)用系統(tǒng)的對(duì)于數(shù)據(jù)的統(tǒng)計(jì)都采用實(shí)時(shí)性統(tǒng)計(jì)。由于在統(tǒng)計(jì)的過程中,統(tǒng)計(jì)的結(jié)構(gòu)化查詢語句與數(shù)據(jù)庫的插入、修改和刪除操作會(huì)在一定程度上存在交叉,這就會(huì)導(dǎo)致數(shù)據(jù)庫死鎖的出現(xiàn)。為此本文就高并發(fā)訪問的統(tǒng)計(jì),提出一種緩存統(tǒng)計(jì)結(jié)果方案[3]。
方案為通過建立統(tǒng)計(jì)服務(wù)程序,定時(shí)統(tǒng)計(jì)結(jié)果并進(jìn)行緩存,用戶隨時(shí)訪問緩存的統(tǒng)計(jì)結(jié)果。具體過程為:
(1)在數(shù)據(jù)庫中建立與統(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)給用戶,并在統(tǒng)計(jì)結(jié)果中告知統(tǒng)計(jì)數(shù)據(jù)的截止時(shí)間;
(4)用戶查詢統(tǒng)計(jì)結(jié)果。
結(jié)合軟件的部署和平臺(tái)性能的發(fā)揮,綜合考慮平臺(tái)的性能和穩(wěn)定性,將Web應(yīng)用、數(shù)據(jù)庫服務(wù)、共享存儲(chǔ)和安全審計(jì)納入進(jìn)平臺(tái)的拓?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ù)透傳,防止網(wǎng)絡(luò)斷開情況發(fā)生。平臺(tái)的網(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所示。
考慮到平臺(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ù)庫共享存儲(chǔ)。數(shù)據(jù)中心區(qū)主要進(jìn)行數(shù)據(jù)庫負(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ù)完整性兩個(gè)方面。在注入式攻擊方面,與數(shù)據(jù)的交互過程中避免使用結(jié)構(gòu)化查詢語句直接拼湊,而是采用存儲(chǔ)過程,進(jìn)而達(dá)到對(duì)結(jié)構(gòu)化查詢語句關(guān)鍵字注入的過濾。對(duì)于數(shù)據(jù)完整性安全,平臺(tái)為數(shù)據(jù)庫中的每一條記錄進(jìn)行數(shù)據(jù)簽名,簽名的內(nèi)容包括數(shù)據(jù)庫中的所有字段,具體的簽名過程為:key=MD5(column1,column2,…)
然后在每次操作前都對(duì)記錄數(shù)據(jù)和簽名數(shù)據(jù)進(jìn)行匹配和校驗(yàn),校驗(yàn)通過方可進(jìn)行操作,否則進(jìn)行數(shù)據(jù)糾錯(cuò),檢查數(shù)據(jù)庫日志[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ù)庫負(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].長春理工大學(xué)學(xué)報(bào):自然科學(xué)版,2012,35(4):125-129.