可靠的企业战略,数字化转型,智能化转型和企业架构智库

【应用架构】高可扩展性工作流引擎Zeebe已准备就绪

Zeebe是Camunda的工作流引擎,旨在满足在云原生软件架构上运行的高性能应用程序的可扩展性要求,并支持跨低延迟,高吞吐量场景中跨多个微服务的工作流。 Zeebe可以通过支持消息事件在事件驱动架构(EDA)中运行。 Zeebe的新版本0.20.0刚刚作为免费社区版本发布,并被认为是生产就绪。

根据Camunda产品经理Michael Winters的说法,生产就绪意味着新版本可以可靠地处理编排用例。将发布标记为生产就绪的要求包括:

  1. 通过BPMN元素支持业务逻辑,用于大多数微服务编排用例
  2. 可以在Kubernetes集群上水平扩展
  3. 是容错的;如果节点发生故障,则不会丢失任何数据,并且会在发生此类故障时进行恢复
  4. 适用于Docker,Kubernetes和Apache Kafka等云原生组件
  5. 提供用于监控,故障排除和审核的工作流数据

传统上,工作流引擎将工作流实例的当前状态存储在数据库中。 Zeebe使用事件源并将所有状态更改作为不可变事件存储在仅附加事件日志中使用RocksDB将工作流的当前状态的投影存储为快照。日志和快照都存储在磁盘上,这是目前唯一的选择。讨论了其他选项,但目前没有一个在路线图上。

为了实现所需的容错性,弹性和水平可伸缩性,Zeebe构建为没有任何中央组件或数据库的分布式系统。可以在对等集群中设置多个Zeebe代理,该集群使用Gossip协议在集群内路由数据。对于事件日志的复制,使用Raft一致性算法。要向外扩展,可以使用单独的事件日志对每个分区使用分区。

Zeebe在Java虚拟机(JVM)上作为单独的实例运行,这是一种远程引擎方法,应用程序通过网络与Zeebe进行通信。为了保持性能,使用流式传输到客户端和二进制协议(gRPC)。这种方法为Zeebe创建了一个定义的设置和环境,并提供了与应用程序代码的隔离,

Zeebe没有实现任何ACID事务协议。为了缓解这种情况并处理执行工作流中的任务时可能发生的故障,有两种选择。通过在工作完成后通知Zeebe,至少实现一次 -  Zeebe将意识到故障并再次执行任务。通过在工作完成之前通知Zeebe,最多只能实现一次 -  Zeebe不知道任何故障,任务将不会再次执行。在事件驱动的体系结构中,工作流可以订阅外部消息,Zeebe在处理这些消息时只支持一次。

由于Zeebe使用事件源,因此无法轻松处理查询以查找(例如工作流实例)存在问题。相反,使用导出和CQRS的概念。导出器可以访问事件流并创建数据投影,Operate使用此技术,这是Zeebe附带的工具,用于监视和排除工作流故障。

最近,讨论了开源和源可用许可,开源软件背后的公司限制其许可,以防止服务提供商提供托管服务。 Zeebe是根据Zeebe社区许可证发布的,这是一种类似的源可用许可证,不允许使用Zeebe的工作流服务的商业产品。 Operate工具仍处于预览状态,并附带开发人员许可证,可免费使用。也可以为这两种产品获得企业支持。

最后一个开发人员预览版本0.18.0已经完成了功能,但是Zeebe背后的团队知道将要从即将到来的生产部署中学到很多东西。为了区分生产就绪和完成,他们因此决定调用新版本0.20.0而不是1.0.0。

在两篇博客文章中,Camunda的联合创始人兼首席技术专家BerndRücker描述了Zeebe的基础知识和主要概念,以及他们如何构建高度可扩展的分布式状态机。

为了帮助理解Zeebe的主要概念并启动并运行工作流,可以使用入门教程。

原文:https://www.infoq.com/news/2019/07/workflow-engine-zeebe-ga-release

本文:

讨论:请加入知识星球或者小红圈【首席架构师圈】