CDN技術原理


要了解CDN的實現原理,首先讓我們來回顧一下網站傳統的訪問過程,以便理解其與CDN訪問方式之間的差別:

由上圖可見,傳統的網站訪問過程為:

1. 用戶在瀏覽器中輸入要訪問的域名;
2. 瀏覽器向域名解析服務器發出解析請求,獲得此域名對應的IP地址;
3. 瀏覽器利用所得到的IP地址,向該IP對應的服務器發出訪問請求;
4. 服務器對此響應,將數據回傳至用戶瀏覽器端顯示出來。

與傳統訪問方式不同,CDN網絡則是在用戶和服務器之間增加Cache層,將用戶的訪問請求引導到Cache節點而不是服務器源站點,要實現這一目的,主要是通過接管DNS實現,下圖為使用CDN緩存后的網站訪問過程:

由上圖可見,使用CDN緩存后的網站訪問過程演變為:

1.  用戶在瀏覽器中輸入要訪問的域名; 
2.  瀏覽器向域名解析服務器發出解析請求,由於CDN對域名解析過程進行了調整,所以用戶端一般得到的是該域名對應的CNAME記錄,此時瀏覽器需要再次對獲得的CNAME域名進行解析才能得到緩存服務器實際的IP地址。
注:在此過程中,全局負載均衡DNS解析服務器會根據用戶端的源IP地址,如地理位置(深圳還是上海)、接入網類型(電信還是網通)將用戶的訪問請求定位到離用戶路由最短、位置最近、負載最輕的Cache節點(緩存服務器)上,實現就近定位。定位優先原則可按位置、可按路由、也可按負載等。 
3. 再次解析后瀏覽器得到該域名CDN緩存服務器的實際IP地址,向緩存服務器發出訪問請求; 
4.  緩存服務器根據瀏覽器提供的域名,通過Cache內部專用DNS解析得到此域名源服務器的真實IP地址,再由緩存服務器向此真實IP地址提交訪問請求; 
5.  緩存服務器從真實IP地址得到內容后,一方面在本地進行保存,以備以后使用,同時把得到的數據發送到客戶端瀏覽器,完成訪問的響應過程; 
6.  用戶端得到由緩存服務器傳回的數據后顯示出來,至此完成整個域名訪問過程。

通過以上分析可以看到,不論是否使用CDN網絡,普通用戶客戶端設置不需做任何改變,直接使用被加速網站原有域名訪問即可。對於要加速的網站,只需修改整個訪問過程中的域名解析部分,便能實現透明的網絡加速服務。

 

Linux 系統 Squid集群做CDN全網加速

內容分發網絡(CDN)是一種新型網絡內容服務體系,其基於IP網絡而構建,基於內容訪問與應用的效率要求、質量要求和內容秩序而提供內容的分發和服務。而從廣義的角度,CDN代表了一種基於網絡而構建的高質量、高效率、具有鮮明網絡秩序的網絡應用服務模式。

  簡單地說,內容分發網絡(CDN)是一個經策略性部署的整體系統,包括分布式存儲、負載均衡、網絡請求的重定向和內容管理4個要件,而內容管理和全局的網絡流量管理(Traffic Management)是CDN的核心所在。通過用戶就近性和服務器負載的判斷,CDN確保內容以一種極為高效的方式為用戶的請求提供服務。

總的來說,內容服務基於緩存服務器,也稱作代理緩存(Surrogate),它位於網絡的邊緣,距用戶僅有"一跳"(Single Hop)之遙。同時,代理緩存是內容提供商源服務器(通常位於CDN服務提供商的數據中心)的一個透明鏡像。這樣的架構使得CDN服務提供商能夠代表他們客戶,即內容供應商,向最終用戶提供盡可能好的體驗,而這些用戶是不能容忍請求響應時間有任何延遲的。

CDN的通俗理解就是網站加速,可以解決跨運營商,跨地區,服務器負載能力過低,帶寬過少等帶來的網站打開速度慢等問題。

  比如:

  1.一個企業的網站服務器在北京,運營商是電信,在廣東的聯通用戶訪問企業網站時,因為跨地區,跨運營商的原因,網站打開速度就會比北京當地的電信客戶訪問速度慢很多,很容易造成這個企業的客戶流失

  2.一個網站的服務器性能比較差,承載能力有限,有時面臨突發流量,招架不住,直接導致服務器崩潰,網站打不開,尤其是電商網站在節日期間,因為這種情況網站打不開,銷售額白白流失的占比都高漲至60%

  3.再比如一些中小企業租用的虛擬主機,因為跟好幾個網站共用一台服務器,每個網站所分帶寬有限,帶寬過小經常導致流量稍微一多,網站打開速度就很慢,甚至打不開

  以上只是幾個簡單舉例,都可以通過CDN來解決,大家可以參考下。

  使用CDN的好處?

  1. 不用擔心自己網站訪客,在任何時間,任何地點,任何網絡運營商,都能快速打開網站。

  2. 各種服務器虛擬主機帶寬等采購成本,包括后期運維成本都會大大減少。

  3. 給網站直接帶來的好處就是:流量,咨詢量,客戶量,成單量,都會得到大幅度提升。

  CDN的價格?

  大家提起CDN,都會望而卻步,因為CDN太貴,都是大企業才能用得起的貴族式服務,而如今面對中小企業的CDN技術開發已經實現,並進入市場開始運營。

  現在市面上CDN提供商計費方式多樣,有按每月最低消費的,有按帶寬收費的,有按請求數收費的,有包月包季包年限制的,還有些大多人看不懂的技術指標收費的,總之比較復雜,CDN服務在所有計費方式中,中小企業一至認為按流量收費最為合理,另外大多按流量計費方式中會有時間限制,規定時間內用不完就會全部作廢,對於流量把握不好的中小企業,存在相當一部分浪費。

  CDN選擇的標准?

  因為CDN技術牽涉到技術研發,以及售后問題解決的是否快捷,所以在選擇cdn服務商時,一定選擇技術研發實力強專業的公司,以保證在售后出現問題時能得到及時的解決,而不能僅僅圖便宜,當時是便宜了,可事后會用更大的金錢代價來彌補,所以請選擇CDN服務的企業網站,一定要慎重了,尤其是中小企業,更經不起折騰。由於cdn市場很混亂,付完錢,出問題售后跟不上的案例太多了,大家在選擇時還是選擇專業的CDN服務商為上策,不要只圖便宜,對於專業的CDN提供商已經很便宜了。

  在CDN業界國內可供中小企業選擇的CDN專業提供商有:Webluker,盛大雲,叄加伍,加速樂等,大家可以在網上搜搜,到他們官網看看,按照上面的標准進行選擇,應該沒什么問題。

首先簡單表述一下傳統的動態系統的訪問方法:

  表述的是用戶的請求過程,用戶經過網絡中的路由A、B的傳輸,最終將發送的請求交於動態系統來處理,但是由於IP網絡本身的“盡力而為的原則”、網絡鏈路中復雜的環境及硬件的不可靠性的確實存在,致使用戶要出現重復發送的請求的現狀,所以最終導致用戶的請求在提交的過程中出現等待、數據加載時間過長的一些現象的普遍存在,這些在線提交式系統的緩慢直接地影響到辦公人員的工作效率,這也是制約着很多大型企業在協同辦公OA、ERP、SAP等信息化建設中,出現最多的問題。

  而CDN分發解決方案解決了與靜態網站相關的性能和可靠性問題,而在當今在線業務體驗中,與分發靜態和動態元素和應用相關的獨特挑戰,則由速網的動態網站加速(動態網站加速)來解決

工作原理

在描述CDN的實現原理,讓我們先看傳統的未加緩存服務的訪問過程,以便了解CDN緩存訪問方式與未加緩存訪問方式的差別:[3]

  由上圖可見,用戶訪問未使用CDN緩存網站的過程為:

  1)、用戶向瀏覽器提供要訪問的域名;

  2)、瀏覽器調用域名解析函數庫對域名進行解析,以得到此域名對應的IP地址;

  3)、瀏覽器使用所得到的IP地址,域名的服務主機發出數據訪問請求;

  4)、瀏覽器根據域名主機返回的數據顯示網頁的內容。

  通過以上四個步驟,瀏覽器完成從用戶處接收用戶要訪問的域名到從域名服務主機處獲取數據的整個過程。CDN網絡是在用戶和服務器之間增加Cache層,如何將用戶的請求引導到Cache上獲得源服務器的數據,主要是通過接管DNS實現,下面讓我們看看訪問使用CDN緩存后的網站的過程:流程圖

  通過上圖,我們可以了解到,使用了CDN緩存后的網站的訪問過程變為:

  1)、用戶向瀏覽器提供要訪問的域名;

  2)、瀏覽器調用域名解析庫對域名進行解析,由於CDN對域名解析過程進行了調整,所以解析函數庫一般得到的是該域名對應的CNAME記錄,為了得到實際IP地址,瀏覽器需要再次對獲得的CNAME域名進行解析以得到實際的IP地址;在此過程中,使用的全局負載均衡DNS解析,如根據地理位置信息解析對應的IP地址,使得用戶能就近訪問。

  3)、此次解析得到CDN緩存服務器的IP地址,瀏覽器在得到實際的IP地址以后,向緩存服務器發出訪問請求;

  4)、緩存服務器根據瀏覽器提供的要訪問的域名,通過Cache內部專用DNS解析得到此域名的實際IP地址,再由緩存服務器向此實際IP地址提交訪問請求;

  5)、緩存服務器從實際IP地址得得到內容以后,一方面在本地進行保存,以備以后使用,二方面把獲取的數據返回給客戶端,完成數據服務過程;

  6)、客戶端得到由緩存服務器返回的數據以后顯示出來並完成整個瀏覽的數據請求過程。

  通過以上的分析我們可以得到,為了實現既要對普通用戶透明(即加入緩存以后用戶客戶端無需進行任何設置,直接使用被加速網站原有的域名即可訪問),又要在為指定的網站提供加速服務的同時降低對ICP的影響,只要修改整個訪問過程中的域名解析部分,以實現透明的加速服務,下面是CDN網絡實現的具體操作過程。

  1)、作為ICP,只需要把域名解釋權交給CDN運營商,其他方面不需要進行任何的修改;操作時,ICP修改自己域名的解析記錄,一般用cname方式指向CDN網絡Cache服務器的地址。

  2)、作為CDN運營商,首先需要為ICP的域名提供公開的解析,為了實現sortlist,一般是把ICP的域名解釋結果指向一個CNAME記錄;

  3)、當需要進行sorlist時,CDN運營商可以利用DNS對CNAME指向的域名解析過程進行特殊處理,使DNS服務器在接收到客戶端請求時可以根據客戶端的IP地址,返回相同域名的不同IP地址;

  4)、由於從cname獲得的IP地址,並且帶有hostname信息,請求到達Cache之后,Cache必須知道源服務器的IP地址,所以在CDN運營商內部維護一個內部DNS服務器,用於解釋用戶所訪問的域名的真實IP地址;

  5)、在維護內部DNS服務器時,還需要維護一台授權服務器,控制哪些域名可以進行緩存,而哪些又不進行緩存,以免發生開放代理的情況。

在國內訪問量較高的大型網站如新浪、網易等,均使用CDN網絡加速技術,雖然網站的訪問巨大,但無論在什么地方訪問都會感覺速度很快。而一般的網站如果服務器在網通,電信用戶訪問很慢,如果服務器在電信,網通用戶訪問又很慢。
  它采取了分布式網絡緩存結構(即國際上流行的web cache技術),通過在現有的Internet中增加一層新的網絡架構,將網站的內容發布到最接近用戶的cache服務器內,通過DNS負載均衡的技術,判斷用戶來源就近訪問cache服務器取得所需的內容,解決Internet網絡擁塞狀況,提高用戶訪問網站的響應速度,如同提供了多個分布在各地的加速器,以達到快速、可冗余的為多個網站加速的目的。
  CDN服務最初用於確保快速可靠地分發靜態內容,這些內容可以緩存,最適合在網速龐大的網絡中存儲和分發,該網絡在幾十多個國家的十幾個網絡中的覆蓋CDN網絡服務器。
  由於動態內容必須通過互聯網來傳輸,因此要提供快速的網絡體驗,以滿足當今用戶的要求,只能通過對互聯網流量的獨特視角來達到。必須使用先進技術來了解通過互聯網的最佳路由,充分利用這些最佳路由,加速通過互聯網協議的數據通訊,以改善用戶的網絡體驗。

1、本地Cache加速 提高了企業站點(尤其含有大量圖片和靜態頁面站點)的訪問速度,並大大提高以上性質站點的穩定性

  2、鏡像服務 消除了不同運營商之間互聯的瓶頸造成的影響,實現了跨運營商的網絡加速,保證不同網絡中的用戶都能得到良好的訪問質量。

  3、遠程加速遠程訪問用戶根據DNS負載均衡技術智能自動選擇Cache服務器,選擇最快的Cache服務器,加快遠程訪問的速度

  4、帶寬優化 自動生成服務器的遠程Mirror(鏡像)cache服務器,遠程用戶訪問時從cache服務器上讀取數據,減少遠程訪問的帶寬、分擔網絡流量、減輕原站點WEB服務器負載等功能。

  5、集群抗攻擊 廣泛分布的CDN節點加上節點之間的智能冗余機制,可以有效地預防黑客入侵以及降低各種D.D.o.S攻擊對網站的影響,同時保證較好的服務質量 。

關鍵技術

(1)內容發布:它借助於建立索引、緩存、流分裂、組播(Multicast)等技術,將內容發布或投遞到距離用戶最近的遠程服務點(POP)處;

  (2)內容路由:它是整體性的網絡負載均衡技術,通過內容路由器中的重定向(DNS)機制,在多個遠程POP上均衡用戶的請求,使得用戶請求得到最快內容源的響應;

  (3)內容交換:它根據內容的可用性、服務器的可用性以及用戶的背景,在POP的緩存服務器上,利用應用層交換、流分裂、重定向(ICP、WCCP)等技術,智能地平衡負載流量;

  (4)性能管理:它通過內部和外部監控系統,獲取網絡部件的狀況信息,測量內容發布的端到端性能(如包丟失、延時、平均帶寬、啟動時間、幀速率等),保證網絡處於最佳的運行狀態。

 CDN能幾乎涵蓋國內所有線路。而在可靠性上, CDN 在結構上實現了多點的冗余,即使某一個節點由於意外發生故障,對網站的訪問能夠被自動導向其他的健康節點進行響應。CDN能輕松實現網站的全國鋪設,不必考慮服務器的投入與托管、不必考慮新增帶寬的成本、不必考慮多台服務器的鏡像同步、不必考慮更多的管理維護技術人員。

      加速樂免費CDN是由加速樂推出的免費CDN平台,通過加速樂免費CDN可以有效提高網站訪問速度200%以上,提高網站訪問量19%以上,保護網站安全。加速樂已經在全國各地區布設了數台加速節點,用戶網站在使用加速后,在有訪客訪問時,加速樂智能DNS將優先選擇最快最優的節點分配給用戶,直接從加速樂節點海量數據庫緩存將數據返回給用戶,通過使用加速樂,83%以上的網頁可以在1秒以內打開,99%以上網站可以在8秒以內打開。

 

 

主服務器群,然后在利用Squid逆向緩存web80端口來加速自己的網站.各大門戶網站象163,sina,chinaitlab之類基本都是使用的這種技術,好處是大大的有。比如加速了網絡和可以防黑客(因為他們見到的都是CDN的主機)

這是利用Squid逆向集群模式做的一種應用

 

 

網絡環境:

 

主服務器群:源Web服務器群 位於公網ip:220.XXX.XXX.X port:80(后台才是WEB的服務器)

 

要保證TCP80,UDP3130在防火牆上是開的(icp_port通訊使用,多台Squid集群才會用到)

 

全國各地分服務器:A服務器公網IP111.xxx.xxx.x

 

B服務器公網ip112.xxx.xxx.x

 

要保證TCP80,UDP3130在防火牆上是開的(icp_port通訊使用,多台Squid集群才會用到)

 

........................

需要解決的問題:

 

全國的所有用戶,無論是電信,還是網通,都能速度很好的打開網站

 

實施

 

1、分別在主服務器群和全國各地分服務器的三台服務器安裝Squid,不會安裝的請直接關閉本網頁。

 

2、分別配置Squid,這里只重點敘述Squid集群配置要點。

 

主服務器群Squid的配置:

 

http_port 220.XXX.XXX.X:80 vhost vport #Squid監聽本機ip80端口

 

icp_port 3130 #多台squid通信使用

 

cache_peer "內網web服務器的地址" parent 80 0 no-query originserver no-digest name=cache0 #設置源Web服務器群的ip和端口

 

cache_peer 220.XXX.XXX.X sibling 80 3130 name=cache1 #讓遠程的squid連接本地Squid工作在sibling模式並指定其端口

 

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache2 #A服務器

 

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache3 #B服務器

 

cache_peer_domain cache0 www.php-oa.com #配置本機squid允許接受訪問的域名

 

acl Safe_ports port 80

 

acl Safe_ports port 3130 #允許以上端口的代理

 

全國各地分服務器Squid的配置:

 

A服務器:

 

http_port 111.xxx.xxx.x:80 vhost vport

 

icp_port 3130

 

cache_peer 220.xxx.xxx.x parent 81 0 no-query originserver no-digest name=cache0 #設置主服務器群Web服務器為源服務器 

 

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache1

 

cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

 

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache3

 

cache_peer_domain cache0 www.php-oa.com

 

acl Safe_ports port 80

 

acl Safe_ports port 3130

 

B服務器:

 

http_port 112.xxx.xxx.x:80 vhost vport

 

icp_port 3130

 

cache_peer 220.xxx.xxx.x parent 80 0 no-query originserver no-digest name=cache0

 

cache_peer 112.xxx.xxx.x sibling 80 3130 name=cache1

 

cache_peer 220.xxx.xxx.x sibling 80 3130 name=cache2

 

cache_peer 111.xxx.xxx.x sibling 80 3130 name=cache3

 

cache_peer_domain cache0 www.php-oa.com

 

acl Safe_ports port 80

 

acl Safe_ports port 3130

雖然配置好了但是如何讓電信和網通的用戶能有選擇的訪問兩個不同鏡像呢?這個請各位自己查相關的資料,要不到https://www.dnspod.com申請雙線,電信網通的轉發服務

 

:下面看看cache_peer的參數

 

通過squid.conf配置文件中的cache_peer選項來配置代理服務器陣

列,通過其他的選項來控制選擇代理伙伴的方法。Cache_peer的使用格式如下:

cache_peer hostname type http_port icp_port

共有5個選項可以配置:

1. hostname:指被請求的同級子代理服務器或父代理服務器。可以用主機名或ip地址表示;

2. type:指明hostname的類型,是同級子代理服務器還是父代理服務器,也即parent(父) 還是 sibling(子);

3. http_porthostname的監聽端口;

4. icp_porthostname上的ICP監聽端口,對於不支持ICP協議的可指定7

5. options:可以包含一個或多個關鍵字。

Options可能的關鍵字有:

1. proxy-only:指明從peer得到的數據在本地不進行緩存,缺省地,squid是要緩存這部分數據的;

2. weight=n:用於你有多個peer的情況,這時如果多於一個以上的peer擁有你請求的數據時,squid通過計算每個peerICP響應時間來 決定其weight的值,然后squid向其中擁有最大weightpeer發出ICP請求。也即weight值越大,其優先級越高。當然你也可以手工 指定其weight值;

3. no-query:不向該peer發送ICP請求。如果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM