- 深入分析Java Web技術內幕
- 許令波
- 1703字
- 2018-12-30 19:21:16
1.5 CDN工作機制
CDN也就是內容分布網絡(Content Delivery Network),它是構筑在現有Internet上的一種先進的流量分配網絡。其目的是通過在現有的Internet中增加一層新的網絡架構,將網站的內容發布到最接近用戶的網絡“邊緣”,使用戶可以就近取得所需的內容,提高用戶訪問網站的響應速度。有別于鏡像,它比鏡像更智能,可以做這樣一個比喻:CDN =鏡像(Mirror)+ 緩存(Cache)+ 整體負載均衡(GSLB)。因而,CDN可以明顯提高Internet中信息流動的效率。
目前CDN都以緩存網站中的靜態數據為主,如CSS、JS、圖片和靜態頁面等數據。用戶在從主站服務器請求到動態內容后再從CDN上下載這些靜態數據,從而加速網頁數據內容的下載速度,如淘寶有90%以上的數據都是由CDN來提供的。
通常來說CDN要達到以下幾個目標。
◎ 可擴展(Scalability)。性能可擴展性:應對新增的大量數據、用戶和事務的擴展能力;成本可擴展性:用低廉的運營成本提供動態的服務能力和高質量的內容分發。
◎ 安全性(Security)。強調提供物理設備、網絡、軟件、數據和服務過程的安全性,(趨勢)減少因為DDoS攻擊或者其他惡意行為造成商業網站的業務中斷。
◎ 可靠性、響應和執行(Reliability、Responsiveness和Performance)。服務可用性,能夠處理可能的故障和用戶體驗的下降,通過負載均衡及時提供網絡的容錯機制。
1.5.1 CDN架構
通常的CDN架構如圖1-16所示。

圖1-16 CDN架構
如圖1-16所示,一個用戶訪問某個靜態文件(如CSS文件),這個靜態文件的域名假如是cdn.taobao.com,那么首先要向Local DNS服務器發起請求,一般經過迭代解析后回到這個域名的注冊服務器去解析,一般每個公司都會有一個DNS解析服務器。這時這個DNS解析服務器通常會把它重新CNAME解析到另外一個域名,而這個域名最終會被指向CDN全局中的DNS負載均衡服務器,再由這個GTM來最終分配是哪個地方的訪問用戶,返回給離這個訪問用戶最近的CDN節點。
拿到DNS解析結果,用戶就直接去這個CDN節點訪問這個靜態文件了,如果這個節點中所請求的文件不存在,就會再回到源站去獲取這個文件,然后再返回給用戶。
1.5.2 負載均衡
負載均衡(Load Balance)就是對工作任務進行平衡、分攤到多個操作單元上執行,如圖片服務器、應用服務器等,共同完成工作任務。它可以提高服務器響應速度及利用效率,避免軟件或者硬件模塊出現單點失效,解決網絡擁塞問題,實現地理位置無關性,為用戶提供較一致的訪問質量。
通常有三種負載均衡架構,分別是鏈路負載均衡、集群負載均衡和操作系統負載均衡。所謂鏈路負載均衡也就是前面提到的通過DNS解析成不同的IP,然后用戶根據這個IP來訪問不同的目標服務器,如圖1-17所示。

圖1-17 鏈路負載均衡
負載均衡是由DNS的解析來完成的,用戶最終訪問哪個Web Server是由DNS Server來控制的,在這里就是由Global DNS Server來動態解析域名服務。這種DNS解析的優點是用戶會直接訪問目標服務器,而不需要經過其他的代理服務器,通常訪問速度會更快。但是也有缺點,由于DNS在用戶本地和Local DNS Server都有緩存,一旦某臺Web Server掛掉,那么很難及時更新用戶的域名解析結構。如果用戶的域名沒有及時更新,那么用戶將無法訪問這個域名,帶來的后果非常嚴重。
集群負載均衡是另外一種常見的負載均衡方式,它一般分為硬件負載均衡和軟件負載均衡。硬件負載均衡一般使用一臺專門硬件設備來轉發請求,如圖1-18所示。

圖1-18 硬件負載均衡
硬件負載均衡的關鍵就是這臺價格非常昂貴的設備,如F5,通常為了安全需要一主一備。它的優點很顯然就是性能非常好,缺點就是非常貴,一般公司是用不起的,還有就是當訪問量陡然增大超出服務極限時,不能進行動態擴容。
軟件負載均衡是使用最普遍的一種負載方式,它的特點是使用成本非常低,直接使用廉價的PC就可以搭建。缺點就是一般一次訪問請求要經過多次代理服務器,會增加網絡延時。它的架構通常如圖1-19所示。

圖1-19 軟件負載均衡
圖1-19中上面兩臺是LVS,使用四層負載均衡,也就是在網絡層利用IP地址進行地址轉發。下面三臺使用HAProxy進行七層負載,也就是可以根據訪問用戶的HTTP請求頭來進行負載均衡,如可以根據不同的URL來將請求轉發到特定機器或者根據用戶的Cookie信息來指定訪問的機器。
最后一種是操作系統負載均衡,就是利用操作系統級別的軟中斷或者硬件中斷來達到負載均衡,如可以設置多隊列網卡等來實現。
這幾種負載均衡不僅在CDN的集群中能使用,而且在Web服務或者分布式數據集群中同樣也能使用,但是在這些地方后兩種使用得要多一點。