国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于架構(gòu)優(yōu)化提升高校選課系統(tǒng)性能

2018-11-05 09:57:22丁建峰
科教導(dǎo)刊 2018年23期
關(guān)鍵詞:負(fù)載均衡

丁建峰

摘 要 高校選課系統(tǒng)在實(shí)際選課活動(dòng)中屢屢癱瘓,需要采用何種方式來(lái)改善其整體性能?這里從架構(gòu)優(yōu)化的角度,提出了系統(tǒng)架構(gòu)優(yōu)化的路徑,給出了適用于不同訪問(wèn)規(guī)模、改造成本、技術(shù)要求的架構(gòu)方案,并提出了系統(tǒng)架構(gòu)優(yōu)化實(shí)施的基本步驟。

關(guān)鍵詞 選課系統(tǒng) 架構(gòu)優(yōu)化 Nginx 負(fù)載均衡 LVS

中圖分類(lèi)號(hào):G473.4 文獻(xiàn)標(biāo)識(shí)碼:A DOI:10.16400/j.cnki.kjdkz.2018.08.008

Abstract The course selection system in colleges and universities is often paralyzed in the actual course selection activities. How to improve its overall performance? From the perspective of architecture optimization, this paper puts forward the way of system architecture optimization, gives the architecture scheme suitable for different access scale, transformation cost and technical requirements, and puts forward the basic steps of implementation of system architecture optimization.

Keywords course selection system; architecture optimization; Nginx; load balancing; LVS

0 引言

為了滿(mǎn)足學(xué)生大規(guī)模選課的需要,目前各高校普遍使用選課系統(tǒng)進(jìn)行網(wǎng)上選課。各校在選課的過(guò)程中普遍遇到了系統(tǒng)擁堵、服務(wù)癱瘓的問(wèn)題。主要原因是為了公平起見(jiàn)各校通常指定某一時(shí)間開(kāi)始選課,課程選課基于先選者先得,結(jié)果大量用戶(hù)同時(shí)搶跑,平時(shí)運(yùn)行穩(wěn)定的系統(tǒng)迅速崩潰。

為了解決高并發(fā)訪問(wèn)下WEB應(yīng)用系統(tǒng)的性能問(wèn)題,已有不少研究和實(shí)踐,主要有下述三類(lèi):一是如高宗振、[1]史強(qiáng)、[2]孔祥真 [3]等人對(duì)特定的負(fù)載均衡策略的研究;二是如謝佳運(yùn)、[4]鄧小善、[5]文捷等[6]從系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)角度對(duì)系統(tǒng)性能提升策略的討論;三是綜合上述兩個(gè)維度的研究與實(shí)踐,如潘旭武、[7]郝陽(yáng) [8]等人的研究。

這些研究比較側(cè)重于特定的技術(shù),如某一種負(fù)載均衡方案、某一種查詢(xún)優(yōu)化方法、某一種頁(yè)面性能提升技巧或是若干種技術(shù)的綜合運(yùn)用,但采用了這些技術(shù)或方法未必可以解決選課系統(tǒng)的困境。負(fù)載均衡本身并不能解決選課系統(tǒng)的問(wèn)題,一些學(xué)校為解決問(wèn)題花數(shù)十萬(wàn)部署了負(fù)載均衡設(shè)備選課系統(tǒng)崩潰照舊。其他各種優(yōu)化方法技術(shù)也只是在一定程度、某些環(huán)節(jié)上提升了系統(tǒng)的性能,在大規(guī)模并發(fā)訪問(wèn)情形下這些效果非常有限。要從根本上解決選課系統(tǒng)性能瓶頸問(wèn)題,需從系統(tǒng)架構(gòu)上進(jìn)行改進(jìn),一個(gè)性能可伸縮的彈性架構(gòu)才能真正應(yīng)對(duì)大規(guī)模并發(fā)訪問(wèn)帶來(lái)的挑戰(zhàn)。本文將從系統(tǒng)架構(gòu)的角度討論選課系統(tǒng)性能優(yōu)化的路徑,并討論了高校實(shí)施架構(gòu)優(yōu)化的具體步驟。

1 系統(tǒng)架構(gòu)優(yōu)化路徑

有句話(huà)說(shuō)“架構(gòu)是進(jìn)化而來(lái)的”,意指架構(gòu)優(yōu)化是針對(duì)現(xiàn)有狀況不斷改進(jìn)的過(guò)程,是對(duì)現(xiàn)有的薄弱環(huán)節(jié)進(jìn)行改進(jìn)的過(guò)程。因此本文將從選課系統(tǒng)的初始狀態(tài)開(kāi)始根據(jù)訪問(wèn)量的增加逐步改進(jìn)系統(tǒng)架構(gòu)。

1.1 基于DNS對(duì)WEB站點(diǎn)層進(jìn)行擴(kuò)展

選課系統(tǒng)典型的初始架構(gòu)為“瀏覽器——單WEB服務(wù)器——單數(shù)據(jù)庫(kù)服務(wù)器”模式,隨著用戶(hù)并發(fā)訪問(wèn)量的增加,通常WEB服務(wù)器首先出現(xiàn)服務(wù)瓶頸,因此首先要著手對(duì)WEB站點(diǎn)層進(jìn)行水平擴(kuò)展。

圖1是在初始架構(gòu)基礎(chǔ)上通過(guò)DNS對(duì)WEB站點(diǎn)進(jìn)行水平擴(kuò)展的示意圖,這是一種低成本且十分有效的擴(kuò)展模式,理論上WEB服務(wù)器數(shù)可以無(wú)限擴(kuò)展。具體只需要將各WEB站點(diǎn)IP解析在同一個(gè)域名下,用戶(hù)訪問(wèn)該域名時(shí),DNS輪動(dòng)返回各個(gè)IP。如此實(shí)現(xiàn)了對(duì)WEB服務(wù)器的負(fù)載均衡。這種方式可以迅速擴(kuò)展WEB站點(diǎn)規(guī)模,但有下列弊端:

(1)DNS不會(huì)感知到具體WEB站點(diǎn)的可用性,當(dāng)某個(gè)WEB站點(diǎn)服務(wù)故障(如網(wǎng)絡(luò)中斷、系統(tǒng)崩潰等),用戶(hù)對(duì)這個(gè)站點(diǎn)的訪問(wèn)將失敗。

(2)擴(kuò)容非實(shí)時(shí)。DNS域名解析的生效需要一個(gè)刷新周期。特別是在公網(wǎng)運(yùn)營(yíng)商DNS緩存的刷新時(shí)間更長(zhǎng),可能會(huì)達(dá)數(shù)小時(shí),會(huì)一定程度影響系統(tǒng)使用。

(3)暴露了各個(gè)WEB服務(wù)器的地址。因?yàn)槭腔贒NS解析的,所以每個(gè)WEB服務(wù)器的IP都需公開(kāi)。這帶來(lái)了潛在的風(fēng)險(xiǎn)。

1.2 基于Nginx對(duì)WEB站點(diǎn)層進(jìn)行擴(kuò)展

為了避免圖1 DNS負(fù)載均衡模式的問(wèn)題,可以改用反向代理Nginx對(duì)WEB站點(diǎn)層進(jìn)行水平擴(kuò)展,見(jiàn)圖2。Nginx是一個(gè)高性能的 HTTP 和反向代理服務(wù)器,也是目前使用最為廣泛的HTTP軟負(fù)載均衡器。它可以承擔(dān)相當(dāng)高的負(fù)載壓力,一般能支撐超過(guò)每秒數(shù)萬(wàn)次的訪問(wèn)請(qǐng)求(與服務(wù)器的配置及服務(wù)的優(yōu)化程度有關(guān)),甚至有服務(wù)器經(jīng)優(yōu)化后達(dá)到了支持每秒數(shù)十萬(wàn)的訪問(wèn)請(qǐng)求的水平。Nginx支持對(duì)故障WEB站點(diǎn)的探測(cè)感知,能夠把流量引導(dǎo)到非故障的WEB站點(diǎn),同時(shí)也沒(méi)有DNS負(fù)載均衡模式下暴露過(guò)多IP、擴(kuò)容非實(shí)時(shí)等問(wèn)題。但這種模式也有缺點(diǎn):(1)多了一個(gè)反向代理層,架構(gòu)變復(fù)雜,多了一道反向代理層的延時(shí)。(2)反向代理層的Nginx為單點(diǎn)部署,如發(fā)生故障系統(tǒng)將不可訪問(wèn)。這對(duì)于選課這樣的大規(guī)模正式活動(dòng)來(lái)說(shuō)是一個(gè)風(fēng)險(xiǎn)。

1.3 通過(guò)Nginx集群解決反向代理層高可用問(wèn)題

為避免圖2中反向代理層的單點(diǎn)故障風(fēng)險(xiǎn),圖3用兩臺(tái)Nginx組成一個(gè)集群,分別部署Keepalived,設(shè)置成相同的虛IP,實(shí)現(xiàn)Nginx負(fù)載均衡服務(wù)的高可用。當(dāng)一臺(tái)Nginx掛了,Keepalived能夠探測(cè)到并將流量自動(dòng)遷移到另一臺(tái)Nginx上。Keepalived是一個(gè)運(yùn)行于Linux下的開(kāi)源軟件,主要提供負(fù)載均衡和高可用功能。圖3方案解決了反向代理層的高可用問(wèn)題,但是Nginx集群的資源利用率下降到50%(一主一備)。對(duì)于萬(wàn)人以下的院校來(lái)說(shuō),選課活動(dòng)每秒的HTTP請(qǐng)求峰值一般在10萬(wàn)以下,該架構(gòu)的WEB站點(diǎn)響應(yīng)能力應(yīng)能滿(mǎn)足要求,最多再適當(dāng)提高Nginx服務(wù)器的配置應(yīng)能解決問(wèn)題。但對(duì)于更大規(guī)模的并發(fā)訪問(wèn),超過(guò)了Nginx服務(wù)器單機(jī)系統(tǒng)的處理能力,該如何解決?

1.4 反向代理層性能瓶頸的解決

要解決圖3中反向代理層Nginx集群的性能瓶頸,可以基于DNS對(duì)反向代理層進(jìn)行水平擴(kuò)展(圖4),原理與圖1中DNS對(duì)WEB站點(diǎn)層擴(kuò)展相同。這個(gè)方案下,反向代理層的Nginx集群可以無(wú)限擴(kuò)展,實(shí)現(xiàn)了高性能與高可用;WEB站點(diǎn)層同樣可以不斷擴(kuò)展,實(shí)現(xiàn)了高性能和高可用。

圖4方案中Nginx集群也可以使用其他負(fù)載均衡集群代替,如LVS(Linux Virtual Server)或F5集群。替換后,負(fù)載均衡層多個(gè)LVS或F5集群也通過(guò)DNS實(shí)現(xiàn)彈性擴(kuò)展。相較Nginx,LVS或F5有著更強(qiáng)的處理性能,但部署成本上升。

1.5數(shù)據(jù)層架構(gòu)的優(yōu)化與擴(kuò)展

系統(tǒng)架構(gòu)改到圖4的程度,至少到WEB站點(diǎn)層為止高性能、高可用都得到了保證,但此時(shí)數(shù)據(jù)庫(kù)很可能成為瓶頸了。數(shù)據(jù)層同樣需要進(jìn)行改進(jìn),數(shù)據(jù)層庫(kù)架構(gòu)優(yōu)化的目的同樣是實(shí)現(xiàn)高性能、高可用。

常見(jiàn)的是對(duì)數(shù)據(jù)庫(kù)實(shí)施主從分離、讀寫(xiě)分離。從庫(kù)從主庫(kù)進(jìn)行復(fù)制用于讀取,主庫(kù)用于寫(xiě)操作。通過(guò)設(shè)立多個(gè)從庫(kù)可保證讀的高可用,但沒(méi)有解決寫(xiě)的高可用(以及高性能),另外主庫(kù)寫(xiě)入數(shù)據(jù)、從庫(kù)讀取數(shù)據(jù)的時(shí)間差會(huì)造成兩者數(shù)據(jù)不一致。主、從庫(kù)越多數(shù)據(jù)一致性的問(wèn)題就越多,這些都要額外的算法控制。

數(shù)據(jù)庫(kù) “master--shadow master”雙主架構(gòu)可以解決主從庫(kù)數(shù)據(jù)不一致的問(wèn)題。主庫(kù)master提供讀寫(xiě)服務(wù),另一個(gè)是影子主庫(kù)shadow-master平時(shí)只與master進(jìn)行數(shù)據(jù)同步并作為后備,master掛了后shadow-master迅速頂上變?yōu)閙aster。這個(gè)模式同時(shí)解決讀寫(xiě)的高可用,并且消除了數(shù)據(jù)的不一致性問(wèn)題。但雙主模式,沒(méi)有解決高性能,如何提高性能呢?

首先增加緩存,見(jiàn)圖5。讀數(shù)據(jù)時(shí)首先從緩存讀取,緩存沒(méi)有再到主庫(kù)讀(然后數(shù)據(jù)也復(fù)制到cache一份)。但是主庫(kù)也是寫(xiě)的目標(biāo)庫(kù),因此主庫(kù)與緩存之間也會(huì)出現(xiàn)數(shù)據(jù)不一致問(wèn)題。解決辦法是寫(xiě)之前淘汰緩存數(shù)據(jù)。圖5中還增加了服務(wù)層,這是因?yàn)榫彺嬉?、?shù)據(jù)一致性處理等使得對(duì)數(shù)據(jù)庫(kù)的操作更加復(fù)雜,為了屏蔽這些細(xì)節(jié),讓上層專(zhuān)注于業(yè)務(wù),因此系統(tǒng)架構(gòu)中應(yīng)增設(shè)服務(wù)層負(fù)責(zé)具體的數(shù)據(jù)庫(kù)訪問(wèn),并對(duì)上層(WEB站點(diǎn)層)提供透明數(shù)據(jù)服務(wù)。

其次是對(duì)數(shù)據(jù)庫(kù)進(jìn)行水平擴(kuò)展,也就是進(jìn)行水平切分。水平切分就是把原來(lái)一個(gè)庫(kù)中的數(shù)據(jù)切分一部分到其他的庫(kù)中去,但各庫(kù)之間結(jié)構(gòu)是相同的。選課系統(tǒng)中這種方式尤其適用,如學(xué)生表,完全可以把已畢業(yè)的學(xué)生數(shù)據(jù)分到另一個(gè)庫(kù)中,也可以根據(jù)入學(xué)年份進(jìn)行切分,從而提高數(shù)據(jù)庫(kù)訪問(wèn)性能。圖5進(jìn)行數(shù)據(jù)庫(kù)切分后,變?yōu)?個(gè)庫(kù),見(jiàn)圖6;還可以切分為更多的庫(kù)。這樣數(shù)據(jù)層的水平擴(kuò)展得以實(shí)現(xiàn),根本上解決了數(shù)據(jù)層的性能瓶頸。

1.6 服務(wù)層的擴(kuò)展

數(shù)據(jù)層變得復(fù)雜后,需要引入服務(wù)層,如圖6所示。但是在大規(guī)模并發(fā)訪問(wèn)下,服務(wù)層節(jié)點(diǎn)也可能成為一個(gè)性能瓶頸。服務(wù)層的水平擴(kuò)展是通過(guò)WEB站點(diǎn)層中“服務(wù)連接池”來(lái)進(jìn)行的,增加一個(gè)服務(wù)層節(jié)點(diǎn)只需要再WEB站點(diǎn)的“服務(wù)連接池”中增加一個(gè)連接。理論上服務(wù)節(jié)點(diǎn)也是可以無(wú)限擴(kuò)展的。服務(wù)層的增加與擴(kuò)展需要開(kāi)發(fā)商的支持。

到此,系統(tǒng)在負(fù)載均衡層、WEB站點(diǎn)層、服務(wù)層、數(shù)據(jù)層都實(shí)現(xiàn)了彈性擴(kuò)展,都能提供高性能、高可用的服務(wù),大規(guī)模并發(fā)選課問(wèn)題得到了根本性的解決。

2 系統(tǒng)架構(gòu)優(yōu)化的實(shí)施

2.1 架構(gòu)優(yōu)化的前期準(zhǔn)備

系統(tǒng)架構(gòu)的優(yōu)化與擴(kuò)展,有些是需要開(kāi)發(fā)商支持的,如數(shù)據(jù)庫(kù)架構(gòu)的改造、緩存的設(shè)計(jì)與使用、服務(wù)層的引入等,有的可能甚至需要開(kāi)發(fā)商進(jìn)行比較大的改動(dòng);有些是高校方面比較容易實(shí)施的,如負(fù)載均衡層、WEB站點(diǎn)層的水平擴(kuò)展等。各校應(yīng)該根據(jù)開(kāi)發(fā)商的支持力度、系統(tǒng)改造的預(yù)算情況、自身的技術(shù)能力、現(xiàn)有的設(shè)備設(shè)施以及網(wǎng)上選課工作的具體任務(wù)情況研究架構(gòu)優(yōu)化的具體實(shí)施方案。

2.2 系統(tǒng)架構(gòu)優(yōu)化的步驟

系統(tǒng)的性能優(yōu)化需要理清思路,按步驟實(shí)施。

(1)根據(jù)實(shí)際條件確定優(yōu)化的目標(biāo)架構(gòu)。比如開(kāi)發(fā)商目前不會(huì)也沒(méi)有時(shí)間對(duì)系統(tǒng)層次、數(shù)據(jù)庫(kù)架構(gòu)進(jìn)行改動(dòng),那么圖4可以作為一個(gè)系統(tǒng)架構(gòu)優(yōu)化的基本模型;如果選課人數(shù)也不是很多,那么可以選圖3或圖2;如果對(duì)Ngnix也不熟悉或來(lái)不及部署,那么也姑且可以用圖1來(lái)應(yīng)對(duì)。

(2)按選定的目標(biāo)架構(gòu)基本模型的未擴(kuò)展?fàn)顟B(tài)調(diào)整原有系統(tǒng)。對(duì)調(diào)整后系統(tǒng)在未擴(kuò)展?fàn)顟B(tài)下進(jìn)行壓力測(cè)試,確定其系統(tǒng)性能,能支持多少并發(fā)連接以及多快的響應(yīng)能力。

(3)對(duì)相關(guān)層次進(jìn)行一個(gè)節(jié)點(diǎn)的擴(kuò)展,進(jìn)行壓力測(cè)試,記錄其性能的增量。壓力測(cè)試工具可以用Loadrunner、Jmeter、Tsung等。

(4)根據(jù)選課任務(wù)參與選課的學(xué)生數(shù)量估算峰值的并發(fā)連接、請(qǐng)求數(shù)量,估算相關(guān)層次節(jié)點(diǎn)的水平擴(kuò)展數(shù)量并實(shí)施擴(kuò)展。

(5)對(duì)擴(kuò)展后的系統(tǒng)按峰值壓力進(jìn)行壓力測(cè)試,如果沒(méi)問(wèn)題則投入實(shí)際使用,否則要找出問(wèn)題進(jìn)行調(diào)整,通過(guò)測(cè)試后再投入使用。

3 結(jié)語(yǔ)

本文從選課系統(tǒng)的初始架構(gòu)開(kāi)始,在并發(fā)訪問(wèn)規(guī)模不斷加大、投入改造的預(yù)算逐步增加的假設(shè)下推出了選課系統(tǒng)架構(gòu)優(yōu)化的路徑,并給出了系統(tǒng)架構(gòu)優(yōu)化的實(shí)施步驟。具體的方案需要各校結(jié)合實(shí)際情況來(lái)采用,同時(shí)需要注意各方案的局限點(diǎn),比如“基于DNS對(duì)WEB站點(diǎn)層的擴(kuò)展”需要保證各站點(diǎn)自身不出問(wèn)題,如“基于Nginx(單機(jī))對(duì)WEB站點(diǎn)層擴(kuò)展”需要Nginx服務(wù)可靠同時(shí)注意其本身的性能上限。當(dāng)然系統(tǒng)架構(gòu)的優(yōu)化還有其它很多方法,本文所給的方案僅供參考。

參考文獻(xiàn)

[1] 高宗振.基于負(fù)載均衡的在線(xiàn)選課系統(tǒng)的研究與實(shí)現(xiàn)[D].青島:中國(guó)海洋大學(xué),2012.

[2] 史強(qiáng),管紅杰.基于云動(dòng)態(tài)資源擴(kuò)展的選課系統(tǒng)優(yōu)化實(shí)踐[J].軟件導(dǎo)刊,2016.15(6):77-79.

[3] 孔祥真,張丁,李忠遠(yuǎn).Linux負(fù)載均衡集群技術(shù)在網(wǎng)絡(luò)服務(wù)器中的應(yīng)用[J].軟件導(dǎo)刊,2016.15(12):144-147.

[4] 謝佳運(yùn). ASP.NET網(wǎng)站的系統(tǒng)架構(gòu)和性能優(yōu)化[J].電腦知識(shí)與技術(shù),2008.3(6):1166-1167.

[5] 鄧小善,龍艷軍.高訪問(wèn)量網(wǎng)站性能監(jiān)測(cè)與優(yōu)化的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī),2009(301):149-151.

[6] 文捷,吳慶杰,陳翼,等.復(fù)旦大學(xué)選課系統(tǒng)的性能優(yōu)化策略研究和實(shí)踐[J].中山大學(xué)學(xué)報(bào)(自然科學(xué)版),2009.48:95-99.

[7] 潘旭武,陳啟華,張建勇.高校選課系統(tǒng)性能優(yōu)化研究[J].中國(guó)教育信息化,2013(5):76-78.

[8] 郝陽(yáng).高校教務(wù)管理網(wǎng)上選課系統(tǒng)優(yōu)化研究[D].青島:山東科技大學(xué),2011.

猜你喜歡
負(fù)載均衡
LBS檢索容災(zāi)架構(gòu)研究
Linux負(fù)載均衡集群技術(shù)在網(wǎng)絡(luò)服務(wù)器中的應(yīng)用
Oracle MAA在汽車(chē)行業(yè)電子政務(wù)平臺(tái)中的應(yīng)用
社區(qū)教育平臺(tái)運(yùn)營(yíng)策略研究
軟件(2016年4期)2017-01-20 09:39:56
異構(gòu)環(huán)境下改進(jìn)的LATE調(diào)度算法
基于負(fù)載均衡的云資源調(diào)度策略研究
基于新型VPN 技術(shù)的高校校園網(wǎng)改造
基于云計(jì)算的虛擬實(shí)驗(yàn)系統(tǒng)的設(shè)計(jì)及應(yīng)用
基于離散PSO算法的醫(yī)療云存儲(chǔ)部署策略
多站點(diǎn)同步更新系統(tǒng)的設(shè)計(jì)
科技視界(2016年3期)2016-02-26 20:16:57
平南县| 孟津县| 南投市| 天镇县| 墨竹工卡县| 比如县| 高安市| 泰州市| 资中县| 新巴尔虎右旗| 汪清县| 余庆县| 遂平县| 日土县| 罗源县| 旬阳县| 宣化县| 安平县| 肥东县| 连州市| 思南县| 陕西省| 定西市| 富顺县| 洛隆县| 微山县| 景德镇市| 黄浦区| 邢台市| 五华县| 阳泉市| 岳阳市| 商水县| 神木县| 大同县| 进贤县| 宁明县| 绿春县| 牟定县| 宜兰市| 焉耆|