概述

通过zeebe Engine 能够实现的事情

1.基于BPMN2.0定义图表工作流

2.选择支持gRPC的语言实现worker

3.构建响应apache 卡法卡和其他消息传递平台的工作流

4.用SaaS(Software-as-a-Service)产品或通过Docker和Kubernetes部署
5.水平扩展解决高吞吐量

6.使工作流具有容错和高可用的能力

7.导出工作流数据用于监控和分析

8.活跃的社区
总结
1.可视化的ISO标准的BPMN2.0 工作流模型
2.语言无关的客户模型,流程编排
3.消息驱动架构
4.支持devops
5.水平伸缩
6.容错与高可用
7.超时监控
8.很多人维护,不担心技术过时

概念

架构

Zeebe的架构中有四个非常重要的组件:client、gateway、broker、和exporter
在这里插入图片描述
client:向Zeebe发送命令

  • 部署工作流
  • 执行业务逻辑
    • 启动工作流实例
    • 发布消息
    • 激活jobs
    • 完成jobs
    • 取消jobs
  • 处理运营问题
    • 更新工作流实例
    • 解决事件

客户端应用与Zeebe解耦,可自由伸缩;而且Zeebe的brokers不执行任何业务逻辑,只负责发布服务

客户端通过gRPC(HTTP/2)连接到Zeebe的网关

总结
客户端嵌套在应用中,用于和Zeebe集群连接;它的主要任务包括分发业务逻辑、处理操作issues

gateway:gateway使Zeebe 集群的单一入口,负责将请求转发到brokers;gateway是无状态和session无关的,主要用于负载均衡和高可用

broker:Zeebe broker是分布式工作流引擎,维持激活的工作流实例状态;broker可以为水平扩展而分区和为容错而集群;broker的中不执行任何业务逻辑

broker的职责

  • 发送流程命令到client
  • 存储和管理工作流实例的状态
  • 分派任务给job worker

exporter:对Zeebe中的状态改变以事件流的方式通知

作用:

  • 监控工作流的当前状态
  • 分析历史数据
  • 跟踪Zeebe创建的事件

集群

Zeebe通过broker集群构建一个对等网络,消除单点故障

Zeebe Cluster

Zeebe集群基于Gossip协议进行通信,每个broker的引入必须要有一个前置连接点

当broker第一次连接到集群,会通过初始连接点获取其他拓扑(猜测是其他broker的分布),Zeebe重启时,broker本地会维护拓扑

为确保容错性,Zeebe使用Raft协议跨机器复制数据
raft protocol

提交

在执行分区上新记录前,必须备份到其他分片上
commit

分区

在Zeebe中,所有数据存储在分区上,而分区分布在节点间,也可以看作分片;Zeebe集群启动时,可以配置分区数量

当在分区上创建工作流实例时,工作流实例的状态由同一分区存储和管理,直到工作流执行终止。工作流实例由哪个分区创建由多个因素共同决定

  • 当客户端发送命令CreateWorkflowInstance 或者 CreateWorkflowInstanceWithResult,gateway会以轮询的方式选择一个分区创建工作流实例;
  • 当客户端发布消息触发消息启动事件,消息将发往消息相关键有关的分区;工作流实例在消息发布的同一分区上创建;
  • 由计时器创建的工作流实例通常在分区1

分区数据层
在这里插入图片描述

建议

  • 对于测试和早期开发,从单个分区开始;单个分区已经可以处理高事件负载
  • 对于一个Zeebe broker,一个分区足够。如果节点有多个核心,并且配置broker使用,增加分区数量可以提高吞吐量
  • 根据数据做出决定,模拟预期的工作负载,测量比较不同分区设置的性能

内部处理

Zeebe实现为流处理的收集,使用流处理模型是因为它提供一种统一的方法

  • 命令协议
  • 记录导出
  • 工作流评估

记录导出解决历史问题–流提供了工作流引擎所需要生成的详尽的审核日志

状态机

Zeebe 管理jobs、workflows等有状态的实体。这些实现了状态机模式的实体被流处理器管理。
在这里插入图片描述

状态的转换是有方向的,不能从create状态到completed状态

处理背压

broker接收客户端的请求时,先将请求写入事件流,然后通过流处理器处理;如果客户端发送的请求数量庞大而流处理器处理的速度跟不上,那么Zeebe会拒绝接收请求

工作流生命周期

在Zeebe中,工作流的执行由内部的事件类型WorkFlowInstance表示,事件会被写入日志流并且被exporter监察。

每个事件都是工作流实例生命周期中的一个步骤,一个工作流实例的所有事件都具有相同的WorkFlowInstanceKey。

属于同一元素实例的事件具有相同的key,根据元素类型,元素实例具有不同的生命周期

流程/活动/gateway的生命周期

事件生命周期

序列流生命周期

在这里插入图片描述

协议

Zeebe客户端通过无状态协议连接到broker。客户端通过gRPCgateway进行交流,协议使用proto buffers v3(proto3)

gRPC的优点

  • 支持双向流,支持在客户端和服务器间打开持久连接以发送和接收流信息
  • 默认使用HTTP/2协议
  • 使用协议缓冲区作为接口定义和数据序列化机制。

Exporters

Zeebe处理作业和工作流,或执行内部维护时,将生成有序的记录流

在这里插入图片描述

客户端无法直接检查该流,Zeebe可以以exproter的形式加载和配置用户代码(处理那些记录),

exporter提供入口点处理流中写入的每一个记录

  • 将历史数据推送到外部仓库以达到持久化的目的
  • 将记录导出到可视化的工具

加载

在加载阶段会验证每个exporter的配置,以下情况broker不会启动:

  • exporterID不是唯一
  • exporter指向不存在或无法访问的JAR
  • exporter指向不存在或不可实例化的类
  • exporter实例在configure方法中抛出异常

原文连接:https://docs.zeebe.io/basics/partitions.html

Logo

开源、云原生的融合云平台

更多推荐