中小型網(wǎng)站架構(gòu)分析及優(yōu)化
以上網(wǎng)站架構(gòu)廣泛運(yùn)用中大型網(wǎng)站中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入網(wǎng)站運(yùn)維朋友們,進(jìn)一步對網(wǎng)站架構(gòu)認(rèn)識(shí),從而自己形成一套架構(gòu)概念。...
先看網(wǎng)站架構(gòu)圖:
以上網(wǎng)站架構(gòu)廣泛運(yùn)用中大型網(wǎng)站中,本文從架構(gòu)每一層分析所用主流技術(shù)和解決手段,有助于初入網(wǎng)站運(yùn)維朋友們,進(jìn)一步對網(wǎng)站架構(gòu)認(rèn)識(shí),從而自己形成一套架構(gòu)概念。
第一層:CDN
國內(nèi)網(wǎng)絡(luò)分布主要南電信北聯(lián)通,造成跨地區(qū)訪問延遲大問題,對于有一定訪問量網(wǎng)站來說,增加CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))層可有效改善此現(xiàn)象,也是網(wǎng)站加速的最好選擇。CDN把網(wǎng)站頁面緩存到全國分布的節(jié)點(diǎn)上,用戶訪問時(shí)從最近的機(jī)房獲取數(shù)據(jù),這樣大大減少網(wǎng)絡(luò)訪問的路徑。如果想自己搭建CDN,不建議這么做,因?yàn)槭裁茨??其?shí)說白了,就是什么事別往運(yùn)維上攔。CDN架構(gòu)部署不復(fù)雜,影響效果的因素卻很多,后期管理維護(hù)也比較復(fù)雜,想達(dá)到預(yù)期的效果確非易事,這是一個(gè)費(fèi)力不討好的活,最后老板還是感覺是你能力不足。建議找專做CDN的公司,費(fèi)用也不貴,有抗流量攻擊能力,效果也很好,運(yùn)維也少很多事,何樂而不為呢!
第二層:反向代理(網(wǎng)頁緩存)
如果CDN沒有緩存要請求的數(shù)據(jù)則向這層發(fā)起請求,在代理服務(wù)器配置緩存功能(本地),代理服務(wù)器就查找本地緩存是否有CDN請求的數(shù)據(jù),如果有就直接返回給CDN,如果沒有則請求后端負(fù)載均衡器然后轉(zhuǎn)發(fā)給WEB服務(wù)器返回?cái)?shù)據(jù)給代理服務(wù)器,代理服務(wù)器再將結(jié)果給CDN。代理服務(wù)器一般緩存不經(jīng)常變動(dòng)的靜態(tài)頁面,如image、js、css、html等,主流的緩存軟件有Squid、Varnish、Nginx。
第三層:負(fù)載均衡
訪問量較大的網(wǎng)站都會(huì)用到負(fù)載均衡,因?yàn)檫@是解決單臺(tái)服務(wù)器性能瓶頸的最好辦法。反向代理將請求轉(zhuǎn)發(fā)給負(fù)載均衡器,負(fù)載均衡器根據(jù)算法(輪訓(xùn)、負(fù)載情況選擇后端等)交給后端WEB服務(wù)處理,WEB服務(wù)處理完成后直接返回?cái)?shù)據(jù)給反向代理服務(wù)器。負(fù)載均衡合理分配請求給后端多臺(tái)WEB服務(wù)器,減輕單臺(tái)服務(wù)器并發(fā)負(fù)載,并保證服務(wù)可用性。主流的負(fù)載均衡軟件有LVS、HAProxy、Nginx。
第四層:WEB服務(wù)
WEB服務(wù)是處理用戶請求的,WEB服務(wù)處理效率,直接影響到訪問速度,為避免這層因素造成訪問慢,應(yīng)對其進(jìn)行調(diào)優(yōu),讓W(xué)EB服務(wù)發(fā)揮到最佳狀態(tài)。常見的WEB服務(wù)有Apache和Nginx。
Apache優(yōu)化:
1).mod_deflate壓縮模塊
查看是否加載:
#apachectlM|grepdeflate
如果沒有安裝使用apxs編譯進(jìn)去:
#/usr/local/apache/bin/apxscIAapache源碼目錄/modules/mod_deflate.c
deflate配置參數(shù):
DeflateCompressionLevel6#壓縮等級(jí)(1-9),數(shù)值越大效率越高,消耗CPU也就越高
SetOutputFilterDEFLATE#啟用壓縮
AddOutputFilterByTypeDEFLATEtext/htmltext/plaintext/xml#壓縮類型
AddOutputFilterByTypeDEFLATEcssjshtmlhtmxmlphp
2).mod_expires緩存模塊
查看是否加載:
#apachectlM|grepexpires
如果沒有安裝使用apxs編譯進(jìn)去:
#/usr/local/apache/bin/apxscIAapache源碼目錄/modules/mod_expires.c
再在httpd.conf啟用模塊:LoadModuleexpires_modulemodules/mod_expires.so
緩存機(jī)制有三種用法:全局、目錄和虛擬主機(jī)
全局配置,在配置文件末尾添加:
ExpiresActiveon#啟用有效期控制,會(huì)自動(dòng)清除已過期的緩存,然后從服務(wù)器獲取新的
ExpiresDefault"Accessplus1days"#默認(rèn)任意格式的文檔都是1天后過期
ExpiresByTypetext/html"accessplus12months"
ExpiresByTypeimage/jpg"accessplus12months"#jpg格式圖片緩存12月
3).工作模式選擇及優(yōu)化
apache有兩種常見工作模式,worker和prefork,默認(rèn)是worker,是混合型的MPM(多路處理模塊),支持多進(jìn)程和多線程,由線程來處理請求,所以可以處理更多請求,提高并發(fā)能力,系統(tǒng)資源開銷也小于基于進(jìn)程的MPM,由于線程使用進(jìn)程內(nèi)存空間,進(jìn)程崩潰會(huì)導(dǎo)致其下線程崩潰。而prefork是非線程型MPM,進(jìn)程占用系統(tǒng)資源也比worker多,由于進(jìn)程處理連接,在工作效率上也比worker更穩(wěn)定??赏ㄟ^apache2 l查看當(dāng)前工作模式,在編譯時(shí)使用—with-mpm參數(shù)指定工作模式。根據(jù)自己業(yè)務(wù)需求選擇不同工作模式,再適當(dāng)增加工作模式相關(guān)參數(shù),可提高處理能力。
配置參數(shù)說明:
StartServers8#默認(rèn)啟動(dòng)8個(gè)httpd進(jìn)程
MinSpareServers5#最小的空閑進(jìn)程數(shù)
MaxSpareServers20#最大的空閑進(jìn)程數(shù),如果大于這個(gè)值,apache會(huì)自動(dòng)kill一些進(jìn)程
ServerLimit256#服務(wù)器允許進(jìn)程數(shù)的上限
MaxClients256#同時(shí)最多發(fā)起多少個(gè)訪問,超過則進(jìn)入隊(duì)列等待
MaxRequestsPerChild4000#每個(gè)進(jìn)程啟動(dòng)的最大線程
-
無相關(guān)信息