無伺服器作業系統支援
無伺服器(serverless)是一種在雲端執行程式碼的方式:你只上傳一個小函式,平台在有需要時、也就是某件事觸發它時才執行,而你只為它實際執行的那些片刻付費。這名字有點誤導——伺服器其實還在——但你從不管理它們;請求一來,平台就變出執行環境,事後再拆掉。想像走廊裡的動作感應燈:沒人時什麼都不亮,有人經過時燈瞬間亮起、只亮所需的那段時間,然後又熄滅。
讓這件事困難、也讓它成為作業系統議題的,是冷啟動(cold start)問題。當一個函式被觸發、而當下沒有東西在執行時,平台必須從零為它建立一個隔離的環境——而且必須在數毫秒內做到,安全地把不受信任的程式碼與其他成千上萬的租戶隔離開來,然後往往幾秒後就丟棄它。普通的行程隔離太弱(你是把陌生人的程式碼跑在一起的),而一台完整的虛擬機器要每個請求都啟動又太慢太重。於是無伺服器推動了新的作業系統層級隔離技術:輕量虛擬機器與沙盒,設計成在幾毫秒內以極小的記憶體佔用開機(一個著名例子是 Firecracker,一個正為此打造的精簡超管理器),外加把環境保溫、重用或快照以躲開冷啟動之類的技巧。單核映像與函式庫作業系統在此同樣有吸引力,原因相同:要開機的東西更少。
誠實的定位是:無伺服器並沒有移除作業系統——它把作業系統的經典工作(隔離、快速啟動、資源限制、租戶間的公平排程)推到極致,並把它們對你藏起來。真正的張力在於「強隔離」與「快啟動」之間的取捨,以及對於需要保有狀態或長時間執行的工作負載的尷尬,因為每次叫用都被設計成短暫、無狀態、用過即丟。
你寫了一個把上傳照片縮圖的函式。在使用者上傳圖片之前它執行零次;之後平台在幾毫秒內開機一台微小的隔離微型虛擬機器,執行你的函式、回傳縮圖,再把環境關掉。你只為那幾百毫秒付費,而且你從未配置過任何一台伺服器。
隨選開機、迅速隔離、用完拆除——作業系統的工作被推到極限。
無伺服器不代表沒有伺服器或沒有作業系統,而是你不管理它們。冷啟動,以及在數毫秒內隔離陌生人程式碼的需求,使這成為當前最難的作業系統問題之一。