Serverless 底座的持續創新

亞馬遜雲開發者發表於2022-03-01

文章作者:亞馬遜雲科技 資深開發者佈道師 黃帥

引言

自 2014 年以來,亞馬遜雲科技一直透過 Lambda 服務向使用者提供 Serverless 的能力。使用 Lambda,使用者不必擔心管理伺服器或調整容量,以應對不斷變化的市場需求,而且上述需求均由亞馬遜雲科技自動進行配置,使用者只需為他們使用的資源付費。

Datadog 的 2021 年 Serverless 狀態報告表明,開發者正在加速採用 Serverless 架構,以應對新的、更高階的業務挑戰。我們很高興看到,越來越多的組織受益於採用 Lambda 等 Serverless 技術所帶來的敏捷性、彈性和成本效率,支援這個不斷髮展多元化的開發者社群。-- Ajay Nair,亞馬遜雲科技 Lambda 服務體驗 總經理

這個強大的 Serverless 服務背後隱含了許多底座持續創新的內幕。今天我們就來談一談亞馬遜雲科技的 Serverless 底座的持續創新。

底座創新

Serverless 是一種雲端計算領域的架構,使用者不在需要購買或者管理固定數量的伺服器,而是由雲根據使用者的業務特徵,動態管理伺服器資源,並提供彈性排程、自動擴縮容,故障自愈等能力,使用者無需為伺服器計費,而是為真正消耗的資源付費。

廣義的 Serverless,通常有 FaaS(函式即服務)和 BaaS(後端即服務)組成,使用者無需關心基礎架構的管理和維護,只需要關心業務程式碼,即可在 FaaS 環境中執行自己的服務端業務邏輯,並可以使用雲提供的多種 BaaS 服務,而且無須關心運維和伺服器的擴縮容。

image.png

因此,除去 BaaS 的多樣性,整個 Serverless 的底座,本質上取決於 Serverless 計算服務(FaaS)的效能與安全。也就是說,我們在這裡探討的 Serverless 底座創新,針對的就是 Lambda 服務。同時,我們也可以想一想 FaaS 的效能與安全,取決於哪些方面,簡單來講,FaaS 的效能與安全嚴重依賴於底座晶片和虛擬化的能力。所以,我們今天要探討的 Serverless 底座持續創新,主要關注在 FaaS 的晶片與虛擬化上。

FaaS 的晶片創新

Graviton 是亞馬遜雲科技於 2018 年釋出的基於 ARM 架構的一款伺服器處理器,面向 EC2 虛擬機器例項的使用者。第一代 Graviton 處理器採用定製晶片和 64 位 Neoverse 核心,EC2 A1 例項支援基於 ARM 的應用程式,例如 Web 伺服器、快取佇列、分散式大資料處理和容器化微服務。使用開放式 ARM 架構,意味著透過不從頭開始建立新晶片來節省成本,相反,採用了現有的 ARM 架構,針對 EC2 例項的工作方式對其進行了定製,希望為使用者在 EC2 例項選擇方面提供更多選擇,為基於 ARM 的應用程式提供高可用性和安全性,同時降低虛擬化成本,為使用者提供良好的伺服器效能和更低的價格。

與第一代 Graviton 處理器相比,Graviton2 處理器在效能和功能上實現了重大飛躍。基於 Graviton2 的例項為 EC2 例項中的工作負載提供最佳價效比。基於 Graviton2 的例項支援廣泛的通用、突發、計算最佳化、記憶體最佳化、儲存最佳化和加速計算工作負載,包括應用伺服器、微服務、高效能運算、機器學習推理、影片編碼、EDA、遊戲、資料庫和記憶體快取。許多 Serverless 服務,包括 Lambda 和 Fargate 等,也支援基於 Graviton2 的例項,以提供具有價效比優勢的完全託管體驗,提高了效能並節省了成本。

Graviton3 處理器是 Graviton 處理器系列中的最新款。與 Graviton2 處理器相比,計算效能提高了 25%,浮點效能提高了 2 倍,加密工作負載效能提高了 2 倍。與用於 ML 工作負載的 Graviton2 處理器相比,Graviton3 處理器的效能提高了 3 倍,包括對 bfloat16 的支援,還支援 DDR5 記憶體,與 DDR4 相比,記憶體頻寬增加了 50%,未來也將支援 Lambda 等 Serverless 服務。

Lambda 服務目前支援基於 ARM 的 Graviton2 處理器上執行。使用此處理器架構選項可獲得高達 34% 的更高價效比。Julian Wood 的文章《Migrating AWS Lambda functions to Arm-based AWS Graviton2 processors》,重點介紹瞭如何從 x86 遷移到 ARM64,以及遷移過程中需要的注意事項。Graviton2 處理器內建的效能和安全性,旨在為計算密集型工作負載提供高達 19% 的效能提升,使用多執行緒和多處理或執行 I/O 操作的工作負載,可以體驗更短的呼叫時間以降低成本,與 x86 定價相比,以毫秒為單位計費的持續時間費用,降低了 20%。從 x86 架構到 ARM 架構的更改,不會影響 Lambda 函式呼叫的方式,與 API、服務、應用程式或工具的整合不受新架構的影響,並繼續像以前一樣工作。

許多功能可以透過配置更改無縫遷移,其他功能需要重新構建以使用 ARM64 的軟體包,我們也可以使用 Lambda PowerTuning 工具測試遷移後的 Lambda 函式效能狀況,具體可訪問這裡:

在最初構建 Lambda 服務時,我們有兩條路:

  1. 容器化,快速且資源高效,但不提供使用者之間的強隔離
  2. 在虛擬機器中執行程式碼,以計算開銷為代價提供更高的安全性。

安全性始終是 AWS 的首要任務,因此,我們最早使用傳統 VM 的方式構建了 Lambda。

使用者要求我們提供更快的擴充套件、更低的延遲和高階功能,例如預置併發。我們知道,這種功能需求無法在傳統 VM 上進行構建。

隨著使用者越來越廣泛採用 Serverless 技術,我們認識到現行的虛擬化技術無法針對呈短暫性特點的工作負載進行最佳化。我們認為需要構建特別針對 Serverless 計算的虛擬化技術,需要既能提供基於硬體虛擬化的安全性邊界,同時又能保持容器和函式的輕量與敏捷性。

因此我們構建了 Firecracker,並於 2018 年 11 月將該虛擬化平臺開源釋出。Firecracker 是一種採用基於 Linux 核心的虛擬機器 (KVM) 技術的開源虛擬機器監控程式(VMM)。Firecracker 允許建立微型虛擬機器,即 microVM。Firecracker 堅持精簡主義的設計原則,僅包含執行安全、輕量的虛擬機器所需的元件。Firecracker 依據 Apache 2.0 進行許可。請訪問 Firecracker GitHub 儲存庫以瞭解更多資訊和為 Firecracker 做貢獻。

  1. 基於硬體虛擬化的虛擬機器的安全性
  2. 容器的資源效率和快速啟動時間

2020 年 USENIX 網路系統設計和實施研討會上,我們發表了一篇論文,詳細解釋了 Firecracker 的工作原理。

image.png

其中,容器(左)使程式碼可以直接訪問作業系統的一些核心功能(“核心”),透過拒絕訪問其他功能(“沙盒”層中的 x)來增強安全性;虛擬機器(右)為工作負載提供自己的使用者核心,並使用硬體虛擬化功能隔離。

虛擬化的核心部分是虛擬機器監視器(或 VMM),用來設定虛擬化、管理記憶體和處理 I/O(如網路連線和磁碟儲存)。傳統的 VMM 幾乎與完整的作業系統一樣複雜,例如:QEMU 是一種虛擬機器監視器,通常與 Linux 核心虛擬機器 (KVM) 結合使用,擁有超過 140 萬行程式碼(以及相應的廣泛而強大的功能)。

Firecracker 比 QEMU 高效得多的原因是其精簡的 VMM,只有 50,000 行程式碼——比 QEMU 減少了 96%。這允許為每個使用者程式建立單個 microVM,這是一個簡單但強大的安全模型。此外,這 50,000 行程式碼是用 Rust 語言編寫的,2017 年秋,我們決定以 Rust 語言來編寫 Firecracker,這是一種非常先進的程式語言,可保證執行緒和記憶體安全,防止快取溢位以及可能導致安全性漏洞的許多其他型別的記憶體安全問題,並內建了一個REST 控制 API,可啟動例項、獲取或設定 VM 配置、管理快照等。單臺伺服器每秒可建立多達 150 個 Firecracker microVM,並同時執行數千個 microVM。

當然,大幅減小 VMM 的大小同樣會大幅降低其功能。Firecracker 沒有實現像 BIOS 或 PCI 匯流排這樣的傳統裝置,而是透過最佳化的virtio介面與使用者核心進行通訊。重要的是,Serverless 的工作負載不需要 USB、顯示器、揚聲器和麥克風等硬體功能,因此根本沒有必要去實現對這些功能的支援。

Firecracker 為 Lambda 服務提供支援,2020年的一個資料是,Firecracker 每月為數十萬使用者處理數萬億個請求。目前,已經釋出穩定的 1.0 版本。目前,Firecracker VM 可以在不到 125 毫秒的時間內完全啟動,而完全建立 microVM 需要不到 7 毫秒。每個 microVM 的記憶體佔用小於 5MB。

Firecracker 用於多個容器託管平臺,如appfleetFly.ioKoyeb等,可以使用容器執行時進行管理,包括透過 firecracker-containerd、Weave Kubes 和 Kata Containers 進行容器化,從而使其能夠與 Kubernetes 整合。

總結

本文分享了亞馬遜雲科技在 Serverless 底座的持續創新,我們將繼續大力投入 Serverless 計算的三個層面:應用層、虛擬化層和硬體層,為使用者提供卓越的計算能力,同時保證安全性、可擴充套件性和高效能。大力投入基礎技術的研發是持續創新的關鍵要義之一,這不僅是為了明天,更是為了下一個十年甚至更遠的將來。在此創新的過程中,我們也與社群緊密合作與共享。透過將 Firecracker 開源化,我們不僅歡迎您深入研究構建 Serverless 計算的未來基礎技術,也希望您能與我們一起強化和完善 Firecracker。更多資訊請參閱 Firecracker 問題列表Firecracker 路線圖

點選瞭解 “啟動Linux 虛擬機器”教程

學習更多教程,戳這裡

相關文章