週六晚上七點多,我正在看書呢,忽然女友跑過來問我她的IPAD去哪了,火急火燎的。
程序員
她拿到了IPAD以後就再也不理我了,不過做爲一個程序員,我仍是比較好奇這麼大的流量虎牙到底能不能扛得住,哈哈哈。因而我過去看了一下,結果看到了下面這一幕:瀏覽器
可是直播居然並無顯得很卡頓,禁不住說了一段話:緩存
據瞭解,2018年1月,阿里云爲虎牙提供了邊緣節點服務(ENS)。基於阿里雲ENS,能夠輕鬆地將業務模塊放到邊緣運行,在主播的推流時,實現就近節點進行轉碼和分發,同時支持了高併發實時彈幕的邊緣分發。在得到網絡低時延的同時,減小了對中心的壓力,節省了30%以上的中心帶寬成本,而且實現了邊緣節點網絡鏈接小於5毫秒延時,提高了主播上行質量,以及用戶成功鏈接佔比等數指標,有效提高了用戶觀看體驗。ENS中最主要的技術就是CDN。服務器
直播終於結束了,女友終於跑過來問我什麼是CDN了…markdown
CDN的全稱是Content Delivery Network,即內容分發網絡。網絡
咱們都用過天貓超市,在上面買東西很是方便。天貓超市的模式是貨品先入天貓超市(後文簡稱爲"貓超")的菜鳥倉,而後由貓超統一派送的。併發
爲了縮短物流的時間,可讓消費者快速的收到貨品,菜鳥在全國各地建了本地倉庫,如今大多數狀況下,在貓超下單,次日均可以收到(樓主在江浙滬包郵區,其餘地區可能稍有延遲)。負載均衡
好比我在杭州市西湖區,下單購買了一箱零食,沒過多久就能夠看到貓超已經發貨了,發貨地址是杭州的蕭山倉,從杭州的一個區運輸到另一個區,24小時怎麼也到了。分佈式
咱們能夠在菜鳥網絡的官網上看到其全國各地的倉庫狀況,咱們能夠看到他目前覆蓋了全國20哥省份,70個城市,共有327各倉庫。這些倉庫組合在一塊兒被稱之爲"全國倉網"。高併發
咱們在瀏覽網絡的時候,其實就和以上這個過程十分類似,咱們訪問一個頁面的時候,會向服務器請求不少網絡資源,包括各類圖片、聲音、影片、文字等信息。這和咱們要購買的多種貨物同樣。
就像貓超會把貨物提早存儲在菜鳥建設在全國各地的本地倉庫來減小物流時間同樣,網站也能夠預先把內容分發至全國各地的加速節點。這樣用戶就能夠就近獲取所需內容,避免網絡擁堵、地域、運營商等因素帶來的訪問延遲問題,有效提高下載速度、下降響應時間,提供流暢的用戶體驗。
因此,"內容分發網絡"就像前面提到的"全國倉配網絡"同樣,解決了因分佈、帶寬、服務器性能帶來的訪問延遲問題,適用於站點加速、點播、直播等場景。使用戶可就近取得所需內容,解決 Internet網絡擁擠的情況,提升用戶訪問網站的響應速度和成功率。
有了倉配網絡以後,除了能夠提高貨物的配送效率,還有不少其餘的好處:
一、首先經過預先作好了貨物分發,使得最終貨品從出倉到消費者手中的過程是比較短的,那麼同城範圍內可選擇的配送公司就有不少選擇,除了比較大的四通一達、順豐之外,還能夠選用一些小的物流公司、甚至菜鳥直接調用餓了麼的蜂鳥配送也不是不可能。
CDN技術消除了不一樣運營商之間互聯的瓶頸形成的影響,實現了跨運營商的網絡加速,保證不一樣網絡中的用戶都能獲得良好的訪問質量
二、對於倉配系統來講,最大的災難可能就是倉庫發生火災、水災等天然災害。若是把原來的一個集中式的大倉庫打散成多個分佈式的小倉庫,分別部署在不一樣地區,就能夠有效的減少天然災害帶來的影響。
普遍分佈的CDN節點加上節點之間的智能冗餘機制,能夠有效地預防黑客入侵以及下降各類DDoS攻擊對網站的影響,同時保證較好的服務質量
傳統快遞企業採用的配送模式,經過"商家→網點→分撥→分撥→網點→客戶"的環節進行配送。這個過程會有一些問題,如環節多、時效慢、易破損等。
上面這個過程和傳統網站的請求響應過程相似,通常經歷如下步驟:
用戶在本身的瀏覽器中輸入要訪問的網站域名。
瀏覽器向本地DNS服務器請求對該域名的解析。
本地DNS服務器中若是緩存有這個域名的解析結果,則直接響應用戶的解析請求。
本地DNS服務器中若是沒有關於這個域名的解析結果的緩存,則以迭代方式向整個DNS系統請求解析,得到應答後將結果反饋給瀏覽器。
瀏覽器獲得域名解析結果,就是該域名相應的服務設備的IP地址 。
瀏覽器獲取IP地址以後,通過標準的TCP握手流程,創建TCP鏈接。
瀏覽器向服務器發起HTTP請求。
服務器將用戶請求內容傳送給瀏覽器。
通過標準的TCP揮手流程,斷開TCP鏈接。
電商自建物流以後,配送模式有所變化:提早備貨將異地件轉化成同城件,省去幹線環節提高時效,倉儲高自動化分揀保證快速出庫的同時也保證了分揀破損率較低。
對於用戶來講,購物過程並無變化,惟一的感覺就是物流好像是比之前快了。因此,引入CDN以後,用戶訪問網站通常經歷如下步驟:
當用戶點擊網站頁面上的內容URL,先通過本地DNS系統解析,若是本地DNS服務器沒有相應域名的緩存,則本地DNS系統會將域名的解析權交給CNAME指向的CDN專用DNS服務器。
CDN的DNS服務器將CDN的全局負載均衡設備IP地址返回給用戶。
用戶向CDN的全局負載均衡設備發起URL訪問請求。
CDN全局負載均衡設備根據用戶IP地址,以及用戶請求的URL,選擇一臺用戶所屬區域的區域負載均衡設備,並將請求轉發到此設備上。
基於如下這些條件的綜合分析以後,區域負載均衡設備會選擇一個最優的緩存服務器節點,並從緩存服務器節點處獲得緩存服務器的IP地址,最終將獲得的IP地址返回給全局負載均衡設備:
根據用戶IP地址,判斷哪個邊緣節點距用戶最近;
根據用戶所請求的URL中攜帶的內容名稱,判斷哪個邊緣節點上有用戶所需內容;
查詢各個邊緣節點當前的負載狀況,判斷哪個邊緣節點尚有服務能力。
全局負載均衡設備把服務器的IP地址返回給用戶。
用戶向緩存服務器發起請求,緩存服務器響應用戶請求,將用戶所需內容傳送到用戶終端。若是這臺緩存服務器上並無用戶想要的內容,而區域均衡設備依然將它分配給了用戶,那麼這臺服務器就要向它的上一級緩存服務器請求內容,直至追溯到網站的源服務器將內容拉到本地。
圖:華爲雲全站加速示意圖
CDN全局負載均衡設備與CDN區域負載均衡設備根據用戶IP地址,將域名解析成相應節點中緩存服務器的IP地址,實現用戶就近訪問,從而提升服務端響應內容的速度。
前面咱們說過,一個倉配網絡是由多個倉庫組成的,同理,內容分發網絡(CDN)是由多個節點組成的。通常來說,CDN網絡主要由中心節點、邊緣節點兩部分構成。
中心節點包括CDN網管中心和全局負載均衡DNS重定向解析系統,負責整個CDN網絡的分發及管理。
CDN邊緣節點主要指異地分發節點,由負載均衡設備、高速緩存服務器兩部分組成。
負載均衡設備負責每一個節點中各個Cache的負載均衡,保證節點的工做效率;同時還負責收集節點與周圍環境的信息,保持與全局負載均衡DNS的通訊,實現整個系統的負載均衡。
高速緩存服務器(Cache)負責存儲客戶網站的大量信息,就像一個靠近用戶的網站服務器同樣響應本地用戶的訪問請求。經過全局負載均衡DNS的控制,用戶的請求被透明地指向離他最近的節點,節點中Cache服務器就像網站的原始服務器同樣,響應終端用戶的請求。因其距離用戶更近,故其響應時間才更快。
中心節點就像倉配網絡中負責貨物調配的總倉,而邊緣節點就是負責存儲貨物的各個城市的本地倉庫。
目前,主要由不少提供CDN服務的雲廠商在各地部署了不少個CDN節點,拿阿里雲舉例,咱們能夠在阿里雲的官網上了解到:阿里雲在全球擁有2500+節點。中國大陸擁有2000+節點,覆蓋34個省級區域,大量節點位於省會等一線城市。海外和港澳臺擁有500+節點,覆蓋70多個國家和地區。
有了如上圖的阿里雲在中國大陸的CDN節點的分佈以後(這是否是也和咱們前面看到的那張菜鳥網絡的全國倉網很像),一個在杭州的電信網絡用戶,訪問某個部署在阿里雲上面的網站時,獲取到的一些資源,如頁面上的某個圖片、某段影片或者某些文字,可能就是該網站預先分發到浙江的某個移動CDN存儲節點提供的,這樣就能夠大大的減小網站的響應時間。
首先咱們想一下,要想建設一個龐大的倉配網絡都須要考慮哪些問題,須要哪些技術手段呢?
筆者認爲主要是四個重要關注的點,分別是:
一、如何妥善的將貨物分發到各個城市的本地倉。
二、如何妥善的各個本地倉存儲貨物。
三、如何根據用戶的收貨地址,智能的匹配出應該優先從哪一個倉庫發貨,選用哪一種物流方式等。
四、對於整個倉配系統如何進行管理,如總體貨物分發的精確度、倉配的時效性、發貨地的匹配度等。
這其實和CDN中最重要的四大技術不謀而合,那就是內容發佈、內容存儲、內容路由以及內容管理等。
它藉助於創建索引、緩存、流分裂、組播(Multicast)等技術,將內容發佈或投遞到距離用戶最近的遠程服務點(POP)處。
對於CDN系統而言,須要考慮兩個方面的內容存儲問題。一個是內容源的存儲,一個是內容在 Cache節點中的存儲。
它是總體性的網絡負載均衡技術,經過內容路由器中的重定向(DNS)機制,在多個遠程POP上均衡用戶的請求,以使用戶請求獲得最近內容源的響應。
它經過內部和外部監控系統,獲取網絡部件的情況信息,測量內容發佈的端到端性能(如包丟失、延時、平均帶寬、啓動時間、幀速率等),保證網絡處於最佳的運行狀態。