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