穩健的無服務器架構是什麼樣的?

如果設計不當,一切都會有怪癖

穩健的無服務器架構是什麼樣的?

Image by Aphinya Dechalert. co-written with David Wesley

無服務器是業界最新的流行語之一-但是,就像技術上的任何事物一樣,如果設置不正確,您的開發投資可能像紙牌屋一樣崩潰。

現在,所有主要的雲播放器都提供某種無服務器架構支持-帶有Lambda的AWS,帶有云功能的Google和帶有Azure功能的Microsoft。 還設計和創建了開源的免費Serverless框架,以幫助開發人員自動化其流程並創建更好的無服務器代碼。

無服務器背後的理由是,它是事件驅動的,具有自動擴展的能力,而無需基礎架構的設置或干預。 但是,人們經常問的一個問題是:健壯的無服務器架構是什麼樣的?

整合,隔離和事件驅動

很容易陷入為任何可能的事情編寫函數的陷阱。 對於無服務器,很容易啟動執行工作的功能。 可以通過自動計時作業激活該作業,可以通過網關,數據更改和代碼管道活動來觸發該作業。

儘管這對於孤立的案例來說聽起來很棒,但是在無服務器環境中的大型應用程序要求架構師將整個預期事件和設計功能視為一個模塊化網絡。

在某種程度上,以無服務器方式構建應用程序是一種解構的軟件開發方法。 它可以部分啟動而無需依賴,並提供快速的問題解決方案。

健壯的無服務器架構強制執行一定的代碼壓縮和模塊化,以最大程度地減少相互依賴性。 它的無狀態性使功能彼此斷開,並且持久性數據源成為真實性的唯一空間。

如果發生故障,鏈接功能會導致串行多米諾骨牌效應。 對功能之間的關係採用並行方法可減輕這種風險。

看下面的圖,例如:

穩健的無服務器架構是什麼樣的?

Serial serverless approach


上面的流程是默認的,我們中的一些人在創建無服務器代碼時可能會陷入其中。 這是因為在傳統的依賴注入模型中,一個函數觸發另一個函數很容易想到。 如果要求合理,我們可以遞歸進行。 但是,當將其應用於無服務器應用程序時,流程中斷最終會導致沒有應急計劃的結果中斷。

這是因為串行方法不能滿足每個功能真正獨立的需要。 上述方法的觸發器是調用另一個的無服務器功能,這意味著它有可能沿管道傳遞數據而無需驗證或進行適當的狀態管理。

看下圖。 它具有相同的三個無服務器功能,但它們通過有狀態觸發器相互連接。

穩健的無服務器架構是什麼樣的?

Parallel Serverless approach

這種方法可能看起來更復雜,但是如果您查看潛在的斷點在哪裡,它們是基於觸發器而不是函數。

實施遞歸時,觸發器基於持久性內容,而不是可能會丟失輸出的臨時空間。

該體系結構還允許運行多個代碼。 無服務器及其相關的無表數據存儲很便宜。 在某種程度上,這是因為它的初始設計是為了大量使用。

雖然第一個圖一次運行一個功能以觸發另一個功能,因此似乎使用了較少的計算能力,但第二個圖允許兩個功能以隔離的方式運行,但仍通過數據觸發器保持連接。


對於健壯的無服務器架構,代碼的結構取決於開發人員為更大的視圖創建隔離的解決方案的能力。 該代碼本質上通常是功能性的,因為可重用性取決於其處理數據的能力而無需基於類的藍圖。

針對大型軟件的健壯的無服務器架構會考慮潛在的中斷和可能丟失數據的位置。 通過圍繞永久性集中觸發器,它解決了此問題,並降低了由於無服務器的短暫性而導致的風險。

功能並行是可用於健壯的無服務器體系結構的體系結構方法之一。 關於觸發器,實現永久性是數據保護和驗證的一種好習慣。 這也是處理無服務器預期的無狀態性的一種方法。


(本文翻譯自Aphinya Dechalert的文章《What Does a Robust Serverless Architecture Look Like?》,參考:https://medium.com/better-programming/what-does-a-robust-serverless-architecture-look-like-977a64fff980)


分享到:


相關文章: