CloudState:用於Knative/Kubernetes的開源無服務器框架

Lightbend最近發佈了CloudState。CloudState是首個可用於對Knative/Kubernetes堆棧進行狀態管理的開源無服務器(serverless)框架。

據Jonas Bonér所說:

CloudState是一個圍繞狀態管理通過添加概念、模型和實現來定義什麼是“serverless 2.0”(或者下一代serverless是什麼)的倡議。任何構建過雲應用程序(分佈式系統)的人都知道,狀態實際上是最難處理的,而到目前爲止,serverless或多或少會忽略狀態管理這一點。所以我們試着把它和兩件事情結合起來。首先是標準化工作,爲實現這些功能定義規範、協議和TCK。其次是參考實現,實現規範。

CloudState基本上由兩部分組成:標準化工作,定義用戶函數與後端之間的規範、協議和TCK;以及一個參考實現,它用多種語言實現了後端和一組客戶端的API庫。

CloudState是爲基於事件驅動的架構、事件源、CQRS、集羣分片、數據和處理協同定位、CRDTs以及其他常見的分佈式模式而設計的。此外,CloudState的參考實現利用了運行在kubernetes上的KnativegRPCAkka集羣GraalVM ,這不僅使應用程序能夠有效地伸縮,而且還能使應用程序在保持其全局或本地數據一致性的同時,在一定範圍內可靠地管理分佈式狀態。

讓我們看下CloudState服務是怎樣的:

(圖片來自https://github.com/cloudstateio

  • Ingress(入口)——可以是Istio、Knative、或Kubernetes中常規的ClusterIP服務通信
  • Akka Sidecar(Akka 側車)——由CloudState操作符注入;每個請求都會經過它。單個CloudState服務的sidecars形成一個集羣,使用Akka remoting彼此直接通信。
  • Code(代碼)——由開發人員實現的函數。它可以用任何支持gRPC的語言編寫。Akka sidecars使用預定義的gRPC協議與用戶函數通信。
  • Distributed Datastore (分佈式數據存儲)——當服務需要持久化狀態時使用。需要注意的是,用戶代碼並不直接與數據存儲交互,它先是與Akka sidecars交互,Akka sidecars再與數據存儲通信。

CloudState實現了自己的自動容量伸縮器,使用Knative的自動容量伸縮器進行實驗時,一旦對Akka集羣進行擴容就會帶來一些問題,其中一個問題是當添加新節點時,會重新平衡切分,並複製狀態。一次啓動太多的節點或者是隻啓動節點而不立即停止它們時,將會顯著降低吞吐量和性能。

有關CloudState的更多詳細信息可以查看GitHub repo。它還有一個示例應用程序,是用JavaJavaScript實現的簡單聊天程序。

想要貢獻力量的用戶可以訂閱郵件列表,加入Gitter頻道進行討論,或者通過Twitter進行聯繫。

原文鏈接:

CloudState, an Open Source Serverless Framework for Knative/Kubernetes

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章