內容交付網路(CDN)系統設計
內容交付網路(CDN)系統設計
CDN是一組地理分佈的代理伺服器。代理伺服器是客戶端和來源伺服器之間的中間伺服器。這些代理伺服器位於網路邊緣,靠近終端用戶。代理伺服器的放置有助於透過減少延遲和節省頻寬來快速將內容交付給終端用戶。CDN還具有額外的智慧功能,用於優化流量路由並實施規則以保護免受DDoS攻擊或其他異常網路事件的影響。
從本質上講,CDN解決了兩個問題:
- 高延遲。如果您的服務部署在美國,那麼亞洲地區的延遲將較高,這是由於與提供資料中心的實體距離造成的。
- 數據密集型應用程式:它們傳輸大量數據。在較長距離上,由於路徑中存在多個網路服務供應商,可能會出現問題。其中一些可能具有較小的鏈路、擁塞、資料包遺失和其他問題。距離越長,路徑上的服務提供者就越多,其中一個出現問題的幾率就越高。
讓我們從高級組件設計和主要工作流程開始。
進階架構
- 路由系統將客戶端引導到最近或最優的CDN位置。為了有效地執行此功能,該元件接收來自各種系統的輸入,以了解請求來自何處、內容位於何處、資料中心的繁忙程度等等。有兩種最受歡迎的路由系統:具有負載平衡的DNS和Anycast。我們將在視頻中討論它們。
- Scrubber伺服器用於分離良好的流量和惡意流量,以防範DDoS攻擊。Scrubber伺服器通常僅在偵測到攻擊時使用。如今,Scrubber伺服器非常複雜,允許客戶端推送非常細粒度的防火牆規則,並在即時中在所有資料中心應用這些規則。
- 代理或邊緣代理伺服器為終端用戶提供內容。它們通常會將內容緩存,並從RAM中提供快速檢索。
- 內容分發系統負責將內容分發到不同CDN設施中的所有邊緣代理伺服器。通常使用樹狀分發模型。稍後在影片中會詳細介紹。
- 來源伺服器是託管在CDN上分發的原始內容的使用者基礎架構。
- 數據控制系統用於觀察資源使用和統計資訊。此元件測量指標,如延遲、停機時間、資料包遺失、伺服器負載等等。然後將其反饋給路由系統以進行最佳路由。
讓我們走一遍主要的工作流程:
- 我們從來源伺服器為特定DNS網域或特定DNS名稱提供內容委託開始。它告訴CDN所有到特定URL的請求將被代理。
- 來源伺服器將內容發佈到分發系統,負責在一組邊緣代理伺服器上分發內容。通常使用「推送」和「拉取」模型,通常兩者都會被使用。
- 分發系統將合格的內容傳送給代理伺服器,同時追蹤哪些內容在哪個代理伺服器上被快取。它還了解哪些內容是靜態的和動態的,需要刷新的資料的TTL、內容租約等等。
- 客戶端向路由系統請求適當的代理伺服器IP,或使用Anycast IP來路由到最近的位置。
- 客戶端請求透過Scrubber伺服器。
- Scrubber伺服器將良好的流量轉送到邊緣代理。
- 邊緣代理伺服器為客戶端請求提供服務,並定期將其健康資訊轉發給資料控制系統。如果代理程式中不可用的內容,則會路由到來源伺服器。
現在想像一下,您有一個單一的網站,需要將內容分發到20個地區,每個地區有20個需要儲存的代理商。20個地區+20個副本,這意味著您需要將資料傳輸到CDN 400次,非常低效。為解決這個問題,可以使用類似樹狀複製模型。
樹狀內容分發
資料被傳送到地區邊緣代理伺服器,然後使用CDN的內部網路將其複製到同一地區的子代理伺服器。這樣,我們只需每個地區或地理區域複製一次內容。根據規模的不同,地區可以是特定的資料中心或更大的地理區域,其中我們有兩個層級的父代理伺服器。
對於用戶來說,從最近的代理伺服器獲取資料至關重要,因為CDN的目標是透過將資料靠近用戶來減少延遲。CDN公司通常使用兩種路由模型。第一個基於負載平衡的DNS,歷史上最受歡迎。我認為更新且更有效的是Anycast模型,它將路由和負載平衡委託給Internet的BGP協定。讓我們來看看它們。
在典型的DNS解析中,我們使用DNS系統來取得與可讀的名稱對應的IP。在我們的情況下,我們將使用DNS返回另一個DNS名稱給客戶端。這被稱為DNS重定向,內容提供者使用它將客戶端傳送到特定的CDN區域。例如,如果客戶嘗試解析company.com,權威DNS伺服器會提供另一個URL(例如cdn.us-east.company.com)。客戶端進行另一次DNS解析,並取得US-East地區適當的CDN代理伺服器的IP位址。根據使用者的位置不同,DNS的回應也會不同。
因此,首先根據使用者的位置將客戶端對應到適當的資料中心。在第二步驟中,它調用一個負載平衡器之一,以在代理伺服器上分發負載。若要將客戶從一個區域轉移到另一個區域,必須進行DNS更改,以刪除在困難區域的負載平衡器IP。為使此運作正常,必須將DNS TTL設為最低,以便用戶端盡快取得變更。
但仍會有一些流量通過,如果該區域發生故障,流量將受到影響。我在另一篇關於可擴展API網關和邊緣設計的影片中討論了類似的問題。我會在描述中放置一個影片連結。
更有效的方法是Anycast設計。
Anycast是一種路由方法,其中位於多個位置的所有邊緣伺服器共用相同的單一IP位址。它利用邊界網關協定或BGP來根據網際網路的自然網路流向路由客戶端。CDN使用Anycast路由模型將網路流量傳送到最近的資料中心,以確保提供改進的回應時間,並在出現特殊需求,如DDoS攻擊時,防止任何資料中心受到交通超負荷的影響。
當請求發送到Anycast IP位址時,路由器將將其引導到網路上最近的機器。如果整個資料中心發生故障或發生維護,Anycast網路可以對故障做出類似於負載平衡器跨多個伺服器或區域分流流量的應對;資料將從故障的位置轉移到仍然在線和正常運行的另一個數據中心。
Anycast的可靠性
使用DNS和負載平衡器的Unicast IP使用單一機器,單一IP。大多數互聯網都是透過Unicast路由模型工作的,其中網路上的每個節點都會獲得一個唯一的IP位址。
Anycast是-許多機器,一個IP
雖然Unicast是運行網路最簡單的方法,但不是唯一的方法。使用Anycast意味著網路可以非常有彈性。因為流量將找到最佳路徑,我們可以將整個資料中心脫機,流量將自動流向下一個最近的資料中心。
Anycast的最後一個好處是它也可以幫助緩解DDoS攻擊。在大多數DDoS攻擊中,使用許多被攻陷的「殭屍」電腦來形成所謂的殭屍網路。這些機器可以分散在網路中,並產生大量流量,以至於它們可以淹沒典型的Unicast連接的機器。Anycasted網路的性質在於,它在固有地增加了吸收此類攻擊的表面積。分散式殭屍網路將其服務拒絕服務的流量的一部分吸收到每個具有容量的資料中心。
現實世界中的例子是Cloudflare,它建立了一個遍布全球數百個地方的全球代理商網路。它聲稱使他們與全球95%的網路連線人口約相距50毫秒。由於網路也建立在Anycast IP上,它提供了總容量超過170 Tbps。這意味著他們不僅能為大量客戶提供服務,還能透過將惡意流量分散到多個位置來處理最大的DDoS攻擊。