原文連結
程式碼:快速使用kappa
首先的首先,可以先去了解一下lambda架構
Abstract
在本文中提出了Kappa,一個簡化無伺服器開發的框架。它使用檢查點來處理lambda函式超時,並提供併發機制,實現平行計算和協調
1 Introduction
無伺服器計算是一種新的雲範例,在這種範例中,租戶不是配置虛擬機器(VM),而是向平臺註冊事件處理程式(例如 Python 函式)。當事件發生時,平臺會在 lambda 函式(一種短暫的無狀態執行環境)上呼叫處理程式。lambda 函式在終止前可以執行一段有界的時間(例如在 AWS 上為 15 分鐘)
存在兩個主要挑戰:(1)程式設計師必須手動劃分計算以適應 lambda 函式的時間限制;(2)程式設計師沒有可用的併發或同步原語(如執行緒、鎖、訊號量等),因此必須要麼實現這樣的原語,要麼限制自己使用無共享並行性,要麼避免使用為簡化開發而開發的並行 lambda 函式
2 Background and Motivation
2.1 Comparison to Existing Framework
2.2 Lambda Function Time Limit
無伺服器計算中的Lambda函式存在時間限制的原因主要是為了最佳化運營商的任務分配和資源管理,運營商不再需要預測任務的完成時間或進行復雜的遷移操作,能夠更靈活地進行任務分配和資源利用
3 Kappa Design
Kappa 有三個組成部分:(1)一個協調器,負責啟動和恢復任務以及實現 Kappa 的併發原語;(2)一個編譯器,負責生成檢查點所需的程式碼;(3)一個庫,供任務用於檢查點、併發處理和同步
3.1 Coordinator
Kappa 協調器負責在 lambda 函式上安排任務、實現同步和跨任務通訊、跟蹤任務後設資料(包括檢查點)以及提供容錯功能,協調器本身透過跨備份儲存(例如,Redis 叢集)複製其狀態來支援容錯,透過管理遠端過程呼叫 (RPC) 來實現這一點,其中包括生成新任務、檢查點、訊息排隊和檢索任務結果等操作。
3.2 Checkpointing
Kappa使用檢查點來容忍lambda函式超時並防止RPC重複,在任務執行的某些關鍵點建立“檢查點”,將任務當前的執行狀態(包括變數、控制流等)記錄下來。使用了一種稱為“continuations(延續)”的技術來建立檢查點,延續是一種儲存程式控制流的方式,這種方式無需依賴傳統伺服器持久化狀態,而是透過序列化將任務的狀態資料儲存到外部儲存(如Redis或S3)中,提供同步和非同步兩種檢查點模式。同步檢查點在儲存狀態時會短暫停止任務執行,而非同步檢查點則允許任務繼續執行,檢查點資料在後臺儲存,檢查點資料分佈儲存在多個節點上,並支援多工同時建立檢查點
(b) 顯示了由編譯器生成的延續函式,用來儲存檢查點後的執行流程,(c) 使用異常處理機制在暫停點恢復,確保任務可以從中斷處繼續執行
3.3 Concurrency API
兩種基本併發機制:任務啟動和任務同步
任務啟動 (spawn) 並行機制:spawn RPC 用於啟動一個新任務,以並行的方式執行某個函式呼叫(如f(args)),並返回一個Future物件,用於跟蹤任務的結果。工作機制是透過建立一個初始檢查點。當系統恢復這個檢查點時,會執行相應的函式呼叫。此時,協調器(Coordinator)會呼叫一個新的lambda函式,從該檢查點恢復並執行任務。
先進先出(FIFO)佇列機制:如果一個任務嘗試向已滿的佇列入隊或從空佇列出隊,任務將被阻塞。這個機制不僅可以用來實現任務間通訊,還可以作為鎖和訊號量,控制資源的併發訪問。
4 Implementation
編譯器是用Python編寫的,透過Python的pickle庫進行狀態序列化,每個任務由一個Go協程(goroutine)管理,任務間的同步使用Go的通道(channel)實現,透過鎖機制和Redis事務來確保狀態更新的原子性
5 Evaluation
檢查點開銷測試:透過讓Lambda函式每100ms建立一次檢查點,測量同步和非同步檢查點的延遲。同步檢查點會暫停應用處理直到檢查點資料持久化;非同步檢查點在後臺完成持久化操作,允許前臺的計算繼續
併發操作效能測試:使用多生產者多消費者FIFO佇列的任務間訊息傳遞,以評估任務通訊的延遲
端到端應用評估:測試包括五個Kappa應用場景:TPC-DS SQL查詢、字數統計(Word Count)、並行Grep(Parallel Grep)、流處理(Streaming),以及網路爬蟲(Web Crawler)
6 Limitations
Kappa編譯器尚未完全支援Python的一些特性,包括try/except、yield、async/await、巢狀函式定義和全域性變數,只能在由其編譯器轉換的程式碼中進行檢查點操作,垃圾回收機制,缺乏靜態檢查可序列化。