概述
通过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集群基于Gossip协议进行通信,每个broker的引入必须要有一个前置连接点
当broker第一次连接到集群,会通过初始连接点获取其他拓扑(猜测是其他broker的分布),Zeebe重启时,broker本地会维护拓扑
为确保容错性,Zeebe使用Raft协议跨机器复制数据
提交
在执行分区上新记录前,必须备份到其他分片上
分区
在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
。客户端通过gRPC
与gateway
进行交流,协议使用proto buffers v3(proto3)
gRPC的优点
- 支持双向流,支持在客户端和服务器间打开持久连接以发送和接收流信息
- 默认使用
HTTP/2
协议 - 使用协议缓冲区作为接口定义和数据序列化机制。
Exporters
当Zeebe
处理作业和工作流,或执行内部维护时,将生成有序的记录流
客户端无法直接检查该流,Zeebe
可以以exproter
的形式加载和配置用户代码(处理那些记录),
exporter
提供入口点处理流中写入的每一个记录
- 将历史数据推送到外部仓库以达到持久化的目的
- 将记录导出到可视化的工具
加载
在加载阶段会验证每个exporter的配置,以下情况broker
不会启动:
exporter
ID不是唯一exporter
指向不存在或无法访问的JAR
exporter
指向不存在或不可实例化的类exporter
实例在configure方法中抛出异常
原文连接:https://docs.zeebe.io/basics/partitions.html