內容傳遞網路(a content delivery network, CDN)
想像一位暢銷作家的書只在一座城市印刷。如果全世界的人都得向那一家印刷廠訂購,運送會很慢,印刷廠也會不堪負荷。於是出版社改在每個大陸的倉庫都備貨,讓讀者由最近的倉庫供應。內容傳遞網路對網路而言正是如此:一支全球分散的伺服器隊(稱為邊緣或代理伺服器 edge / surrogate servers),從實體上靠近使用者的地點快取並提供某網站的內容,而不是所有人都去連那一台原始伺服器。
流程是這樣。網站把它的內容(圖片、腳本、影片,常常還有整個頁面)卸載到 CDN。當你請求某物時,你會被導向附近的邊緣伺服器,而非遙遠的原始伺服器——這個重導向用兩種方式之一完成:DNS(網站的 DNS 解析會回傳你所在位置最近的邊緣叢集位址),或 IP 任播(anycast,許多邊緣伺服器共用同一個 IP 位址,由網路自身的路由把你送到最近的那台)。若該邊緣已有副本,它立刻提供一次快取命中;若沒有,它向原始伺服器取得一次(一次未命中與填充)、儲存副本、再提供它——之後每個附近的請求都是快速命中。
為什麼重要:CDN 一次同時打擊網路速度的兩個敵人。它藉由縮短實體距離、進而縮短往返時間來大幅降低延遲,又藉由在邊緣吸收大多數請求來替原始伺服器擋下負載與流量尖峰——所以一台普通的原始伺服器也能服務全球觀眾並撐過瞬間爆量。CDN 也常在邊緣提供 TLS 終結、壓縮與 DDoS 吸收。誠實的限制:CDN 擅長「對許多使用者都相同」的內容(靜態資產、影片片段);高度個人化或快速變動的資料較難快取、可能仍需原始伺服器,而 CDN 本身也多加了一層要除錯、要保護、要信任的東西。
一個架在愛爾蘭單一伺服器上的小部落格在全球爆紅。在 CDN 之後,東京的讀者只需幾毫秒就從東京的邊緣伺服器取得圖片與頁面,而愛爾蘭的原始伺服器幾乎看不到額外流量——只有偶爾的填充。
每位讀者附近都有倉庫:邊緣伺服器在使用者身邊提供內容。
CDN 在使用者附近快取並傳遞內容;它與資料中心網路設計(單一機房內伺服器如何互連)不同。CDN 也無法讓不可快取、每位使用者各異的內容瞬間出現——那份工作仍落在原始伺服器身上。