榮露威,陳麗瓊
(湖南科技學(xué)院 智能制造學(xué)院,湖南 永州 425199)
業(yè)務(wù)的穩(wěn)定和快速是每個(gè)電商平臺(tái)都追求的目標(biāo)。在網(wǎng)上流行的購(gòu)物狂歡節(jié),購(gòu)物網(wǎng)站在短時(shí)間內(nèi)要處理人們大量的數(shù)據(jù)請(qǐng)求,這對(duì)服務(wù)器的壓力是巨大的,如果服務(wù)器承受不了這樣的訪問(wèn)量,導(dǎo)致宕機(jī),業(yè)務(wù)不能進(jìn)行,對(duì)于電商企業(yè)的損失是巨大的。所以開(kāi)發(fā)研究出穩(wěn)定高性能的新架構(gòu)是非常有意義的[1]。
本文設(shè)計(jì)的是Web服務(wù)器集群,首先應(yīng)該滿足現(xiàn)代企業(yè)對(duì)自身網(wǎng)站短時(shí)間內(nèi)能夠承受大量的訪問(wèn)請(qǐng)求,所以針對(duì)這個(gè)需求,采用負(fù)載均衡架構(gòu)設(shè)計(jì),使用一臺(tái)Nginx服務(wù)器作為反向代理服務(wù)器,將其置于架構(gòu)的最前面,只用于接收外部的訪問(wèn)請(qǐng)求,并且通過(guò)配置算法分發(fā)給多個(gè)下級(jí)服務(wù)器處理,而自身并不參與請(qǐng)求處理。
企業(yè)必定要求業(yè)務(wù)有較高的穩(wěn)定性,首先除了有情況維護(hù)之外,網(wǎng)站的運(yùn)行一定是7×24不間斷的,對(duì)于這樣的需求,應(yīng)當(dāng)使用高可用設(shè)計(jì)保證架構(gòu)的穩(wěn)定性,上述提到的Nginx反向代理服務(wù)器,作為對(duì)外表現(xiàn)為Web服務(wù)器的代理服務(wù)器,結(jié)構(gòu)的單節(jié)點(diǎn)處肯定要承受比較大的壓力,單節(jié)點(diǎn)就要考慮單點(diǎn)故障的問(wèn)題。在結(jié)構(gòu)負(fù)載較大可能導(dǎo)致單節(jié)點(diǎn)出現(xiàn)宕機(jī),需要設(shè)計(jì)另一臺(tái)Nginx反向代理服務(wù)器作為備用,一臺(tái)作為主,兩者用heartbeat相連。當(dāng)主故障時(shí),Heatbeat啟動(dòng),資源和進(jìn)程自動(dòng)切換到備用機(jī)器上,保證業(yè)務(wù)繼續(xù)進(jìn)行[2]。
結(jié)構(gòu)設(shè)計(jì)總體分為兩部分,公司內(nèi)網(wǎng)的服務(wù)器和外網(wǎng)的客戶端。公司內(nèi)網(wǎng)采用私有地址,以Nginx作為反向代理服務(wù)器,保證內(nèi)網(wǎng)服務(wù)器安全,單出入口有利于數(shù)據(jù)監(jiān)控和訪問(wèn)控制??蛻舳四M使用外網(wǎng)網(wǎng)段,Nginx代理服務(wù)器上應(yīng)當(dāng)有兩個(gè)網(wǎng)卡,一個(gè)配置外網(wǎng)網(wǎng)段,一個(gè)網(wǎng)卡配置內(nèi)網(wǎng)網(wǎng)段,用來(lái)連通內(nèi)外網(wǎng)。Nginx處理客戶端發(fā)來(lái)的請(qǐng)求,再分發(fā)給下級(jí)的多個(gè)請(qǐng)求處理服務(wù)器,首先判斷是什么種類的訪問(wèn)請(qǐng)求,動(dòng)態(tài)還是靜態(tài),當(dāng)是靜態(tài)時(shí)直接將請(qǐng)求分發(fā)給Squid處理,其他請(qǐng)求則直接分發(fā)給Web服務(wù)器處理。在將請(qǐng)求交給Squid靜態(tài)加速服務(wù)器時(shí)使用加權(quán)輪詢函數(shù)進(jìn)行分發(fā),再加上URL_Hash分發(fā)函數(shù),來(lái)自同一個(gè)URL的請(qǐng)求都會(huì)調(diào)取給同一個(gè)后端去處理,以提高后臺(tái)緩存數(shù)據(jù)命中率[3]。
1.3.1 主干架構(gòu)LNMP搭建
Linux平臺(tái)使用Redhat6.5版本系統(tǒng),Nginx在這個(gè)結(jié)構(gòu)中作為HTTP使用,MYSQL作為數(shù)據(jù)庫(kù),PHP作為Web界面動(dòng)態(tài)處理器。大體結(jié)構(gòu)處理流程如下:
收到外部訪問(wèn)請(qǐng)求,若是請(qǐng)求靜態(tài)數(shù)據(jù),Nginx直接返回靜態(tài)頁(yè)面,若有動(dòng)態(tài)數(shù)據(jù),比如賬號(hào)密碼,交給PHP執(zhí)行網(wǎng)頁(yè)動(dòng)態(tài)數(shù)據(jù)代碼,再通過(guò)接口與數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)請(qǐng)求,處理好的數(shù)據(jù)返回給客戶端,如此就完成一次動(dòng)態(tài)請(qǐng)求處理。第一,搭建前環(huán)境準(zhǔn)備;第二,安裝MySQL;第三,編譯安裝PHP;第四,編譯安裝Nginx[4]。
1.3.2 部署Squid靜態(tài)加速服務(wù)器及Nginx反向代理服務(wù)器
Nginx反向代理主要作用是分發(fā)訪問(wèn)請(qǐng)求給下一級(jí)的Squid靜態(tài)加速服務(wù)器以及代理后端Web對(duì)外表現(xiàn)為Web服務(wù)器,配置文件中設(shè)置與Squid服務(wù)器連接使用3128端口,兩個(gè)Squid服務(wù)器的分發(fā)權(quán)重都為1,表示兩者都等量輪詢分發(fā),后端代理Web的IP地址為192.168.1.40,端口80。
1.3.3 實(shí)現(xiàn)MySQL主從備份
MySQL支持單向,異步,實(shí)時(shí)復(fù)制,復(fù)制過(guò)程中一個(gè)服務(wù)器充當(dāng)主服務(wù)器,而一個(gè)或多個(gè)其他服務(wù)器充當(dāng)從服務(wù)器。復(fù)制的過(guò)程如下:(1)slave端的IO線程連上master端,發(fā)出請(qǐng)求;(2)master端返回給slave端,bin log文件名和位置信息;(3)IO線程把master端的bin log內(nèi)容依次寫(xiě)到slave端relay bin log里,并把master端的bin-log文件名和位置記錄到master.info里;(4)salve端的sql線程,檢測(cè)到relay bin log中內(nèi)容更新,就會(huì)解析relay log里更新的內(nèi)容,并執(zhí)行這些操作。也就是說(shuō)salve執(zhí)行和master一樣的操作而達(dá)到數(shù)據(jù)同步的目的。
1.3.4 部署Heartbeat心跳線
心跳:主和備每隔一定時(shí)間會(huì)有一個(gè)通信信息,稱之為心跳,主要作用的就是備機(jī)監(jiān)控主機(jī)是否存活,若超過(guò)設(shè)置時(shí)間沒(méi)有收到通信信息則視為主機(jī)死亡,備機(jī)接管主機(jī)資源代替其完成工作。心跳線:串口(console)或者RJ-45連接。(1)臺(tái)Nginx代理服務(wù)器上安裝Heartbeat;(2)先只在主Nginx代理服務(wù)器上進(jìn)行配置,配完后,再拷到備用服務(wù)器上;(3)修改認(rèn)證信息配置文件;(4)修改資源配置文件;(5)修改備用nginx服務(wù)器上配置。
第一,在主干結(jié)構(gòu)LNMP測(cè)試中,從用戶角度訪問(wèn)網(wǎng)頁(yè),不管是靜態(tài)頁(yè)面還是動(dòng)態(tài)頁(yè)面,還有兩種組合的Discuz論壇頁(yè)面,都能進(jìn)行訪問(wèn),則說(shuō)明主干結(jié)構(gòu)完整并達(dá)到預(yù)期基本功能。第二,架構(gòu)性能優(yōu)化模塊的測(cè)試。在Memcache模塊測(cè)試中,先用PHP代碼寫(xiě)好一個(gè)測(cè)試頁(yè)面,在訪問(wèn)之后Memcache應(yīng)該對(duì)其進(jìn)行了緩存,關(guān)閉之后應(yīng)該不能進(jìn)行解析訪問(wèn),測(cè)試結(jié)果也和預(yù)期的一樣,表明Memcache功能正常。第三,Opcache模塊測(cè)試,這個(gè)測(cè)試主要是進(jìn)行模塊性能測(cè)試,測(cè)試在模塊有無(wú)開(kāi)啟和不同并發(fā)量的情況下,服務(wù)器的處理速度,通過(guò)對(duì)比分析測(cè)試結(jié)果可以看出,有Opcache的情況下,處理速度更快,而且在并發(fā)量越大的情況下差距越明顯。第四,Squid靜態(tài)加速模塊,在通過(guò)Squid訪問(wèn)了一個(gè)從未訪問(wèn)的頁(yè)面之后,其中的靜態(tài)信息會(huì)被Squid緩存在內(nèi)存中,下次訪問(wèn)則直接調(diào)取內(nèi)存中的靜態(tài)信息,加快訪問(wèn)速度,分析Squid的命中測(cè)試結(jié)果之后,發(fā)現(xiàn)命中靜態(tài)信息,表示Squid功能運(yùn)行正常,再關(guān)閉Squid之后,訪問(wèn)頁(yè)面無(wú)法解析到靜態(tài)信息,也表示了Squid正常運(yùn)行和工作方式。
本文主要目的是得到一個(gè)Linux系統(tǒng)下的新型Web服務(wù)器架構(gòu)解決方案。經(jīng)過(guò)研究如今流行的LAMP和LNMP結(jié)構(gòu) ,了解其中的工作原理,最終完成了一個(gè)能夠部署與企業(yè)生產(chǎn)環(huán)境中的Web服務(wù)器集群解決方案。