一文弄懂基於serverless架構的正確應用

一文弄懂基於serverless架構的正確應用

OOPSLA 2019會議傑出論文獎“serverless計算基礎”一文指出了serverless執行環境系列特性(包括熱啟動,執行環境重用等)使使用者難以構建正確的應用程式,以及serverless函式如何能夠安全忽略這些特性。

以下是構建serverless應用的一些注意事項:

第一個注意事項是容易誤解serverless環境的狀態。serverless計算儘管在抽象層面有許多優點,但它同時也暴露了一些低階操作細節,使得程式設計師難以編寫程式碼。例如,為了減少延遲,serverless平臺嘗試重用同一個函式例項來處理多個請求,這種行為是不透明的,使用者很容易編寫一個無伺服器的函式,在重用時產生不正確的結果或洩漏機密資料。serverless函式是無狀態的,但可以在呼叫之間機會性地重用快取狀態以加快啟動時間。如果你試圖在一個serverless函式中保持持久狀態,結果可能會出乎你的意料。更可能落入陷阱的是快取某些狀態以便在函式執行過程中機會性地重用,但如果該狀態繫結到給定使用者,將無法保證下一次執行將針對同一使用者。

第二個注意事項是serverless函式之間沒有關聯的概念。serverless函式的多個例項並行執行,來自同一使用者的請求也可以由不同的serverless函式例項處理。因此,我們可能需要在serverless函式執行環境之外的共享狀態的協調機制(例如,具有事務支援的持久儲存)。另外,必須滿足給定至少一次執行語義的對冪等性的需求(因為事件可能會被重試,取決於重試策略),大多數平臺在響應單個事件時至少執行一次函式,這在函式有副作用時可能導致問題。如果您的函式不是自然的等冪函式,則可能需要使用一些策略,例如記住以前看到的事件id等方法。