開源串流處理框架Apache Flink開發商Ververica推出了一個新的有狀態分散式應用程式框架Stateful Functions,降低建置以及調度分散式有狀態應用程式的複雜度,Stateful Functions能結合Apache Flink以及函式即服務(Function-as-a-Service,FaaS)的優點,提供事件驅動基礎架構的抽象。

Ververica提到,由於Kubernetes和FaaS的發展,無狀態運算應用程式的調度已經發展至一定的程度,但仍無法滿足有狀態的分散式應用程式需求,市面上主要的解決方案多數關注計算而非狀態,函式之間的互動障礙,影響了開發工作的簡便性,也阻礙分散式資料的一致性。

而Stateful Functions就是為了解決這些限制出現,用戶可以定義鬆耦合且獨立的函式,這些函式可以透過共享小型資源池,來維持一致性地互動。

Stateful Functions由兩部分組成,分別是Runtime以及API,其使用Apache Flink內建的Runtime,進行分散式協調、溝通和狀態管理,應用程式的狀態會儲存在串流處理引擎中,與計算資源位在同一處,可以提供快速且一致的狀態存取,並且獲得Apache Flink分散式快照模型的支援,提供強健的狀態永久性和容錯性。

Stateful Functions API則封裝了商業邏輯小片段功能,這些函式以虛擬實例的形式存在,在應用程式中通常是指每個使用者或是存貨物件等實體,其分散在每個儲存分片中,因此應用程式可以簡單地橫向擴展。每個函式在本地端都具有永久使用者定義的狀態,並且能夠任意的向其他函示發送訊息。

Ververica特別解釋,Stateful Functions框架並不是用來取代FaaS或是其他無伺服器服務的,而是要提供一種同時具有無伺服器服務的特性,但又適用於解決狀態中心問題的解決方案。像是由事件驅動的應用程式,因為需要操作狀態機(State Machine)並且紀錄背景資訊,因此很適合使用狀態中心範式開發。

Stateful Functions透過使用Apache Flink的串流處理,擴展其狀態管理以及容錯模型,來達到簡化狀態邏輯,並擴展不同狀態和事件之間互動的規模,而由於這個模型的狀態與運算位在同一處,因此應用程式要取得狀態的時候,不需要存取外部儲存系統,或是使用專用狀態管理模式來維持狀態一致性。Stateful Functions的儲存分為兩層,一個是短暫狀態/計算層Apache Flink,另一個則為簡單地永久性Blob儲存層,而永久儲存可讓每個函式實例,獨立地維護並追蹤容錯狀態。

雖然Stateful Functions API獨立於Apache Flink,但是其Runtime是基於Apache Flink的DataStream API建置。Ververica表示,Stateful Functions應用程式通常是模組化,其中包含了多個函式集,只要使用單一Apache Flink應用程式就能進行多工處理,讓各函式維持一致狀態且可靠地互動,這樣的好處是讓多個小工作共用資源池,不需要事先準備應付高峰存取的資源,絕大多數的時間虛擬實例都是閒置狀態,不消耗任何資源。


Advertisement

更多 iThome相關內容