黃宇豪 張?zhí)斐?/p>
(北方工業(yè)大學(xué)信息學(xué)院,北京 100144)
由于近年來互聯(lián)網(wǎng)的興起,網(wǎng)絡(luò)用戶規(guī)模擴(kuò)大,微信、天貓和12306等系統(tǒng)的用戶訪問量迅速增長。因此,高并發(fā)服務(wù)器端設(shè)計十分重要。本文主要利用Go[1-2]、Beego[3]和Nginx負(fù)載均衡技術(shù)實現(xiàn)高并發(fā)的網(wǎng)絡(luò)訪問。文中介紹了讀書交流社區(qū)系統(tǒng)的設(shè)計方法,包括系統(tǒng)框架,模塊劃分和負(fù)載均衡,最后描述了系統(tǒng)的測試情況。
根據(jù)功能需求分析,管理員后臺具有修改書籍分類,排序,統(tǒng)計數(shù)目,書籍自動采集入庫功能。普通用戶和個人中心具有顯示關(guān)注人和粉絲,收藏書籍,個人信息修改,私聊和分享功能。為了達(dá)到高可用的部署效果,采用應(yīng)用服務(wù)器和數(shù)據(jù)服務(wù)器分離。同時為了達(dá)到自適應(yīng)屏幕的效果,采用響應(yīng)式網(wǎng)站設(shè)計。
為了達(dá)到支持多用戶同時在線的效果,系統(tǒng)采用Nginx負(fù)載均衡實現(xiàn)高并發(fā)訪問。Nginx的核心功能是靜態(tài)資源管理器,且Nginx支持高并發(fā)。靜態(tài)資源一般不會改變,所以在生產(chǎn)中,一個web服務(wù)器會使用動態(tài)靜態(tài)資源分離機(jī)制,使用Nginx做靜態(tài)資源的web服務(wù)器,訪問性能優(yōu)秀。Nginx以反向代理模式進(jìn)行負(fù)載均衡,策略調(diào)度被編譯進(jìn)Nginx內(nèi)核的有輪詢和ip_hash,第三方的有fair、url_hash等。
根據(jù)用戶和管理權(quán)限需要,設(shè)置八個模塊,每個模塊實現(xiàn)對應(yīng)的功能,如圖1所示。
閱讀交流社區(qū)采用MVC架構(gòu),如圖2所示。模型層負(fù)責(zé)對核心數(shù)據(jù)存儲,視圖層給用戶展示容,控制器層實現(xiàn)管理層與用戶的交互。
使用Nginx負(fù)載均衡技術(shù)實現(xiàn)高并發(fā),如圖3所示。

圖1 功能模塊圖
該訪問結(jié)構(gòu)支持分流策略,且能承受較高的負(fù)荷壓力,一般可以支持萬次并發(fā)訪問。另一方面,Nginx對網(wǎng)絡(luò)穩(wěn)定性要求少,可以通過ping運(yùn)行負(fù)載函數(shù),同時也能夠檢測內(nèi)部故障,并通過端口返回反饋信息。我們購買域名并配置DNS服務(wù)商,解析域名到服務(wù)器,并配置了LNMP環(huán)境。通過網(wǎng)絡(luò)連接數(shù)據(jù)庫服務(wù)器和應(yīng)用服務(wù)器,最后部署Nginx負(fù)載均衡節(jié)點:配置三臺服務(wù)器,分別在三臺服務(wù)器上部署同樣的Go應(yīng)用程序,然后使用Nginx實現(xiàn)負(fù)載均衡。我們在web面板創(chuàng)建了負(fù)載均衡節(jié)點,添加了三臺后端服務(wù)器,都是作為普通節(jié)點,權(quán)重為1。所有網(wǎng)絡(luò)訪問請求將直接訪問Nginx服務(wù)接口,然后Nginx負(fù)載平衡器選擇實際的服務(wù)器端口。
高可用測試:在Nginx服務(wù)器配置負(fù)載均衡。當(dāng)關(guān)閉任何一個后端應(yīng)用服務(wù)器,或者只保留一個后端應(yīng)用服務(wù)器,網(wǎng)站依然能正常訪問。
壓力測試:通過Apache命令測試,當(dāng)發(fā)送10000個并發(fā)請求時,8080端口訪問仍然穩(wěn)健,測試結(jié)果如下。



圖2 MVC架構(gòu)圖

圖3 Nginx負(fù)載均衡結(jié)構(gòu)

實驗表明,讀書交流社區(qū)系統(tǒng)的特點在于使用Ngnix負(fù)載均衡技術(shù)實現(xiàn)系統(tǒng)的高并發(fā)訪問,支持大量用戶同時在線。壓力測試結(jié)果表明,系統(tǒng)在高并發(fā)壓力以及一個應(yīng)用服務(wù)器停止工作的情況下也能正常訪問。