Function Mesh 基于 KubeVela addon 为应用提供 Serverless 能力
什么是 Function Mesh ?
Function Mesh 是一个 Serverless 框架,专门为流处理(stream processing)应用而设计。它基于 Pulsar Functions 和 Pulsar IO Connectors 为用户的应用及复杂的流处理任务提供了强大的事件流(event-streaming)编排和处理能力。
Function Mesh 以一种更云原生的方式使用 Apache Pulsar 和现代流处理技术(stream processing technologies)来构建事件流应用,其主要组件(概念)如下:(参考 Function Mesh Concept)
- 流(Stream):流是一个可分区的、不可变的、只可追加的事件序列,代表了一系列的历史事实。例如,可以用一个流事件来模拟一个金融交易的序列,如“Jack 给 Alice 寄了 100 美元”,接着“Alice 给 Bob 寄了 50 美元”。
- 函数(Function):函数是轻量级的事件处理器,它可以从一个或多个输入流中消费事件(消息),将用户提供的处理逻辑应用于一个或多个事件(消息),并将经过逻辑处理后的结果发送至另一个流。
连接器(Connector):连接器是一个事件处理器,用于向流中输入事件或获取流中的事件。在 Function Mesh 中,有两种类型的连接器:
- Sink 连接器:将事件从流中输出到外部数据系统的处理器。
- Source 连接器:从外部数据系统导入事件到流中的处理器。
Function Mesh(也可称之为 Mesh)是一个函数(Functions)和连接器(Connectors)集合,通过流(Stream)将它们编排在一起以实现强大的流处理逻辑。
一个 Function Mesh 中的所有函数和连接器共享相同的生命周期。它们于 Function Mesh 创建时启动,并随 Function Mesh 销毁而终止。我们可以将 Function Mesh 看作一个有向无环图(DAG),也可以是一个用流连接的函数和/或连接器的循环图。
什么是 KubeVela ?
KubeVela 是一个基于 Kubernetes 的应用交付和管理平台。它实现了 Kubernetes 在应用层面的能力抽象,并提供了跨云多集群环境的应用持续交付的能力。KubeVela 以应用为核心向用户提供可编程的交付工作流程,其主要组件(概念)如下:(参考 KubeVela core-concept)
- 组件(Component): 组件定义一个应用包含的待交付制品(二进制、Docker 镜像、Helm Chart 等)或云服务。我们认为一个应用部署计划部署的是一个微服务单元,里面主要包含一个核心的用于频繁迭代的服务,以及一组服务所依赖的中间件集合(包含数据库、缓存、云服务等),一个应用中包含的组件数量应该控制在约 15 个以内。
- 运维特征(Trait): 运维特征是可以随时绑定给待部署组件的、模块化、可拔插的运维能力,比如:副本数调整(手动、自动)、数据持久化、 设置网关策略、自动设置 DNS 解析等。
- 应用策略(Policy): 应用策略负责定义指定应用交付过程中的策略,比如多集群部署的差异化配置、资源放置策略、安全组策略、防火墙规则、SLO 目标等。
- 工作流步骤(Workflow Step): 工作流由多个步骤组成,允许用户自定义应用在某个环境的交付过程。典型的工作流步骤包括人工审核、数据传递、多集群发布、通知等。
你可以通过 KubeVela 提供的 Quick Start 部署你的第一个应用。
Function Mesh 与 KubeVela
Function Mesh 目前在使用中存在以下问题:
- Function Mesh 的底层实现是 Pulsar Functions,这意味着如果用户需要使用 Function Mesh 来构建一个 Serverless 平台的话,需要先部署 Pulsar 集群,并对 Pulsar 消息中间件有一定的了解(操作和维护),这无疑增加了一些用户的学习成本
- 缺少配置项的抽象,同样会增加维护者和终端用户的学习成本
- Function Mesh 同时还需要搭配一些其他项目,比如 Cert-Manager 等
KubeVela 可以帮助 Function Mesh 解决这些问题:
- Pulsar 集群可以通过 FluxCD 插件进行部署(或者提供 Pulsar addon)
- 通过 Cert Manager addon 部署 Cert Manager 服务
- 将 Function Mesh Operator 以 addon 形式注册到 KubeVela 的 addon registry 中
- 将
FunctionMesh
、Sink
、Function
、Source
等资源添加到 Component 中,使得用户可以在自己的 OAM Applications 中便捷使用
场景案例
将 Function Mesh 作为企业内部 Serverless 平台解决方案,实施的步骤大体如下:
- 部署 KubeVela 并启用以下 addon:
- FluxCD
- Cert Manager
- Function Mesh Operator(即我们需要提供的 addon)
- 在组件中部署带有 FluxCD 插件的 Pulsar(或 Pulsar addon)
- 用 Cert Manager 插件在组件中部署 Cert Manager
- 用 Function Mesh Operator addon 在组件中部署 Function Mesh Operator
- 支持在 OAM Applications 定义中使用
Mesh
、Sink
、Function
和Source
类型的 Component,以完成特定的 Serverless 平台(应用)建设 - 在工作流中部署 Pulsar、Cert Manager 和 Function Mesh Operator addon 时,准备好基本信息(如 ConfigMap、Secrets、Ingress 等)
- 暂停部署步骤,执行一个简单的函数演示,等待用户验证
- 待用户验证后,手动恢复部署步骤
- 随后在正式环境中完成整体平台(应用)的建设(过程中会根据 Policy 完成运维特征属性的变更)
Addon
1 | . |
Function Mesh Operator addon 的目录结构如下,其中:
- template.cue 用于提供 Function Mesh Operator 的部署方案
- definitions 目录用于存放 Function Mesh 向 KubeVela 提供的资源抽象(此处为
FunctionMesh
类型的 Component)
目前对于 FunctionMesh
类型的 Component,我们提供了较为原始的参数配置:
1 | template: { |
用户可以将 Function Mesh 应用的 YAML 配置较为快速地转变为 OAM Applications 资源配置:
1 | apiVersion: core.oam.dev/v1beta1 |
这使得 Function Mesh 可以非常丝滑地融入用户已有的应用架构体系中,有助于用户轻松启用 Serverless 特性。
演示视频
未来规划
通过 KubeVela,我们弱化了 Function Mesh 的底层实现,让用户可以专注于 Function Mesh 的 Serverless 特性。同时,这种方法增强了 Function Mesh 的产品维度,方便用户单独部署使用。
当前 Function Mesh Operator addon 仍处于起步阶段,我们的演进路线如下:
- 完善 Addon 使用文档
- 增加 Trait、Policy 相关的能力,补足 Addon 的能力
- 持续抽象 Component 中的属性参数,降低用户的学习和使用成本
- 向 KubeVela 贡献 Addon(注册至 KubeVela addon registry)
- 结合具体的用户场景,深度优化 Function Mesh 的能力
更多详情,请访问:
- Function Mesh 官网
- Function Mesh Github 代码仓库
- Function Mesh Operator KubeVela Addon
- 添加 Pulsar bot,回复
mesh
,进入 SIG-Function-Mesh 群聊