跳轉到

2020s - 雲端原生:虛擬化六十年大結案#

案件摘要#

2020 年代,虛擬化演化成「雲端原生」生態系:Kubernetes 成為作業系統級的排程核心,Serverless 把 VM 縮小成一個函式呼叫,Firecracker microVM 與 Wasm 分頭解決冷啟動與密度難題。這是 1962 年以來虛擬化六十年長案的終章。

前因 -- 為什麼會有這個案子#

  • 2013 年 Docker 讓容器普及、2014 年 Kubernetes 讓容器可編排,但基礎設施管理(部署、擴縮、監控)仍是人工苦工。
  • Serverless(AWS Lambda,2014)把計費單位縮小到「函式 × 毫秒」,但 VM/容器級的冷啟動(cold start)動輒數百 ms~數秒,成為最大嫌犯。
  • 雲端原生基金會(CNCF,2015)定義了新案標準:「雲端原生技術讓組織在現代動態環境(公有雲、私有雲、混合雲)中建構並執行可擴展的應用」——容器、服務網格、微服務、不可變基礎設施、宣告式 API。

線索與推理 -- 數學式、程式、理論#

線索 1:Kubernetes 生態──Operator、GitOps、ArgoCD#

Kubernetes 的核心理論是控制迴圈(reconcile loop):宣告期望狀態 \(\text{desired}\) ,控制器不斷收斂實際狀態 \(\text{actual}\) :

\[ \lim_{t \to \infty} \text{actual}(t) = \text{desired} \]

# 模擬 K8s reconcile loop
def reconcile(desired_replicas, actual_replicas):
    while actual_replicas != desired_replicas:
        actual_replicas += 1 if actual_replicas < desired_replicas else -1
    return actual_replicas

print(reconcile(10, 3))  # 10:不斷收斂到期望狀態
- Operator 模式:用 CRD(自訂資源)+ 控制器把「人類維運知識」編碼成程式。 - GitOps(ArgoCD):Git repo 是唯一真相來源,git push 即部署:

\[ \text{cluster state} = f(\text{git repo}) \]
argocd app sync myapp   # 叢集狀態收斂到 Git 中宣告的狀態

線索 2:Serverless、FaaS 與冷啟動#

AWS Lambda(2014)的計費模型:

\[ \text{cost} = \text{executions} \times \text{duration} \times \text{memory} \]

但冷啟動延遲:請求到達時若無熱實例,需先配置容器再執行:

\[ T_{resp} = \begin{cases} T_{exec} & \text{熱路徑} \\ T_{cold} + T_{exec} & \text{冷路徑(}T_{cold} \approx 100\text{ms}\sim\text{s 級)} \end{cases} \]

Wasm 解法:Wasm 實例啟動僅需數 ms、記憶體僅數 MB,甚至支援快照/恢復(snapshot restore):

# Spin(Fermyon):Wasm FaaS
spin new http-rust hello && spin build && spin up
# curl http://127.0.0.1:3000  — 冷啟動 < 10ms

線索 3:Service Mesh──Istio 與 sidecar#

微服務之間的通訊(重試、加密、流量控制)被抽出為 sidecar proxy:

\[ \text{service A} \leftrightarrow \text{sidecar}_A \leftrightarrow \text{sidecar}_B \leftrightarrow \text{service B} \]

每個 Pod 伴隨一個 Envoy sidecar,服務間通訊一律經過 mTLS 加密與 L7 路由——代價是每跳增加一跳延遲與 sidecar 資源開銷(推動了 2022 後的 sidecarless 與 eBPF 路線,如 Istio ambient mode)。

線索 4:Firecracker microVM(2018)#

AWS 為 Lambda 與 Fargate 打造 Firecracker:以 KVM 為基礎的極簡 microVM,僅保留最必要的裝置模型:

\[ \text{microVM} = \text{KVM 硬體虛擬化} - \text{不必要的裝置模擬(BIOS、PCI、USB…)} \]

啟動約 125 ms、記憶體開銷 < 5 MB,兼具「VM 的硬體級隔離」與「容器的速度與密度」。

線索 5:Wasm 進入雲端──WasmEdge、wasmCloud#

# WasmEdge:邊緣與雲端執行 Wasm
wasmedge app.wasm
# wasmCloud:分散式 actor 模型,Wasm 元件即服務
wash up   # 啟動 wasmCloud host
Wasm 元件模型(Component Model, W3C 2023+)讓「一個 .wasm 元件」成為跨語言、跨平台的部署單位。

線索 6:從 VM → 容器 → microVM → Wasm 的抽象層級演進表#

層級 年代 隔離 啟動 密度 代表
系統 VM 1960s–2000s 硬體級 分鐘 低 CP-40、VMware、KVM
容器 2000s–2013 kernel 級 秒/ms 高 jail、LXC、Docker
microVM 2018 硬體級 ~125ms 高 Firecracker、Cloud Hypervisor
Wasm 2015/2017+ 語言級沙箱 ~1–10ms 極高 Wasmtime、WasmEdge

線索 7:隔離性 vs 啟動速度 vs 密度的三角權衡#

三個目標互相牽制,虛擬化技術的演進就是在三角上找新頂點:

\[ \text{安全} \uparrow \Rightarrow \text{開銷} \uparrow, \qquad \text{密度} \uparrow \Rightarrow \text{隔離} \downarrow \]
  • VM:隔離最強、啟動最慢、密度最低。
  • 容器:速度密度俱佳、隔離靠 kernel(共用核心是攻擊面)。
  • Firecracker:用 KVM 硬體虛擬化換回隔離,靠「極簡」保住速度。
  • Wasm:用「驗證型沙箱 + 語言級隔離」同時逼近三者上限——啟動 ms 級、密度千級、無共用 kernel 攻擊面。

線索 8:1962 年至今虛擬化六十年總結#

\[ \text{CP-40 (1962)} \to \text{VM/370 (1972)} \to \text{Popek \& Goldberg (1974)} \to \text{VMware (1998)} \to \text{Xen/KVM (2003/2006)} \to \text{Docker (2013)} \to \text{K8s (2014)} \to \text{Firecracker (2018)} \to \text{Wasm 雲端 (2020s)} \]

一條主線貫穿六十年:不斷把「機器」的抽象縮小——從整台大型機,到硬體、到 OS、到行程、到函式、到元件。每一次縮小,隔離單位更細、啟動更快、密度更高。

結案 -- 後果與影響#

  • 雲端原生成為產業標準:CNCF 旗下超過百個專案,Kubernetes 是事實上的「資料中心作業系統」。
  • Serverless 與 Wasm 合流:冷啟動問題被 microVM 快照與 Wasm 實例解決,FaaS 延遲進入個位數 ms 時代。
  • 虛擬化光譜多元化:VM、容器、microVM、Wasm 各據一隅,依「隔離 vs 速度 vs 密度」權衡選型。
  • 六十年長案的精神遺產:抽象與隔離是計算機科學最強的兩種槓桿,虛擬化史就是不斷重組這兩者的歷史。

關鍵人物與文獻#

  • Solomon Hykes:Docker;Joe Beda、Brendan Burns、Craig McLuckie:Kubernetes。
  • Alexandra (Sasha) Fedorova / Firecracker 團隊(AWS):microVM。
  • 文獻:Popek & Goldberg, Formal Requirements for Virtualizable Third Generation Architectures (1974);CNCF 雲端原生定義;Firecracker 官方文件(2018);W3C WebAssembly Component Model。