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

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