黃聰穎 滕建



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