本站小編為你精心準(zhǔn)備了中小型網(wǎng)站服務(wù)器架構(gòu)設(shè)計(jì)研究參考范文,愿這些范文能點(diǎn)燃您思維的火花,激發(fā)您的寫作靈感。歡迎深入閱讀并收藏。
摘要:傳統(tǒng)的網(wǎng)站中,為了提高性能使用更多CPU、更大內(nèi)存、更強(qiáng)的磁盤陣列的小型機(jī),這無(wú)疑會(huì)使網(wǎng)站初期就要投入大量成本。由于成本的原因,中小型網(wǎng)站不可能選擇昂貴的小型機(jī)。介紹一個(gè)中小型網(wǎng)站的架構(gòu)設(shè)計(jì),使用多臺(tái)普通服務(wù)器搭建網(wǎng)站能夠?qū)崿F(xiàn)高可靠性、高性能、可伸縮性等特征。
關(guān)鍵詞:服務(wù)器;高性能;可伸縮性
隨著互聯(lián)網(wǎng)的普及,越來(lái)越多的個(gè)人、機(jī)構(gòu)、企業(yè)接入互聯(lián)網(wǎng)。對(duì)于一些機(jī)構(gòu)和企業(yè)來(lái)說(shuō),建設(shè)網(wǎng)站可以展示自身,開(kāi)展相關(guān)業(yè)務(wù),這幾乎是當(dāng)前這個(gè)時(shí)代必不可少的部分。對(duì)于這些網(wǎng)站來(lái)說(shuō),首先,應(yīng)該要有較高的可靠性,在成本允許的范圍內(nèi)減少一年中的故障時(shí)間。除了選擇可靠性高的服務(wù)器、磁盤陣列外,提高可靠性最有效的方法是使用雙機(jī)或多機(jī)熱備份。其次,要有較高的安全性,安全性包括保密性、完整性、和可用性。保密性就是要確保重要信息不被非授權(quán)地竊取,這主要依賴于軟件系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn);完整性要確保信息不被偽造、篡改、刪除以及意外丟失,這除了軟件系統(tǒng)的設(shè)計(jì)外,在服務(wù)器上可以通過(guò)雙機(jī)備份,異地?cái)?shù)據(jù)備份實(shí)現(xiàn);服務(wù)器上的可用性主要體現(xiàn)在能抵抗各種類型的拒絕服務(wù)攻擊(DenialofService)。第三,服務(wù)器架構(gòu)應(yīng)具備可伸縮性,對(duì)于企業(yè)或機(jī)構(gòu)來(lái)說(shuō),初期可能業(yè)務(wù)量少,用戶訪問(wèn)量少,需要的服務(wù)器性能也低,隨著時(shí)間的推移,更多的用戶訪問(wèn),需要更強(qiáng)的服務(wù)器能力。這時(shí)需要增加服務(wù)器來(lái)分擔(dān)用戶訪問(wèn)負(fù)荷,這一過(guò)程中架構(gòu)不應(yīng)有大的調(diào)整,特別是軟件部分不應(yīng)有大調(diào)整,因?yàn)檐浖闹匦麻_(kāi)發(fā)需要消耗大量的人力。
1服務(wù)器的架構(gòu)設(shè)計(jì)
1.1整體架構(gòu)設(shè)計(jì)
架構(gòu)如圖1所示,服務(wù)器類型分為反向服務(wù)器、Web服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器。對(duì)于初期小型網(wǎng)站來(lái)說(shuō),可以根據(jù)情況將這三種類型的服務(wù)器部署到一臺(tái)物理服務(wù)器上,以節(jié)約成本。當(dāng)需要擴(kuò)展時(shí),將其分布到多臺(tái)物理服務(wù)器上。
1.2操作系統(tǒng)的選擇
目前在網(wǎng)站建設(shè)中最常見(jiàn)的操作系統(tǒng)是Linux和WindowsServer系統(tǒng),Linux的優(yōu)點(diǎn)體現(xiàn)在它是開(kāi)源免費(fèi)的軟件,不需要額外支付軟件許可費(fèi)用。同時(shí)多數(shù)服務(wù)器軟件如Redis、Nginx、MyCat等在Linux平臺(tái)上有更好的表現(xiàn)。Windows的優(yōu)勢(shì)主要體現(xiàn)在其操作日常人們的操作習(xí)慣類似,沒(méi)有特殊情況應(yīng)選擇Linux操作系統(tǒng)。
1.3服務(wù)器軟件的選擇
多數(shù)支持HTTP協(xié)議的Web服務(wù)器都能支持反向(Reverseproxy),如Nginx、Apache、Squid、Lighttpd等,其中Nginx擁有更好的性能、內(nèi)存占用少,特別是Nginx社區(qū)比較活躍,軟件功能模塊也多,特別是在高并發(fā)情況下比Apache有更好的性能[1-2],所以推薦使用Nginx。
1.4Web服務(wù)器的選擇
Web服務(wù)器的選擇更加依賴于軟件架構(gòu)的設(shè)計(jì),目前常見(jiàn)的后端開(kāi)發(fā)技術(shù)有PHP、Java等,如果使用PHP開(kāi)發(fā)可以選擇php-fpm或者Apache,如果使用Java技術(shù),多使用Tomcat。
1.5數(shù)據(jù)庫(kù)服務(wù)器的選擇
對(duì)于中小型網(wǎng)站來(lái)說(shuō),多使用免費(fèi)的MySQL作為數(shù)據(jù)庫(kù),當(dāng)然也可以根據(jù)實(shí)際情況使用Oracle、PostgreSQL等。
2服務(wù)器相關(guān)技術(shù)設(shè)計(jì)
2.1Nginx反向設(shè)計(jì)
配置如下所示,在根的位置(/)將所有的請(qǐng)求轉(zhuǎn)發(fā)到反向abc(upstreamabc)上,可根據(jù)實(shí)際情況調(diào)整,比如將靜態(tài)的HTML和JPEG調(diào)整到特定的服務(wù)器上。要注意根據(jù)軟件的情況將HTTP報(bào)頭傳到后端,主要配置如下所示:反向可以HTTP請(qǐng)求分配后多個(gè)后端服務(wù)器上,達(dá)到負(fù)荷分擔(dān)的效果。同時(shí),如果某個(gè)服務(wù)器發(fā)生故障,會(huì)被剔除出去,實(shí)現(xiàn)多機(jī)熱備份的功能[3]。Nginx有多種負(fù)荷均衡方式,默認(rèn)情況下采用輪詢的方式,另外還可以使用ip_hash和權(quán)重等方式。特別要注意的是除了采用ip_hash方式,其他的方式會(huì)導(dǎo)致同一用戶的請(qǐng)求分配到不同的服務(wù)器上,這時(shí)應(yīng)考慮使用Session共享技術(shù),保證數(shù)據(jù)的正確性[4]。
2.2文件同步設(shè)計(jì)
當(dāng)有多臺(tái)web服務(wù)器時(shí),需要保證文件內(nèi)容的同步。Unison是一個(gè)多平臺(tái)上的文件同步工具,能夠自動(dòng)完成兩臺(tái)服務(wù)器目錄文件的同步,它支持SSH、RSH和Socket等多種網(wǎng)絡(luò)協(xié)議的同步。Unison安裝后會(huì)在用戶目錄下生成一個(gè)名為.unison的隱藏目錄,在其中存放配置文件、日志文件等。default.prf是其配置文件,關(guān)鍵配置如下:如果是快速檢查,unison會(huì)根據(jù)文件生成的時(shí)間來(lái)確定版本的先后,是否需要同步。否則會(huì)對(duì)比兩個(gè)文件的異同,多數(shù)情況下使用快速檢查即可。配置好后利用,利用cron計(jì)劃任務(wù)定期調(diào)用unison即可,要注意非快速檢察花費(fèi)時(shí)間非常長(zhǎng),不適合頻繁調(diào)用。
2.3數(shù)據(jù)庫(kù)主從復(fù)制設(shè)計(jì)
對(duì)于一般的中小型網(wǎng)站推薦使用免費(fèi)的MySQL數(shù)據(jù)庫(kù),主從復(fù)制就是一臺(tái)MySQL數(shù)據(jù)庫(kù)服務(wù)器擔(dān)任主服務(wù)器(Master),多臺(tái)服務(wù)器擔(dān)任從服務(wù)器(Slave),可以向主服務(wù)器中讀或者寫數(shù)據(jù),但只能對(duì)從服務(wù)器執(zhí)行讀操作。從服務(wù)器根據(jù)主服務(wù)器發(fā)來(lái)的日志信息,和主服務(wù)器保持同步[2]。但這種同步是非實(shí)時(shí)的,比如向主服務(wù)器寫入一條數(shù)據(jù),立刻讀從服務(wù)器,不會(huì)得到更新后的數(shù)據(jù),這是開(kāi)發(fā)軟件的人員要注意的地方。因?yàn)閺姆?wù)器是依賴主服務(wù)器的日志才能更新數(shù)據(jù)庫(kù),因此要打開(kāi)日志查看主服務(wù)器的日志狀態(tài),并記錄日志位置,然后在從服務(wù)器上將日志調(diào)整到與主服務(wù)器相同的位置即可。
2.4讀寫分離的設(shè)計(jì)
數(shù)據(jù)庫(kù)實(shí)現(xiàn)主從復(fù)制后,這對(duì)軟件開(kāi)發(fā)者不是透明的,因?yàn)閷憯?shù)據(jù)是一個(gè)服務(wù)器,讀數(shù)據(jù)又是另一個(gè)服務(wù)器,那么可以使用數(shù)據(jù)庫(kù)中間件技術(shù)屏蔽這些差別。MyCat就是其中的佼佼者,它能夠?qū)崿F(xiàn)分庫(kù)分表,讀寫分離,故障服務(wù)器剔除等。軟件開(kāi)發(fā)者將不再需要考慮讀寫分離的軟件在其中添加一個(gè)讀服務(wù)器一個(gè)寫服務(wù)器,主要配置如下:
2.5session共享設(shè)計(jì)
使用Nginx反向,可能會(huì)出現(xiàn)同一用戶的請(qǐng)求分發(fā)到不同的服務(wù)器上,這樣必須保證用戶數(shù)據(jù)的一致性。儲(chǔ)存在數(shù)據(jù)庫(kù)的數(shù)據(jù)是多臺(tái)服務(wù)器共享的,不會(huì)出現(xiàn)不一致的情況,而用戶的session數(shù)據(jù)是在服務(wù)器上存儲(chǔ),不能多機(jī)共享,因此反這種情況必須實(shí)現(xiàn)session共享。現(xiàn)在常見(jiàn)的是使用緩存數(shù)據(jù)庫(kù)如Redis、Memcache。相對(duì)來(lái)說(shuō)Redis功能比較豐富,除了支持Key/Value類型的數(shù)據(jù)外,還支持list、set、hash等數(shù)據(jù)類型,另外redis還能把數(shù)據(jù)持久化到硬盤中。Memcache的只能將K/V類型的數(shù)據(jù)存在內(nèi)存中,程序異常結(jié)束將失去所有數(shù)據(jù)。這里我們以Memcache+PHP為例,實(shí)現(xiàn)安裝好Memcache,以及PHP中的Memcache模塊,在PHP的配置文件PHP.ini中完成如下配置
3結(jié)語(yǔ)
傳統(tǒng)的網(wǎng)站中,為了提高性能使用更多CPU、更大內(nèi)存、更強(qiáng)的磁盤陣列的小型機(jī),這無(wú)疑會(huì)使網(wǎng)站初期就要投入大量成本。使用多臺(tái)普通服務(wù)器搭建網(wǎng)站能夠?qū)崿F(xiàn)高可靠性、高性能以及易拓展性,這種方案更加適合于中小型網(wǎng)站的建設(shè)。
參考文獻(xiàn)
[1]凌質(zhì)億,劉哲星,曹蕾.高并發(fā)環(huán)境下Apache與Nginx的I/O性能比較[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2013,22(6):204-208.
[2]邢志峰.MySQL主從復(fù)制的研究與應(yīng)用[J].電子技術(shù)與軟件工程,2017(15):188.
[3]李緒成,劉鑫.大型網(wǎng)站應(yīng)用架構(gòu)對(duì)比研究[J].軟件工程,2017,20(11):30-32.
[4]楊美珍.基于PHP的多服務(wù)器共享SESSION的方法[J].信息通信,2013(6):108-109.
作者:梁劍 石巖嶺 單位:太原工業(yè)學(xué)院計(jì)算機(jī)工程系