跳至主要內容
ESC
經典架構拆解 — 第 1/6 篇

經典架構拆解 · 01 — Netflix 全球串流架構

經典架構拆解 · 01 — Netflix 全球串流架構
Updated: 2026-08-04

講到串流影片,有一家公司的工程選擇幾乎是每個架構師都讀過的:Netflix。他們厲害的地方不只是規模大,而是每個決策背後都有一個說得出口的業務理由——這也剛好是 PCA(Professional Cloud Architect)考試最想看你示範的思維:不是背服務,是解釋「為什麼是這個」。

這是經典工程架構拆解系列的第一篇,我們從最具代表性的 Netflix 開始。

全球串流平台架構:Viewer 的登入、片單、播放授權與個人化請求經 API gateway 進入 Active-Active Microservices 控制面,觀看 Events 供 Recommendations 使用;真正 Video bytes 由 Origin 預先放入鄰近 ISP edge 的 Open Connect CDN,經獨立內容面直送 Viewer;Chaos test、Circuit breaker 與 Reroute 驗證故障隔離

這套架構最重要的分界是「控制」與「內容」:控制面決定誰能播、播什麼並收集事件;占頻寬最大的影片位元則從 ISP 邊緣快取直送,不穿過微服務。Active-Active、熔斷與常態混沌測試處理的是控制面故障隔離,CDN 預熱與改道則保護內容交付路徑。


為什麼值得拆解

Netflix 從 2008 年資料庫崩潰那一刻開始,花了 7 年把自家服務搬上 AWS,後來又花了更久的時間,把整個平台拆成上千個微服務(microservices)。他們公開聊過的那些架構模式,像是 Open Connect CDN、Chaos Engineering、Zuul gateway、Hystrix 熔斷器(circuit breaker),幾乎都成了整個產業的教材。

對 PCA 考生來說,Netflix 這個案例剛好踩在三個常考的點上:全球流量分散(global load distribution)、active-active 容錯、事件驅動架構(event-driven architecture)。這三件事後面各會配一個考場提點,告訴你題目會怎麼問、選項會怎麼挖坑。把這家公司的設計邏輯弄懂,你就會發現很多看似不同的考題,其實在問同一件事。


商業規模與壓力

根據 Netflix 2024 年 Q4 財報公開揭露,付費訂閱戶在 2024 年底超過 3.01 億,全球約 190 個國家有服務;單季營收約 102 億美元。根據 Sandvine 於 2023 年公開發表的《Global Internet Phenomena Report》,Netflix 流量長期占據北美下行網際網路頻寬前三名,部分時段可達總量的 14% 以上。

這種規模代表什麼意思?

  • 任何一個微服務若失效 5 分鐘,就可能影響數百萬同時觀看的使用者
  • 單一資料中心(data center)無論多大,都裝不下全球的 ISP 流量,必須把內容推到離使用者最近的地方。
  • 晚間尖峰時段,單一熱門影集(例如《魷魚遊戲》)可以在同一小時內被數千萬帳號同時點播。

規模大本身沒什麼好學的,真正要學的是怎麼把這種規模拆成一個個管得動的架構決策

控制面只處理登入、推薦與授權;真正占頻寬的影片 bytes 走獨立內容面,盡量由 ISP 內的 edge cache 直接供應。

架構演進簡史

年份里程碑意義
2008資料庫大規模損壞事件Netflix 決定不再自建資料中心,開始搬上 AWS
2011發布 Chaos Monkey首次把「主動讓 EC2 隨機關機」變成正式工程實踐
2013Zuul gateway 開源把前端路由、認證、限流統一收攏到 API gateway
2016完成 AWS 遷移最後一個地端資料中心關機,七年上雲計畫結束
2017–今Open Connect 深度嵌入 ISP全球 1,000+ ISP 直接在機房放 Netflix 快取盒

把這條演進線收斂成一張圖,整個系統的骨架大概長這樣:

控制平面(AWS)

影片串流

API 請求

故障注入

全球使用者

Open Connect 邊緣節點

(嵌入各地 ISP)

Chaos Monkey

注入故障

Zuul API Gateway

(路由/認證/限流)

微服務群

(播放/推薦/計費)

Kafka 事件匯流

離線推薦訓練

Netflix 核心架構:影片走 Open Connect 直送各地 ISP;控制流經 Zuul 進入 AWS 上的微服務,行為事件走 Kafka 做離線推薦;Chaos Monkey 常態注入故障。

串流播放分成控制平面與影片資料平面:控制請求取得播放授權與邊緣位置,影片則從 ISP 內的邊緣快取送往裝置

這是便於理解的概念模型:控制平面處理登入、推薦與播放授權;大流量影片則盡量由靠近使用者的邊緣快取供應。兩條路徑分開後,業務邏輯與媒體傳輸才能各自擴充。


核心技術決策

決策為何這樣選替代方案與為何沒選
影片走 Open Connect(自建 CDN 嵌入 ISP)影片檔大、流量長、商業 CDN 在高訂閱密度地區成本會爆炸;直接把快取放進 ISP 機房還能降低跨境骨幹壓力純買 Akamai / CloudFront:成本隨流量線性成長,無法優化骨幹
控制平面全上 AWS,不自建資料中心Netflix 想把資源投在差異化能力(推薦、編碼、個人化),不想再管硬體自建或混合雲:維運負擔與擴容速度都跟不上業務
微服務 + Zuul gateway拆到幾千個服務,讓不同團隊能獨立部署;gateway 統一處理路由、認證、限流單體或粗粒度 SOA:部署頻率被互相阻擋
主動混沌工程(Chaos Monkey / Simian Army)與其被動等故障發生,不如每天在正式環境(production)隨機拔插頭,強迫所有服務具備容錯僅做 staging 測試:staging 永遠無法重現真實流量與依賴圖
推薦與個人化用 event-driven + 離線訓練使用者行為量太大,無法同步處理;用 Kafka 匯流後離線建模、線上推論全線即時:延遲與成本都不可行

這張表裡最值得體會的,是「成本會隨流量怎麼長」這個直覺。Netflix 走 Open Connect 是因為商業 CDN 的帳單跟著流量線性爬,規模到了就爆——我在一個小很多的案子也碰過同一種取捨:一個下載量不大的媒體網站,早期圖檔與影片全靠物件儲存直出,每月 egress(對外流量)費用看著還好,直到一支內容被分享出去,當月流量翻了快十倍,帳單也跟著翻。後來在前面掛一層 CDN,把熱門檔案快取住,下個月成本就壓回來了。規模差了好幾個數量級,但底層的力學一模一樣:會隨流量線性成長的成本,遲早要靠快取或邊緣攔下來,這也是 PCA 算成本題時最常見的轉折點。

熱門內容先在離峰時預熱,可把大量尖峰流量留在 ISP 邊緣;只有 cache miss 才回源,並把取得的片段寫回快取。
自適應串流流程:影片經多規格編碼與切片後進入邊緣快取,播放器依頻寬與緩衝狀態逐段選擇畫質

自適應串流不會一次下載完整影片,而是把內容切成短片段。播放器每次量測頻寬與緩衝,只調整下一段的畫質;邊緣快取未命中時才回來源補片並寫回快取。

自適應串流不是一次選定整部影片畫質,而是每個片段都根據最新頻寬與 buffer 重新判斷,避免網路波動直接中斷播放。

如果用 GCP 重新蓋

若今天要在 GCP 上重蓋類似平台,可以這樣對應:

  • 邊緣內容分發: Cloud CDN + Media CDN,搭配 Cross-Cloud Interconnect 拉到主要 ISP;真正重度的 ISP 嵌入仍需自建,GCP 端提供來源(origin)層。
  • 微服務平台: GKE(regional cluster)+ Cloud Service Mesh(原 Anthos Service Mesh),用 Istio 做統一路由、mTLS、限流,取代 Zuul + Hystrix 的角色。
  • 事件匯流: Pub/Sub 作為行為日誌與服務間事件的主幹線。
  • 中繼資料(metadata): Spanner(強一致、多區)存影片 catalog、使用者狀態;Bigtable 存 time-series 的觀看事件。
  • 離線分析與推薦訓練: BigQuery + Dataflow + Vertex AI。
  • 容錯演練: GCP 沒有對等 AWS Fault Injection Service 的原生託管服務,可用 Chaos Toolkit(含 GCP driver)或自建 Kubernetes 層 chaos controller(如 Chaos Mesh)。

這份對應表不是要你死背,而是練一種感覺:同樣一個業務問題,換到別朵雲也能推出差不多的架構。我自己換工具鏈時最有用的就是這種對應——把上一份工作學到的設計直覺,平移到新的雲廠商,比從零開始啃文件快太多。

混沌工程不是隨機破壞,而是先定義可接受影響,再持續用真實故障驗證隔離、切換與降級機制。

📝 考場提點

全球流量分散這類題,PCA 最常用「跨洲使用者抱怨延遲」或「某區域流量暴增」當包裝。看到關鍵字就往邊緣靠:靜態與大檔(影片、圖片、套件)→ Cloud CDN / Media CDN 把內容快取到離使用者最近的 PoP;要把全球請求導到最近、最健康的後端 → global external HTTP(S) Load Balancer(單一 anycast IP,這點常是正解的決定性差異)。

選項陷阱有兩種長相:一是給你「在每個區域各開一台 regional load balancer,再自己用 DNS 輪流」,看起來能動,但少了 anycast 與自動故障切換,跨區體驗很差——比不上單一 global LB;二是把「加大單一資料中心的機器」當答案,這在「全球」題裡幾乎一定是錯的,因為一座機房再大也吃不下全球 ISP 流量,Netflix 當年就是看清這件事才走 Open Connect。


常見誤解

  • 「Netflix 所有東西都放 AWS」 —— 錯。影片本體走 Open Connect,只有控制平面、計費、推薦訓練在 AWS。把兩者混為一談會低估 CDN 成本對架構的決定性。
  • 「Chaos Monkey 只是測試工具」 —— 它的意義不是工具本身,而是把「故障永遠會發生」變成工程文化。考題若問「如何驗證多區容錯」,答案不是跑一次 failover drill,而是建立常態化注入故障的流程。
  • 「微服務越多越好」 —— Netflix 公開承認過微服務的複雜度成本極高,需要 Zuul、Eureka(服務發現,幫服務互相找到對方)、Hystrix(熔斷器,某個下游掛了就先擋住、不讓故障擴散)等一整套治理工具。盲目拆分會複製複雜度但沒有對應團隊能力。

關於同步依賴這件事,我自己踩過一個小坑:一個訂單系統在送出訂單的同一條請求裡,順手同步呼叫了寄信服務寄確認信。平常沒事,直到某天郵件供應商變慢,整個下單流程跟著卡住——明明信晚點寄完全沒關係,卻因為綁在同一條同步鏈上,把核心交易一起拖垮。後來把寄信改成丟一則訊息到佇列、由背景處理,下單就再也不受它影響。Netflix 把計費、推薦、觀看事件全推上訊息佇列是同樣的道理,只是他們的量級大到非這樣不可;而這個「該解耦的地方有沒有解耦」正是 PCA 反覆在考的判斷。

📝 考場提點

容錯題的關鍵字是「region 掛掉還要能服務」「跨區自動切換」「RTO 接近零」。看到就往 active-active(雙活:兩區平常都在收流量,一區掛了另一區直接頂上,前面用 global LB 自動把故障區的流量導走)想,而不是 active-passive 的冷備援(備援區平常閒置,出事才啟動)——後者切換要時間,碰到「分鐘內接管」「使用者無感」的要求會輸。資料層別忘了配跨區強一致的 Spanner,不然算到 region 切換才發現資料不同步。陷阱選項常見「靠人工觸發 failover」或「只跑過一次演練就當作驗證完成」,這兩個都會被「常態化、自動化」的選項比下去。

另一條主線是事件驅動解耦:題目描述「尖峰時上游一變慢、下游就整串卡死」或「兩個服務硬綁在一起、要一起部署」,答案幾乎都是在中間插一層 Pub/Sub 把同步呼叫改成非同步。看到「削峰填谷」「buffer 突發流量」「服務間不要直接相依」這些字眼,先往訊息佇列靠,再回頭檢查選項裡有沒有人把它包成別的服務。


來源與延伸閱讀


下一篇:規模一樣大,但問題完全不同的Uber 即時派單架構,看他們怎麼用地理分片,搞定「每秒鐘成千上萬次的司機與乘客配對」。

🎯 換你練習

想動手設計類似系統?到 架構師設計工作坊 用這套思考步驟走一遍,也可以對照 PCA 五大案例庫 的官方題目練手。

經典架構拆解 — 1/6 完成 查看系列全覽 →

留言討論

徽章解鎖!