服務(wù)項目
聯(lián)系方式
保定市遨游計算機(jī)服務(wù)有限公司
咨詢熱線:13313028229
售后:0312-6791400
售后:0312-6791126
網(wǎng)址:bsnls.com
地址:保定朝陽大街國貿(mào)大廈8樓808室
中小型網(wǎng)站架構(gòu)分析及優(yōu)化
[來源:bsnls.com] [作者:網(wǎng)站建設(shè)] [日期:15-11-26] [瀏覽次數(shù):]
第一層: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)上,用戶訪問時從最近的機(jī)房獲取數(shù)據(jù),這樣大大減少網(wǎng)絡(luò)訪問的路徑。如果想自己搭建CDN,不建議這么做,因為什么呢?其實說白了,就是什么事別往運(yùn)維上攔。CDN架構(gòu)部署不復(fù)雜,影響效果的因素卻很多,后期管理維護(hù)也比較復(fù)雜,想達(dá)到預(yù)期的效果確非易事,這是一個費(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ù)器返回數(shù)據(jù)給代理服務(wù)器,代理服務(wù)器再將結(jié)果給CDN。代理服務(wù)器一般緩存不經(jīng)常變動的靜態(tài)頁面,如image、js、css、html等,主流的緩存軟件有Squid、Varnish、Nginx。 第三層:負(fù)載均衡 訪問量較大的網(wǎng)站都會用到負(fù)載均衡,因為這是解決單臺服務(wù)器性能瓶頸的最好辦法。反向代理將請求轉(zhuǎn)發(fā)給負(fù)載均衡器,負(fù)載均衡器根據(jù)算法(輪訓(xùn)、負(fù)載情況選擇后端等)交給后端WEB服務(wù)處理,WEB服務(wù)處理完成后直接返回數(shù)據(jù)給反向代理服務(wù)器。負(fù)載均衡合理分配請求給后端多臺WEB服務(wù)器,減輕單臺服務(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)化: ).工作模式選擇及優(yōu)化 apache有兩種常見工作模式,worker和prefork,默認(rèn)是worker,是混合型的MPM(多路處理模塊),支持多進(jìn)程和多線程,由線程來處理請求,所以可以處理更多請求,提高并發(fā)能力,系統(tǒng)資源開銷也小于基于進(jìn)程的MPM,由于線程使用進(jìn)程內(nèi)存空間,進(jìn)程崩潰會導(dǎo)致其下線程崩潰。而prefork是非線程型MPM,進(jìn)程占用系統(tǒng)資源也比worker多,由于進(jìn)程處理連接,在工作效率上也比worker更穩(wěn)定??赏ㄟ^apache2 –l查看當(dāng)前工作模式,在編譯時使用—with-mpm參數(shù)指定工作模式。根據(jù)自己業(yè)務(wù)需求選擇不同工作模式,再適當(dāng)增加工作模式相關(guān)參數(shù),可提高處理能力。 3).fastcgi優(yōu)化 nginx不支持直接調(diào)用或者解析動態(tài)程序(php),必須通過fastcgi(通用網(wǎng)關(guān)接口)來啟動php-fpm進(jìn)程來解析php腳本。也就是說用戶請求先到nginx,nginx再將動態(tài)解析交給fastcgi,fastcgi啟動php-fpm解析php腳本。所以我們有必要對fastcgi和php-fpm進(jìn)行適當(dāng)?shù)膮?shù)優(yōu)化。 小結(jié): 啟用壓縮模塊可以節(jié)省一部分帶寬,會增加WEB端CPU處理,但在上圖網(wǎng)站架構(gòu)中,WEB端啟用壓縮模塊并沒有起到作用,因為傳輸?shù)缴蠈幼叩氖蔷钟蚓W(wǎng)。對于直接面向用戶的架構(gòu)還是要啟用的。WEB也不用啟用expires模塊,因為有了反向代理服務(wù)器和CDN,所以到不了用戶瀏覽器,開啟起不到作用。 如果反向代理使用nginx做代理,可開啟expires模塊,將靜態(tài)文件緩存到用戶瀏覽器,瀏覽器發(fā)起請求時,先判斷本地緩存是否有請求的數(shù)據(jù),如果有再判斷是否過期,如果不過期就直接瀏覽緩存數(shù)據(jù),哪怕服務(wù)器資源已經(jīng)改變,所以要根據(jù)業(yè)務(wù)情況合理設(shè)置過期時間。 5. 利用PHP緩存器提高代碼執(zhí)行效率 php程序在沒有使用緩存器情況下,每次請求php頁面,php都會對此頁面進(jìn)行代碼編譯,這就意味著重復(fù)的編譯工作會增加服務(wù)器負(fù)載。有了緩存器就會把每次編譯后的數(shù)據(jù)緩存到共享內(nèi)存中,下次訪問直接使用緩沖區(qū)已編譯好的代碼,從而避免重復(fù)的編譯過程,以加快其執(zhí)行效率。因此PHP網(wǎng)站使用緩存器是完全有必要的!主流的PHP緩存器有:eAccelerator、XCache 第五層:動靜分離 動靜分離,顧名思義,是將動態(tài)頁面和靜態(tài)頁面分離到不同服務(wù)器上處理,比如使用web是nginx,可以讓fastcgi部署到單獨(dú)一臺服務(wù)器,專門解析php動態(tài)頁面,靜態(tài)頁面默認(rèn)由nginx處理,并做好緩存策略。再比如一個商城網(wǎng)站,會有大量的圖片,可以考慮增加文件服務(wù)器組,將請求圖片和上傳圖片的都交給文件服務(wù)器處理。文件服務(wù)器主流使用NFS,存在單點(diǎn)故障,可以DRBD+HeartBeat+NFS部署高可用,如果單臺壓力過大,考慮使用分布式文件系統(tǒng),如GlusterFS、MooseFS等。 DRBD+HeartBeat+NFS博文:http://lizhenliang.blog.51cto.com/7876557/1362539 第六層:數(shù)據(jù)庫緩存 利用緩存技術(shù),把熱數(shù)據(jù)緩存到內(nèi)存中,如果請求的數(shù)據(jù)在緩存中,就直接返回,否則去數(shù)據(jù)庫中取,并更新把拿的數(shù)據(jù)更新到緩存系統(tǒng),提高讀性能,降低數(shù)據(jù)庫壓力。緩存實現(xiàn)有本地緩存和分布式緩存,本地緩存是將數(shù)據(jù)緩存到本地服務(wù)器內(nèi)存中或者文件中。分布式緩存是將數(shù)據(jù)緩存到內(nèi)存中,是分布式的,可以緩存海量數(shù)據(jù),擴(kuò)展性好。主流的分布式緩存系統(tǒng)有Memcached和Redis,Memcached性能穩(wěn)定,速度很快,QPS可達(dá)8w左右。如果想數(shù)據(jù)持久化就選擇用Redis,性能不低于Memcached。 第七層:數(shù)據(jù)庫 這層在整個網(wǎng)站架構(gòu)中起著主導(dǎo)型作用,直接決定用戶體驗,相對架構(gòu)優(yōu)化也比較復(fù)雜,具體請參考博文:http://lizhenliang.blog.51cto.com/7876557/1657465 核心思路:減少請求層,盡可能讓前端層返回用戶請求的數(shù)據(jù),減少后端服務(wù)器訪問頻率,最重要是數(shù)據(jù)庫層。

微信二維碼