先看網站架構圖:
以上網站架構廣泛運用中大型網站中,本文從架構每一層分析所用主流技術和解決手段,有助於初入網站運維朋友們,進一步對網站架構認識,從而自己形成一套架構概念。
第一層: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最佳化:
1).mod_deflate壓縮模組
檢視是否載入:
#apachectlM|grepdeflate
如果沒有安裝使用apxs編譯進去:
#/usr/local/apache/bin/apxscIAapache原始碼目錄/modules/mod_deflate.c
deflate配置引數:
DeflateCompressionLevel6#壓縮等級(1-9),數值越大效率越高,消耗CPU也就越高
SetOutputFilterDEFLATE#啟用壓縮
AddOutputFilterByTypeDEFLATEtext/htmltext/plaintext/xml#壓縮型別
AddOutputFilterByTypeDEFLATEcssjshtmlhtmxmlphp
2).mod_expires快取模組
檢視是否載入:
#apachectlM|grepexpires
如果沒有安裝使用apxs編譯進去:
#/usr/local/apache/bin/apxscIAapache原始碼目錄/modules/mod_expires.c
再在httpd.conf啟用模組:LoadModuleexpires_modulemodules/mod_expires.so
快取機制有三種用法:全域性、目錄和虛擬主機
全域性配置,在配置檔案末尾新增:
ExpiresActiveon#啟用有效期控制,會自動清除已過期的快取,然後從伺服器獲取新的
ExpiresDefault"Accessplus1days"#預設任意格式的文件都是1天后過期
ExpiresByTypetext/html"accessplus12months"
ExpiresByTypeimage/jpg"accessplus12months"#jpg格式圖片快取12月
3).工作模式選擇及最佳化
apache有兩種常見工作模式,worker和prefork,預設是worker,是混合型的MPM(多路處理模組),支援多程式和多執行緒,由執行緒來處理請求,所以可以處理更多請求,提高併發能力,系統資源開銷也小於基於程式的MPM,由於執行緒使用程式記憶體空間,程式崩潰會導致其下執行緒崩潰。而prefork是非執行緒型MPM,程式佔用系統資源也比worker多,由於程式處理連線,在工作效率上也比worker更穩定。可透過apache2 l檢視當前工作模式,在編譯時使用—with-mpm引數指定工作模式。根據自己業務需求選擇不同工作模式,再適當增加工作模式相關引數,可提高處理能力。
配置引數說明:
StartServers8#預設啟動8個httpd程式
MinSpareServers5#最小的空閒程式數
MaxSpareServers20#最大的空閒程式數,如果大於這個值,apache會自動kill一些程式
ServerLimit256#伺服器允許程式數的上限
MaxClients256#同時最多發起多少個訪問,超過則進入佇列等待
MaxRequestsPerChild4000#每個程式啟動的最大執行緒