第七章 簡單cdn
作者:田逸([email protected])
7.1 cdn概述
Cdn是Content Delivery Network首字母縮寫,譯成中文就是內容分發網絡。使用cdn技術的主要目的在於增加訪問速度、解決南北互聯(中國適用)、提高用戶體驗等等。Cdn歷史上最有名的事件:當屬關於克林頓醜聞的斯塔爾報告被放在互聯網,因下載該報告的人太多,最終導致服務器癱瘓。該事件直接促使cdn的誕生。
最早的商業cdn服務可能誕生於1999年,但本人聞之cdn這個業務則是2005年的事情了。到了2006年的春天,我有幸得到一個cdn設計方面的工作,這纔有機會全面瞭解cdn原理、設計、部署以及運營等。
1、 解決網站高流量、大併發的問題。我們知道,任何一個物理設備,其負載都有一個極限。爲了應對訪問量突增,使用cdn服務是一個好的系統擴容方案。
2、 解決南北互聯問題。我國的網絡是劃江而治的格局,因爲利益之爭,各網絡服務商之間並不是通力協作,而是採取各種手段相互限制。這就導致各網之間的互聯互通存在很大的問題,具體表現爲:電信的用戶訪問放置在網通機房的服務器,響應時間特別長,反之亦然。使用cdn技術,可以讓電信的用戶訪問電信的內容緩存服務器,網通的用戶訪問網通的內容緩存服務器。通過這樣一種策略,繞開了運行商之間人爲設置的障礙。
3、 訪問加速。Cdn採用緩存技術,把訪問對象緩存起來,有的技術甚至能把對象緩存到內存(如varnish),這在效果上表現出來就是訪問加速。
4、 降低總體運營成本。在一些互聯互通比較好的第三方BGP機房,其帶寬費高達300-400元/兆/月,而二、三線城市單線接入的帶寬費100M 一年的費用才5萬左右。使用cdn運營方案,我們把源站放在BGP機房,而把緩存服務器放置在帶寬費用較低的其它地方。因爲cdn的大部分流量被轉移到緩存服務器上,源站只有較小的訪問請求,因此總體運營成本大幅降低。
5、 提高網站的可用性。源站的訪問量變得很小,這意味着源站系統有更低的負載,更低的磁盤i/o,除故障的機率大大降低。對於緩存服務器,多個服務器做成集羣,保證整個系統的高可用。
6、 防ddos***。***負載被分配到不同的物理服務器,客觀上起到防ddos的作用。
任何一門技術,都有一定的適用範圍,cdn也不另外。實踐證明,cdn對於靜態對象的加速和發佈具有很好的效果,但對於動態的網站,則效果不佳。爲了使用cdn技術所帶來的好處,我們可以通過動態內容靜態化、靜態內容分離(如動態站點裏的圖片)等方式,來加速訪問和增強用戶體驗。
有哪些對象是靜態可緩存的呢?這包括html頁面文件、視頻文件、js文件、css文件、exe文件、圖片文件(jpeg、gif、png等)等。
Cdn是一種組合技術,它包括源站、緩存服務器、智能dns、客戶端等幾個部分。
源站指發佈內容的原始站點。新增、刪除和更改網站的文件,都是在源站上進行的;緩存服務器抓取的對象也全部來自於源站。
緩存服務器是直接提供給用戶訪問的站點資源,有一個或數個服務器組成;當一個用戶發起訪問時,他的訪問請求被智能dns定位到離他較近的緩存服務器。如果訪問所需的內容沒有被緩存,則緩存服務器向鄰近的緩存服務器或直接向源站抓取內容,然後再返還給用戶;如果用戶所請求的內容剛好在緩存裏面,則直接把內容返還給用戶。
智能dns是整個cdn的核心,它負責根據用戶的來源,將其訪問請求轉向到離用戶較近或較合適的緩存服務器—如把長沙電信的用戶請求轉向到長沙電信機房的緩存服務器。實現智能dns的一種技術是:bind view,在bind 9以後的版本,都應該支持view 視圖這個功能。另外還有一個次一點的方案,即dns輪詢方式。
客戶端即普通發起訪問的用戶,一般的訪問方式是瀏覽器。這個不再做說明。
除了前面列舉的組件外,還有一個可選項目,即用來進行內部域名以及源站的域名解析。因爲是可選的,因此也可以通過使用本地hosts指定主機名來代替。不過有一點需要注意,內部域名系統不能使用合法註冊的域名服務器,也即在互聯網上,找不到這個域名系統的NS記錄。爲什麼呢?請繼續往下看。
接下來,我們以圖示來總結一下cdn各組件間的關係。
圖7-1展示了兩種比較典型的訪問場景,這兩種場景,基本上能反應這個cdn的工作全貌:
場景一:當“A網用戶”訪問被cdn加速的站點 http://www.formyz.cn時,從本地的dns查詢域名,最終可能在全局智能dns服務器得到域名所對應的ip地址,即本圖所示“A網的緩存服務器”的ip;接着“A網用戶”瀏覽器向“A網的緩存服務器”發起訪問請求,幸運的是所需的默認頁面文件index.htm正好被緩存在“A網的緩存服務器”裏,於是緩存服務器立即返還數據,完成一次訪問請求。
場景二:當“B網用戶”訪問被cdn加速的站點 http://www.formyz.cn時,從本地的dns查詢域名,最終可能在全局智能dns服務器得到域名所對應的ip地址,即本圖所示“B網的緩存服務器”的ip;接着“B網用戶”瀏覽器向“B網的緩存服務器”發起訪問請求,但是緩存服務器並沒有緩存默認頁面文件index.html,它需要先從源站取得這個對象,緩存並把內容返還給“B網用戶”。“B網緩存服務器”通過“內部dns”知道源站在哪裏。