黃聰穎 滕建
摘要:多數(shù)高校已建立以“客戶服務(wù)器”為通信模型的多個(gè)信息化系統(tǒng),但教務(wù)管理等業(yè)務(wù)系統(tǒng)仍存在短時(shí)間突發(fā)訪問集中、訪問量大導(dǎo)致服務(wù)器響應(yīng)緩慢甚至宕機(jī)情況發(fā)生。從系統(tǒng)架構(gòu)優(yōu)化的角度,部署Caddy開源網(wǎng)頁服務(wù)器作為反向代理服務(wù)器,通過緩存加快用戶訪問速度,保障業(yè)務(wù)系統(tǒng)服務(wù)器安全。在抗擊新型冠狀病毒肺炎期間,為解決校外師生集中訪問校內(nèi)資源的需求,緩解VPN壓力,通過開放網(wǎng)絡(luò)防火墻中反向代理服務(wù)器而非業(yè)務(wù)系統(tǒng)服務(wù)器的80、443等端口向校外師生提供網(wǎng)頁服務(wù),實(shí)現(xiàn)了在保障業(yè)務(wù)系統(tǒng)服務(wù)器安全的前提下“停課不停教、不停學(xué)”。
關(guān)鍵詞:選課系統(tǒng);Caddy;緩存;HTTP/2;TLS1.3
中圖分類號(hào):TP311
文獻(xiàn)標(biāo)志碼:A
WebbasedCourseSelectionSystemPerformanceOptimizeviaReverseProxyServer
HUANGCongying1,TENGJian2
(1.SchoolofMathematicsandPhysics;2.CenterofInformationScience&Technology,
BeijingUniversityofChemicalTechnology,Beijing100029,China)
Abstract:Manyinformationsystemswhichtake“clientserver”asthecommunicationmodelhavebeensetupincollegesanduniversities.However,therearesomeproblemsinbusinesssystemssuchascourseselectionsystemstillhaveshorttermobstructedduetosuddenaccessconcentrationandthelargeamountofaccesses,resultinginslowresponseorevendowntimeoftheserver.Inthispaper,fromtheperspectiveofsystemarchitectureoptimization,CaddyWebServerisdeployedasareverseproxyservertospeedupuseraccessspeedandensurethesecurityofbusinesssystemserver.DuringthefightagainstCOVID19,inordertosolvetheneedsofoutercampusteachersandstudentstoconcentrateonaccessingschoolresources,alleviatethepressureofVPN,thedesigncanprovideWebservicestooutercampusteachersandstudentsthroughthe80and443portsofreverseproxyserverinsteadofthebusinesssystemserver.
Keywords:courseselectionsystem;Caddyserver;cache;HTTP/2;TLS1.3
0引言
概述通過網(wǎng)絡(luò)進(jìn)行選課是教學(xué)管理現(xiàn)代化、信息化的體現(xiàn)之一,但是選課系統(tǒng)又有其特殊性——每個(gè)學(xué)生都想盡快的選到自己心儀的課程,這就導(dǎo)致了在開始選課的前幾個(gè)小時(shí)會(huì)出現(xiàn)短時(shí)間大量學(xué)生同時(shí)訪問選課系統(tǒng)的情況,從而出現(xiàn)選課系統(tǒng)響應(yīng)緩慢,無法加載的現(xiàn)象,見此情形學(xué)生們更會(huì)繼續(xù)刷新導(dǎo)致選課系統(tǒng)持續(xù)高負(fù)載,形成惡性循環(huán)[1]。
北京化工大學(xué)一貫重視本科和研究生教務(wù)管理信息化建設(shè),不斷提升教務(wù)管理工作的質(zhì)量和水平。學(xué)校本科教務(wù)管理系統(tǒng)于2004年上線運(yùn)行,于2016年進(jìn)行系統(tǒng)版本升級(jí),研究生管理系統(tǒng)于2013年上線。兩系統(tǒng)都采用B/S架構(gòu),滿足學(xué)分制培養(yǎng)、通識(shí)教育培養(yǎng)模式,支持校院兩級(jí)管理模式,具有培養(yǎng)方案管理、教學(xué)計(jì)劃管理、學(xué)籍管理、排課管理、成績(jī)管理等功能模塊,涵蓋了教學(xué)管理的各個(gè)環(huán)節(jié)。學(xué)生通過瀏覽器訪問業(yè)務(wù)系統(tǒng),即訪問網(wǎng)上選課系統(tǒng)完成選課、課程查詢、成績(jī)查詢等操作。
1現(xiàn)狀與原因分析
北京化工大學(xué)教務(wù)管理系統(tǒng)架構(gòu)為兩臺(tái)實(shí)體宿主機(jī)虛擬化為一臺(tái)Linux操作系統(tǒng)邏輯機(jī)做負(fù)載均衡,并使用ApacheTomcat作為服務(wù)端。ApacheTomcat是一個(gè)開源的JavaServlet容器,它能很好地處理JSP動(dòng)態(tài)頁面,同時(shí)也自帶有Connecter處理HTTP請(qǐng)求,但其處理靜態(tài)資源時(shí)的性能與Apache等網(wǎng)頁服務(wù)器相比較差,在高并發(fā)時(shí)尤其明顯[2]。同時(shí),當(dāng)用戶選課時(shí),無論是靜態(tài)的頁面資源的加載,還是數(shù)據(jù)庫的操作,都會(huì)非常消耗磁盤I/O的性能。結(jié)合當(dāng)前機(jī)械硬盤和固態(tài)硬盤的4K性能差距,若教務(wù)管理系統(tǒng)服務(wù)器不是使用固態(tài)存儲(chǔ)設(shè)備的話,磁盤極容易成為性能瓶頸[3]。因此,在選課期間的前1小時(shí)內(nèi),學(xué)生訪問教務(wù)管理系統(tǒng)經(jīng)常會(huì)出現(xiàn)如主頁加載過長(zhǎng),甚至長(zhǎng)達(dá)近1分鐘、出現(xiàn)無原因提示登錄超時(shí)導(dǎo)致被下線、管理端提示服務(wù)器CPU滿載等問題。
2解決方案
保證教務(wù)管理系統(tǒng)的平穩(wěn)運(yùn)行,保障日常教學(xué)工作有序開展,采取在教務(wù)管理系統(tǒng)和客戶端中間部署反向代理服務(wù)器的穩(wěn)妥方案。主要優(yōu)點(diǎn)如下:1)提高業(yè)務(wù)系統(tǒng)服務(wù)器安全。外網(wǎng)用戶通過反向代理訪向教務(wù)系統(tǒng)服務(wù)器,只能獲取反向代理服務(wù)器的IP地址和端口號(hào),無法獲取業(yè)務(wù)系統(tǒng)服務(wù)器IP地址和端口號(hào),且反向代理服務(wù)器上未保存任何信息資源,所有網(wǎng)頁程序都保存在教務(wù)管理系統(tǒng)服務(wù)器上,對(duì)反向代理服務(wù)器的攻擊并不能教育管理系統(tǒng)受到破壞。2)分擔(dān)網(wǎng)絡(luò)壓力。在業(yè)務(wù)系統(tǒng)服務(wù)器前放置Nginx和Caddy反向代理服務(wù)器,在DNS服務(wù)器上映射教育網(wǎng)和公網(wǎng)IPv4、IPv6地址記錄,分擔(dān)訪問壓力,開放網(wǎng)絡(luò)防火墻中反向代理服務(wù)器而非業(yè)務(wù)系統(tǒng)服務(wù)器的80、443等端口,同時(shí)反向代理服務(wù)器的緩存功能也加快了用戶的訪問速度。3)加快了對(duì)業(yè)務(wù)系統(tǒng)服務(wù)器的訪問速度,實(shí)現(xiàn)對(duì)HTTP請(qǐng)求頁面內(nèi)容進(jìn)行壓縮、緩存,以及可向用戶提供獨(dú)立于業(yè)務(wù)系統(tǒng)服務(wù)器的的安全超文本傳輸協(xié)議HTTPS和安全傳輸層協(xié)議TLS,有效保證了服務(wù)器與用戶之間的數(shù)據(jù)傳輸?shù)谋C苄院屯暾浴?/p>
綜上所述,采取分別使用Nginx和Caddy作為服務(wù)端,在教務(wù)管理系統(tǒng)前端部署兩套反向代理服務(wù)器的方案,如圖1所示。
通過DNS做負(fù)載均衡分擔(dān)網(wǎng)絡(luò)請(qǐng)求,從而提高服務(wù)器處理大量并發(fā)服務(wù)能力。
Nginx(“EngineX”)是俄羅斯IgorSysoev(伊戈?duì)枴と饕颍┚帉懙囊豢罡咝阅艿木W(wǎng)頁和反向代理服務(wù)器。在高并發(fā)的情況下,Nginx是Apache服務(wù)器不錯(cuò)的替代品,它支持高達(dá)500000個(gè)并發(fā)連接數(shù)的響應(yīng),而內(nèi)存、CPU等系統(tǒng)資源消耗卻非常低,運(yùn)行非常穩(wěn)定。Nginx已在俄羅斯最大的門戶網(wǎng)站RamblerMedia上運(yùn)行多年,且俄羅斯超過20%的虛擬主機(jī)平臺(tái)采用Nginx作為反向代理服務(wù)器。在國(guó)內(nèi),已經(jīng)有新浪、豆瓣網(wǎng)和迅雷等多家網(wǎng)站使用Nginx作為網(wǎng)頁服務(wù)器或反向代理服務(wù)器[5],Nginx、Caddy等網(wǎng)頁服務(wù)器性能及應(yīng)用這些服務(wù)器的網(wǎng)站百分比統(tǒng)計(jì),如表1、表2所示。
Caddy是由GitHub用戶MatthewHolt開發(fā)的一個(gè)開源的、使用Golang編寫、支持HTTP/2的軟件網(wǎng)頁服務(wù)器。它使用Golang標(biāo)準(zhǔn)庫提供HTTP功能,原生擁有了Golang的多線程高并發(fā)的特性。其顯著的特性是通過集成ACME協(xié)議,從證書供應(yīng)商LetsEncrypt處獲取ECC算法數(shù)字證書并默認(rèn)啟用安全的超文本傳輸協(xié)議HTTPS,是第一個(gè)無
需額外配置即可提供HTTPS特性網(wǎng)頁服務(wù)器。Caddy可以直接作為網(wǎng)頁服務(wù)器,也可以作為反向代理和負(fù)載均衡器提供服務(wù)。使用Caddy網(wǎng)頁服務(wù)器的網(wǎng)站百分比歷史趨勢(shì)、流行度及流量市場(chǎng)地位,如圖2、圖3所示。
Caddy網(wǎng)頁服務(wù)器通過插件的形式實(shí)現(xiàn)其多數(shù)功能,并通過一個(gè)名為Caddyfile的配置文件進(jìn)行配置,支持超文本傳輸協(xié)議HTTP/2版本及傳輸層加密協(xié)議TLS1.3,采用gzip壓縮技術(shù),虛擬主機(jī)可支持基于傳輸層UDP協(xié)議的QUIC協(xié)議,該協(xié)議正處于試驗(yàn)階段,互聯(lián)網(wǎng)工程任務(wù)組(IETF)已提議將其命名為HTTP/3版本[6]協(xié)議[7]。
盡管相比于Caddy,Nginx擁有更高的靜態(tài)頁面響應(yīng)性能,但在北京化工大學(xué)的選課系統(tǒng)的優(yōu)化部署中,本文更傾
向于使用易于上手,設(shè)計(jì)之初原生支持多線程,HTTP/2以及自動(dòng)簽發(fā)數(shù)字證書的Caddy,故下文的具體方案均基于Caddy來配置。
3性能優(yōu)化
3.1主要策略
1)緩存靜態(tài)資源到內(nèi)存中,當(dāng)用戶訪問頁面時(shí),可直接從內(nèi)存讀取文件大小不大于1MB的“小”文件,無需從硬盤讀取,因內(nèi)存具有極高的4K吞吐性能,故可解決磁盤瓶頸。
2)開啟文件壓縮程序“gzip”,節(jié)省網(wǎng)絡(luò)帶寬,緩解網(wǎng)絡(luò)瓶頸。
3)采用HTTP/2協(xié)議,將原來HTTP/1.1用的6條TCP連接用1條TCP連接進(jìn)行連接復(fù)用,減少TCP連接建立握手時(shí)的開銷,避免出現(xiàn)隊(duì)頭阻塞[8]。
4)提供傳輸層加密協(xié)議TLS1.3的EarlyData,實(shí)現(xiàn)0RTT的支持[9]。
5)采用“TCPBBR”擁擠調(diào)度算法,代替Linux默認(rèn)的“Cubic”算法,以增加高負(fù)載,高丟包時(shí)的TCP網(wǎng)絡(luò)利用率[10]。
3.2具體實(shí)現(xiàn)
1)將DNS服務(wù)器中教務(wù)管理系統(tǒng)的解析記錄映射到Caddy服務(wù)器的IPv4和IPv6地址上,即將Caddy服務(wù)器為教務(wù)管理系統(tǒng)的反向代理服務(wù)器,修改Caddy配置,利用“ip_hash”調(diào)度規(guī)則對(duì)多臺(tái)教務(wù)系統(tǒng)Tomcat網(wǎng)頁服務(wù)器配置負(fù)載均衡。
2)對(duì)來自http:80端口的訪問請(qǐng)求進(jìn)行HTTP303重定向到https:443端口,用以防止中間人攻擊以及啟用http/2協(xié)議。此處返回303狀態(tài)碼而不是301狀態(tài)碼,是保留對(duì)緊急情況出現(xiàn)時(shí)可平滑過渡到原有的不支持https的教務(wù)管理系統(tǒng)的兼容性[11]。
3)編譯“http.cache”插件,添加“cache”參數(shù),將Caddy作為緩存服務(wù)器,將圖片,CSS,JS文件等靜態(tài)資源都進(jìn)行了緩存,有效的減少對(duì)tomcat的訪問。
4)添加“gzip”參數(shù),對(duì)網(wǎng)絡(luò)數(shù)據(jù)進(jìn)行壓縮,減少不必要的網(wǎng)絡(luò)開銷。
5)添加“l(fā)og”參數(shù),對(duì)訪問行為進(jìn)行記錄,以進(jìn)行后續(xù)分析。
6)添加“keepalive”參數(shù),減少重復(fù)建立TCP鏈接對(duì)上游服務(wù)器帶來的負(fù)載。
7)添加“header_upstream”參數(shù),并設(shè)置XRealIP,XForwardedFor參數(shù)為固定的反向代理服務(wù)器的IPv4地址,以保留和原不支持IPv6的教務(wù)管理系統(tǒng)的兼容性,防止POST選課請(qǐng)求時(shí)返回“未知錯(cuò)誤”的提示。
8)添加“try_duration”參數(shù),以提供教務(wù)管理服務(wù)器負(fù)責(zé)均衡功能。
9)編譯“http.prometheus”模塊,利用Prometheus和Grafana程序提供一個(gè)可視化的統(tǒng)計(jì)面板,用來實(shí)時(shí)監(jiān)控Caddy的工作狀態(tài)。
3.3應(yīng)急方案
1)當(dāng)出現(xiàn)頁面訪問異常時(shí),可立即將DNS記錄進(jìn)行修改,將映射修改為原教務(wù)管理系統(tǒng)服務(wù)器IP地址。因Caddy服務(wù)器已設(shè)置303SeeOther臨時(shí)重定向,當(dāng)用戶關(guān)閉瀏覽器再重新打開時(shí),會(huì)重新訪問DNS服務(wù)器對(duì)域名進(jìn)行解析,將不再訪問反向代理服務(wù)器而連接回教務(wù)管理系統(tǒng)。
2)利用supervisord守護(hù)腳本監(jiān)視Caddy進(jìn)程的運(yùn)行情況,保證其在意外退出后能自動(dòng)重啟,實(shí)現(xiàn)出錯(cuò)后快速恢復(fù)的目標(biāo)。
3.4模擬測(cè)試結(jié)果
本文使用壓力測(cè)試工具h(yuǎn)ey對(duì)教務(wù)管理系統(tǒng)進(jìn)行測(cè)試。參數(shù)為c1000z5mdisablekeepaliveh2(即啟用http/2協(xié)議并禁止httpkeepalive,設(shè)置并發(fā)連接數(shù)為1000,持續(xù)測(cè)試5分鐘),測(cè)試前通過ulimitn65536命令解除shell資源限制,代理服務(wù)器響應(yīng)結(jié)果為1.09秒。當(dāng)提高并發(fā)數(shù)至2000時(shí),響應(yīng)時(shí)間僅為1.52秒,兩次測(cè)試得到的響應(yīng)時(shí)間結(jié)果都遠(yuǎn)小于直接壓力測(cè)試教務(wù)管理系統(tǒng)服務(wù)器的響應(yīng)時(shí)間,效果較好,對(duì)比結(jié)果如表3所示。
因設(shè)置了緩存機(jī)制,返回的分組包頭里會(huì)加入xcachestatus字段并記錄在日志里用于分析,此字段有miss、hit、bypass及skip共4種狀態(tài)。2019年12月26日至2020年1月10日正選課期間,進(jìn)行小范圍實(shí)戰(zhàn)測(cè)試,通過分析日志文件access.log,如表4、圖4、圖5所示。
用戶請(qǐng)求的緩存命中率高達(dá)41%。若除去由POST請(qǐng)求產(chǎn)生的Cachebypass和因uid變化造成的miss,緩存的命中率會(huì)更高。有效加快了用戶的訪問速度。
4總結(jié)
抗擊新型冠狀病毒肺炎疫情以來,北京化工大學(xué)為保障“停課不停教、不停學(xué)”,針對(duì)“本科教務(wù)管理系統(tǒng)”、“在線綜合教育平臺(tái)”和“Moodle教學(xué)平臺(tái)”部署Caddy反向代理服務(wù)。2月17日為開學(xué)第一日,全校師生通過反向代理服務(wù)器訪問我校教學(xué)、教務(wù)等系統(tǒng)的網(wǎng)站瀏覽量(PV)為:電腦端6,392,467次,同比前一日上升89%,“優(yōu)慕課”APP為2,689,619次,同比前一日上升114%。15時(shí)20分,TCP連接數(shù)為9330,到達(dá)當(dāng)日峰值,同比前一日上升337%,如圖5所示。通過反向代理服務(wù),有效地分流VPN服務(wù)器訪問壓力,保障了教學(xué)、科研、管理工作有序開展。
參考文獻(xiàn)
[1]許雯.基于Web的選課系統(tǒng)的設(shè)計(jì)與性能優(yōu)化[J].科技與創(chuàng)新,2017(16):127.
[2]JUSTUniversity.(靜態(tài)資源處理)nginx比tomcat強(qiáng)在哪?[EB/OL].(2019June26).https://juejin.im/post/5d1301c4f265da1b7b319a82.
[3]從機(jī)械硬盤到SSD:高性能I/O之路[EB/OL].搜狐網(wǎng)(2016August5).http://www.sohu.com/a/109200399116463
[4]Comparisonofwebserversoftware[EB/OL].Wikipedia,(2020July27).https://en.wikipedia.org/wiki/Comparisonofwebserversoftware.
[5]張宴.實(shí)戰(zhàn)nginx:取代Apache的高性能Web服務(wù)器[M].北京:電子工業(yè)出版社,2010.
[6]HypertextTransferProtocolVersion3(HTTP/3)[EB/OL].(2020September11).https://quicwg.org/basedrafts/draftietfquichttp.html.
[7]Caddy[EB/OL].維基百科,(2020January15).https://en.wikipedia.org/wiki/Caddy(webserver).
[8]IETFRFC7540[EB/OL].(2015May).https://tools.ietf.org/html/rfc7540.
[9]IETFRFC8446[EB/OL].(2018August).https://tools.ietf.org/html/rfc8446#section4.2.10.
[10]NealCardwell,YuchungCheng,C.StephenGunn,etal.BBR:CongestionBasedCongestionControl[J/OL].https://queue.acm.org/detail.cfm?id=3022184.
[11]HTTP303FromWikipedia,thefreeencyclopedia[EB/OL].(2020January28).https://en.wikipedia.org/wiki/HTTP303.
(收稿日期:2020.03.25)