(转)CDN是如何工作的?
轉(zhuǎn)載自:CDN是如何工作的?
CDN是互聯(lián)網(wǎng)中使用較頻繁的一種技術(shù)。你也許常聽人說:“我們的網(wǎng)站使用了CDN技術(shù)”,但可能他們對CDN的了解并不多,也許只局限于--用了以后網(wǎng)站訪問速度會變快。
其實,CDN的原理非常簡單。當(dāng)瀏覽器請求一資源時,第一步是做DNS解析,DNS解析就像是從通訊錄根據(jù)姓名找號碼,瀏覽器發(fā)送域名,然后得到DNS服務(wù)器返回的IP地址。瀏覽器通過IP地址和服務(wù)器連接并獲取資源(DNS服務(wù)器會有很多層的緩存,但超出本文范圍)。
對于小站點或個人博客,一個域名對應(yīng)一個IP地址,而大站點可能含多個IP地址。
當(dāng)請求一個資源時(如網(wǎng)站),距離會影響連接速度,所以從國內(nèi)訪問國外的網(wǎng)站比較慢。因此,一些大公司在世界各地配置服務(wù)器并同步數(shù)據(jù),這就叫CDN,而那些離當(dāng)?shù)赜脩糇罱姆?wù)器叫“邊緣服務(wù)器(edge servers)”。
DNS解析
當(dāng)瀏覽器通過CDN做域名解析請求時,針對單IP的網(wǎng)站會有一些不同。DNS服務(wù)器會找出最適合的服務(wù)器來處理請求,而且非常簡單,DNS會找出離請求地點最近的邊緣服務(wù)器。如下圖所示,如果我從維吉尼亞州發(fā)送一個指向美國中部服務(wù)器的請求,就會得到位于東海岸的邊緣服務(wù)器地址,如果我從加利福尼亞州發(fā)送請求,就會得到位于西海岸的邊緣服務(wù)器地址。
也就是說處理請求的第一步:找出離請求位置最近的服務(wù)器。有些公司可能會用其他的方式優(yōu)化CDN服務(wù)器,例如,如果最近的服務(wù)器滿負(fù)荷運作,那么接下來的請求就會轉(zhuǎn)到其他閑置的服務(wù)器。總之,CDN總會找出最適合的服務(wù)器來處理請求。
獲取內(nèi)容
邊緣服務(wù)器是一種代理緩存,類似瀏覽器緩存。當(dāng)請求到達(dá)邊緣服務(wù)器,它會首先檢查內(nèi)容是否是最新的。緩存標(biāo)識(key)就是整個Url地址(跟瀏覽器一樣),如果內(nèi)容已被緩存且沒有過期,就直接返回緩存內(nèi)容。
如果沒有緩存或已過期,邊緣服務(wù)器會向源服務(wù)器發(fā)送請求獲取內(nèi)容,并緩存起來。
雅虎創(chuàng)建了一個開源項目叫Apache Traffic Server,用來管理CDN直接的交互,如果想了解更多代理緩存的原理,推薦你讀一下這個項目的文檔。
示例
雅虎的CDN服務(wù)中,使用一個工具叫“組合處理器(combo handler)”,它會把多個文件的請求整合到一起,變成一個請求-響應(yīng)操作。下面是例子:
http://yui.yahooapis.com/combo?3.4.1/build/yui-base/yui-base-min.js&3.4.1/build/array-extras/array-extras-min.js
域名yui.yahooapis.com是雅虎CDN服務(wù)的一部分,會把你的請求轉(zhuǎn)給離你最近的邊緣服務(wù)器,這個請求包含兩個文件yui-base-min.js和array-extras-min.js,但只需一次響應(yīng)便可完成。這些邏輯處理操作不在邊緣服務(wù)器,只能在源服務(wù)器上。
靜態(tài)指的是什么?
每當(dāng)我描述類似上文的“組合處理器”之類的系統(tǒng)時,經(jīng)常會看到別人困惑的表情。CDN有時候容易跟FTP資源混淆,因為它們都是上傳靜態(tài)資源供其他人獲取。我希望我上文的描述能讓大家搞清楚兩者不一回事。邊緣服務(wù)器是一個代理,源服務(wù)器告訴邊緣服務(wù)器返回什么內(nèi)容,源服務(wù)器可能是Java,Ruby,Node.js,.Net等,因此可以實現(xiàn)任何邏輯。邊緣服務(wù)器什么也不做只是發(fā)生請求并返回內(nèi)容。
既然CDN如此高效,為什么不把網(wǎng)站所有東西都用CDN來提高性能?CDN本質(zhì)是緩存,如果保存的是動態(tài)頁面,每次頁面內(nèi)容都會有所變化,那么每次請求都要和源服務(wù)器交互一次,那么這個緩存也就沒有意義。
這也是為什么Javascript,CSS,images,Flash,音頻,視頻等文件特別適合使用CDN技術(shù),因為這些文件是不變的,所有的用戶獲取的都一樣,一旦通過CDN緩存,所有用戶都受益。
緩存過期
雅虎性能指南規(guī)定靜態(tài)資源應(yīng)該要有緩存過期標(biāo)識保存在Http協(xié)議的header中,這么做有兩個原因:第一,瀏覽器會把資源緩存一段時間,第二,CDN會將資源緩存一段時間。這就意味著你不能使用重復(fù)的文件名,因為他們至少會被緩存在兩個地方,用戶可能會一直獲取不到最新版本的文件。
有幾種方式解決這個問題,YUI 庫用包含不同版本庫的目錄來區(qū)分。通常也可以在文件名末尾加入標(biāo)識符,如MD5的哈希值或者版本控制軟件的修訂號。任何一種繼續(xù)都為了確保,當(dāng)用戶的請求包含過期標(biāo)識的時候,依然能獲得最新版本的文件。
結(jié)語
CDN技術(shù)已經(jīng)是當(dāng)今互聯(lián)網(wǎng)重要的一部分,隨著時間的推移,它只會變得越來越重要。即便是現(xiàn)在,一些公司仍然努力嘗試把更多的功能移到邊緣服務(wù)器,以便能給用戶更快速的體驗。這里包含了一種技術(shù)叫Edge Side Includes (ESI),用來緩存頁面的部分內(nèi)容。
更好的理解CDN技術(shù)及工作原理是提升CDN性能的關(guān)鍵。
?
原文:http://www.nczonline.net/blog/2011/11/29/how-content-delivery-networks-cdns-work/
注:這是我第一次翻譯英文文章,花了比想象中要多的時間,如果看完文章對你有幫助是我最大的欣慰,不足的地方歡迎批評指出。
謝謝瀏覽!
轉(zhuǎn)載于:https://www.cnblogs.com/Music/archive/2012/03/12/cdn-how-to-work.html
總結(jié)
以上是生活随笔為你收集整理的(转)CDN是如何工作的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C#2.0】发挥匿名委托的威力!
- 下一篇: [转载]XSS 攻擊常用腳本