在内部,Zeebe被实现为在记录流(分区、partitions)上工作的流处理器的集合。 使用流处理模型,因为它是一种统一的方法来提供:
- 命令协议(请求 - 响应),
- 记录导出(流),
- 工作流评估(异步后台任务)
也会记录导出依次解决了历史问题:流提供了工作流引擎需要生成的详尽的审计日志。
State Machines
Zeebe管理有状态实体:作业,工作流等。在内部,这些实体被实现为由流处理器管理的状态机。
状态机模式的概念很简单:状态机的实例总是处于几种逻辑状态之一。 从每个状态,一组转换定义下一个可能的状态。 过渡到新状态可能会产生输出/副作用。
让我们来看看状态机的工作情况。 简化,看起来如下:
每个椭圆形都是一个状态。 每个箭头都是一个状态转换。 请注意每个状态转换如何仅适用于特定状态。 例如,当状态为CREATED时,无法完成作业。
Events and Commands
状态机中的每个状态更改都称为事件。 Zeebe将每个事件作为记录发布在流上。
可以通过提交命令来请求状态更改。 Zeebe代理从两个来源接收命令:
- 客户端远程发送命令。 示例:部署工作流,启动工作流实例,创建和完成作业等。
- 代理本身生成命令。 示例:锁定作业以供工人独占处理等。
收到后,命令将作为记录在已寻址的流上发布。
Stateful Stream Processing
流处理器按顺序读取记录流,并根据寻址实体的生命周期解释命令。 更具体地说,流处理器重复执行以下步骤:
- 从流中获取下一个命令。
- 根据状态生命周期和实体的当前状态确定命令是否适用。
- 如果该命令适用:将其应用于状态机。 如果命令是由客户端发送的,则发送回复/响应。
- 如果该命令不适用:拒绝它。 如果它是由客户端发送的,则发送错误回复/响应。
- 发布报告实体新状态的事件。
例如,处理“创建作业”命令会生成“创建作业”事件。
Command Triggers
在一个实体中发生的状态更改可以自动触发另一个实体的命令。 示例:作业完成后,相应的工作流程实例将继续下一步。 因此,事件作业已完成会触发命令“完成活动”。
zeebe qq交流群群号:856546010