亞馬遜Firecracker: 專門針對無伺服器應用的輕量虛擬化,雲端計算下一個發展新趨勢 - acolyer

banq發表於2020-03-08

不同於Docker容器或JVM等語言VM,亞馬遜Firecracker專門致力於無伺服器應用的輕量虛擬化。Firecracker是支援AWS Lambda和AWS Fargate的虛擬機器監視器(VMM),自2018年以來已在AWS上投入生產。Firecracker是開源的,並且有許多專案使在外部環境下輕鬆工作變得容易。 之所以存在Firekube,是因為現有的替代方案(虛擬化,容器或特定於語言的vm)都無法滿足AWS環境中多租戶效率和強隔離的組合需求。

隔離方法

AWS Lambda的第一個版本是使用Linux容器構建的。同一客戶的多個函式將在單個VM中執行,而不同客戶的工作負載則在不同的VM中執行。因此,容器在提供了函式之間的隔離,而虛擬化則在帳戶之間提供了(更強)隔離。這種方法在打包效率上施加了一些限制,並且還需要基於允許進行的syscall容器型別在安全性和程式碼相容性之間進行折衷。

現代的商用伺服器最多可以包含1TB的RAM,而Lambda函式可以使用的記憶體僅為128MB。因此,伺服器上最多需要8000個函式來填充RAM(由於軟分配,實際上更多)。這也使任何解決方案對每個函式(每個隔離單元)的開銷非常敏感。

理想的隔離解決方案將具有以下屬性:

  • 高度隔離(在同一硬體上具有多種功能,可以防止特權提升,資訊洩露,祕密通道和其他風險)。
  • 能夠在一臺機器上執行數千個函式,而浪費最少
  • 接近本機效能
  • 支援任意Linux二進位制檔案和庫,而無需更改程式碼或重新編譯
  • 快速啟動和拆卸功能
  • 軟分配支援,每個功能僅消耗其需要的資源(達到其限制),而不消耗其實際有權使用的資源。

容器的問題

主機上的容器(如Docker)共享單個OS核心,這依賴於核心中內建的隔離機制來提供保護。容器依賴syscall限制其安全性這一事實表示在安全性和相容性之間進行權衡。

一個現實的容器環境可能需要訪問數百個sys呼叫,以及/proc和/sys核心介面。怎麼辦?一種用於系統呼叫的解決方案是將某些核心功能移入使用者空間,從而保留較小的表面積以確保安全。這有助於防止特權升級,但是這意味著防止隱蔽的通訊渠道仍然具有挑戰性。

語言VM的問題

特定於語言的VM(例如V8隔離)在AWS Lambda情況下不能作為啟動器,因為Lambda和Fargate需要能夠支援任意二進位制檔案。

虛擬化的問題

虛擬化在密度,開銷和啟動時間方面面臨挑戰。諸如unikernels之類的方法可以幫助解決此問題,但是再次要求AWS需要執行未修改的程式碼才能將這些問題排除在外。通用管理程式和虛擬機器監視器(VMM)也非常大,從而導致了龐大的可信計算庫(TCB)。KVM + QEMU的流行組合可執行超過100萬行程式碼,並需要多達270個唯一的系統呼叫。

Firecracker的設計

我們剛剛研究的所有現有方法都涉及到AWS不想進行的權衡。通過專門為無伺服器和容器應用程式構建Firecracker,可以簡化假設,從而開闢新的設計點。

我們真正想要的是虛擬化的隔離特性,以及輕量級的容器開銷。“ 從隔離的角度來看,最引人注目的好處是它將安全性至關重要的介面從OS邊界轉移到硬體和相對簡單的軟體所支援的邊界 ”。

因此,Firecracker的核心是一個新的VMM,它使用Linux核心的KVM基礎結構來提供最少的虛擬機器(MicroVM),支援現代Linux 主機以及Linux和OSv 。Rust大約為50kloc,即使用安全的語言,大大減少了程式碼佔用量。

Firecracker儘可能利用Linux內建的元件(例如,用於塊IO,程式排程和記憶體管理以及TUN / TAP虛擬網路介面)。通過針對容器和無伺服器工作負載,Firecracker只需要支援有限數量的模擬裝置,而數量要少於QEMU(例如,不支援USB,視訊和音訊裝置)。virtio用於網路和塊裝置。Firecracker裝置提供了足以滿足AWS需求的內建速率限制器,儘管如此仍然比Linux cgroups靈活得多。

除VMM之外,Firecracker還公開了用於配置,管理,啟動和停止MicroVM的REST API。

將Firecracker整合到AWS中

在AWS Lamba Firecracker MicroVM內部,每月為數十萬客戶提供數萬億個事件。Firecracker MicroVM的啟動時間大約為100毫秒,如果還包括API呼叫處理時間,則啟動時間為150毫秒。記憶體開銷非常低,每個MicroVM約為3MB(相比之下,Cloud Hypervisor為13MB,QEMU為131MB)。

Firecracker 當前的弱點是塊IO效能。Firecracker(和Cloud Hypervisor)限於大約13,000 IOPS(4kB時為52 MB / s),而相同的硬體能夠超過340,000讀取IOPS(4kB時為1GB / s)。

總結

除了短期的成功外,Firecracker還將成為未來在虛擬化領域進行投資和改進的動力,包括探索虛擬化技術的新領域。我們很高興看到Firecracker被容器社群所採用,並相信有很大的機會從Linux容器過渡到虛擬化,這是整個行業中容器隔離的標準。

點選標題見原文。

https://firecracker-microvm.github.io/

相關文章