7.1.4cdn的基本原理
cdn的基本原理可概括為:內容快取、就近訪問以及以dns檢視方式根據使用者**確定其訪問位置。
◆內容快取:快取伺服器從源站取得所需資料,然後暫存在本地的硬碟或記憶體。使用這種快取機制的好處是:(1)內容自動更新;(2)無多個伺服器資料相互同步問題。 ◆
就近訪問:讓使用者的訪問請求轉向到離使用者最近或最易於訪問的快取伺服器。
◆以dns檢視方式根據使用者**確定其訪問位置:即讓電信的使用者訪問電信的快取伺服器,網通使用者訪問網通的快取伺服器。
7.1.5什麼是簡單cdn
簡單cdn這個概念,是相對於複雜cdn來定義的。因此,我們先來了解一下什麼是複雜的cdn。
籠統一點的講,cdn服務提供商所運營的環境,就是複雜cdn。就快取伺服器而言,其結構是分層次的,一般可劃分成核心節點和邊緣節點。並且同一層級的相鄰節點之間又可形成姐妹關係,亦即在同乙個集群下的節點互為姐妹關係。為了保證最高的效能能和效率,不建議跨網或跨物理範圍的節點形成姐妹關係。為了更直觀的理解這個結構和由此產生的好處,我在這裡以乙個最長訪問路徑的圖示來說明:
7-2
快取伺服器相互關係
1、使用者向某邊緣伺服器(邊緣a)發起訪問請求,所需內容沒有被快取。
2、邊緣伺服器(邊緣a)於是詢問其鄰居,是否快取了使用者所需的請求物件,鄰居節點也沒有快取所需的物件。
3、邊緣伺服器(邊緣a)轉而向某個父節點(核心a)請求檔案,如果該父節點仍然無所需的檔案,則該父節點詢問其鄰居;如果鄰居也沒有所需的檔案,則把請求轉給源站。
4、源站返回資料給核心節點(核心a),並快取資料在該節點。
5、核心節點(核心a)返還資料給邊緣節點(邊緣a),並快取資料在該節點。
6、邊緣節點返還資料給使用者,一次最長路徑的訪問完成。
這種分層次的機制,既能保證最高的可用性,又能最大限度的減少向上一級節點的網路流量。
除了快取伺服器結構上的差異外,複雜cdn還具備以下一些特性:
(1)快取伺服器布點範圍廣,伺服器數量龐大。
(2)複雜的日誌處理系統。因為計費依賴於訪問日誌。
(3)詳細的檢視劃分。例如精確到每個省的ip位址段。
(4)預載入機制。
當我們了解清楚複雜cdn以後,再來了解簡單cdn就容易多了。所謂簡單cdn,就是節點層次簡單、伺服器數量有限、能實現有限規模站點加速和發布的平台。通常情況下,我們不必為實現cdn帶來的好處而部署複雜的cdn系統,這將花費巨大的人力物力。把複雜的cdn簡化,使之符合我們的業務需求,是本章「簡單cdn」撰寫的用意所在。
7.2簡單cdn設計
先申明一下,本文所設計的簡單cdn只是乙個樣例,並非適用於所有的場景。讀者可根據我的思路,設計出更適合自己應用環境的簡單cdn。
7.2.1簡單cdn設計的基本原則
簡單cdn設計主要考慮以下幾點:
(1)選點合理,能覆蓋大部分網路使用者。最起碼得在電信和網通機房放置快取伺服器,如果經費充裕,把教育網也考慮進來。
(2)系統本身具備很好的高可用特性。使用者的訪問主要集中在快取伺服器,快取伺服器之間使用集群技術就能得到比較高的系統可用性。
(3)核算自建簡單cdn的成本,使之有較好的價效比。如果自建乙個cdn遠比購買cdn服務商所花費的資金還高(目前國內商用cdn每兆頻寬為50元/月,基數是1g),基本上沒必要自己建立cdn了。
(4)系統應該具備很好的伸縮能力,以適應各種業務變化。如增加布點、增加裝置、增加站點等等。
7.2.2需求描述
www.sery.cn
,3個站點全部是靜態內容,其頁面檔案主要是.html(htm)、.exe、css、jpeg、js等,非常適合被快取。
服務的主要目標使用者包括電信線路的使用者、網通線路的使用者、教育網的使用者,其他線路的使用者(如科技網、長城寬頻等)訪問請求被轉向到網通線路的快取伺服器。為了實現這個目標,我們可能需要放置4組伺服器來做快取,即電信一組,網通2組,教育網一組。
7.2.3簡單cdn設計
需求明確之後,接下來的設計工作包括:布點選擇、工具選取、cdn結構設計等幾部分。
◆布點選取
布點包括源站、全域性智慧型dns、快取伺服器集群。
(1)源站及全域性智慧型dns選擇互聯互通性較好的第三方bgp機房;因為使用cdn服務的站點數量有限,故在快取伺服器以主機名的方式定址源站。
(2)快取伺服器共4組,選擇二線或三線城市的機房託管,能節省大量的資金—北京、上海等城市頻寬**大概在300~400元/兆/月,而偏遠一點二三線城市(如安陽)1g頻寬的年總費用才8-10萬。
◆工具選取
工具包括作業系統、dns軟體、快取伺服器軟體、負載均衡軟體、源站軟體以及定製的指令碼。
(1)所有的伺服器均使用32位的centos 5.x。曾經使用過64位的系統,但在執行快取伺服器的快取清理操作時,有些小問題。
(2)dns使用bind-9.4.0。低於9的版本,可能不支援檢視view,沒有檢視功能,智慧型dns就無法實現。不知道其他的dns軟體有沒有支援檢視view的,願知者告知。
(3)快取伺服器有兩種選擇,一種是squid,另一種是varnish。squid多用在複雜cdn場景,它能實現快取伺服器間的層級關係(鄰居形成姊妹、邊緣節點與核心節點形成父子關係),功能強大而配置複雜;varnish為後起之秀,配置簡單而效能卓越,維護起來比較簡單,因此本案選擇varnish作為快取工具【注1】
。 (4)
負載均衡由ipvsadm和keepalived兩部分組成。ipvsadm是核心,負責包**和負載分攤;keepalived為框架,負責故障隔離和失敗切換failover。
(5)可做web服務的軟體比較多,因為站點為簡單的靜態檔案,選擇nginx比較省事。
(6)定製指令碼主要目的是自動重新整理快取服務,把這個指令碼放在摸個伺服器上,只需執行一次(也可使用crontab自動呼叫)就能實現所有快取伺服器的快取清理。
◆ cdn結構設計
我們可根據cdn的角色來設計整個結構,這些角色包括:源站、智慧型dns及快取伺服器3大部分,根據布點選擇和其他因素綜合考慮,我們可繪出整個cdn的布局結構圖。
圖7-3 cdn
伺服器布局
從圖中可以看出有2組快取伺服器放置在網通機房,這兩組伺服器不在同乙個物理位置,這樣做主要目的是:bind規劃檢視view時,能收集到的位址比較有限,不在收集列表的其他ip位址段,則統統**給網通b機房的伺服器;另外網通b機房的頻寬比較便宜,機器數量也比較多,跟其他網段的互聯互通還可以。
(1)源站
源站為內容的原始發布,儘管採用cdn技術以後源站的負荷會變得很小,但為了有較高的可用性,可把它部署成負載均衡集群。
(2)智慧型dns
智慧型dns是用來實現使用者訪問轉向功能,即通過建立訪問列表,判斷使用者的訪問**,確定其訪問物件的位置。在本案中,我建立電信、網通、教育網三個ip位址列表,未在這三個列表的稱為其他;每個列表關聯乙個bind的檢視view,那麼一共就有4個檢視view。位址列表可以自己收集,也可以花錢購買,位址列表越大,dns定向準確性越高。在這裡強調一下:ip位址列表為客戶dns伺服器所在網段的列表,而不是使用者接入網路的ip段。客戶端計算機所設定的dns,通常稱為使用者本地dns。同樣,為了使其有較高的可用性,dns採用主從同步的架構。
以下內容省略.
簡單cdn實現
簡單cdn功能測試
簡單cdn監控
簡單cdn維護
其他
CDN總結之二
cdn中的三個主要角色為 cdn提供者 內容提供者以及使用者。內容提供者在cdn提供者那兒進行註冊而使用服務,將其內容儲存到cdn提供者分布式的 伺服器上。內容可能是以提前準備的方式或者基於使用者需求的方式儲存在 伺服器上,以響應使用者的訪問。使用者的請求將會被最近的 伺服器響應。cdn提供者負責進...
設計模式之二 簡單工廠
最近這幾天把之前學到的設計模式寫個總結,現在先寫個簡單工廠模式 先看下uml圖吧 從uml圖中我們可以看出,phonefactory呼叫getphone方法去產生對應的phone物件 然我們看看 吧 package edu.fjnu.cs.hwb.esayfactory 定義個phone介面 pub...
CDN的簡單理解
程式設計師每天提及的無數詞當中,有乙個是 cdn ta的中文名是 內容分發網路 讀中文是令人矇逼的,英文名是content delivery network.cdn有啥用呢?它主要用來解決什麼問題呢?它的原理大概是怎麼樣的呢?我們先拆解下這三個名詞。cdn動作是 分發 也就是cdn的d所代表的del...