EventMesh发布由腾讯贡献的CNCF Serverless Workflow Engine实现
EventMesh 动态事件驱动的应用程序运行时,能够用动态插件式基础服务对系统进行解耦,支持不同技术栈的混合多云、复杂分布的拓扑结构等广泛用例。以事件驱动为核心,增强事件处理能力,优化编排协调过程,并提供联邦治理机制。为企业实现数字化转型提供了应用进程间通信的全套解决方案,帮助企业降低系统复杂度,节约开发维护成本。
EventMesh v1.7.0是进入Apache孵化后更新的第6个版本,本次版本为大家带来了 14 个新增特性,其中重磅的EventMesh Workflow Engine特性来自于腾讯的朱同学(GitHub id Walter)贡献,同时强化了 28 个模块,完善和修复了 22 个可能的安全问题,在文档和代码风格方面做了 9 处改进……具体有哪些,请大家下滑了解一下,关于分布式运行时用起来有多爽 ?效果怎么样?案例有哪些?欢迎来社区讨论!

EventMesh架构图
EventMesh v1.7.0版本新增的主要特性:
支持工作流引擎与服务编排
EventMesh Workflow Engine在本次版本与大家见面,其设计的整体架构如下图所示:

EventMesh Workflow架构图
工作流引擎核心部分分为了两个模块:EventMesh Workflow与EventMesh Catalog,同时插件部分包含了:Task、Queue、Scheduler、Protocol、Store、Naming。核心部分提供了系统运行所需的最小功能集,而插件是独立的组件,包含自定义的各种业务代码,用来向核心系统增强或扩展额外的业务能力。基于这种自上而下的3层存算分离插件化架构,可以扩展出不同类型的事件存储(MQ/SQL/NO-SQL等)和不同的通信协议(grpc/http/cloudevents等)。

EventMesh Workflow交互图
从上图中我们可以看到,应用服务通过AsyncAPI来描述定义服务,并通过SDK向EventMesh Catalog服务注册,Catalog服务实现服务的解析与发现;基于配置化理念,EventMesh Workflow DSL遵从CNCF Serverless Workflow Spec,解析后的DSL包含了State\Action\Function\Event\Retry模块,同时工作流的事件收发统一采用了CloudEvents标准事件协议,EventMesh实例实现交互。如下图所示,为下单-支付-运送 Workflow DSL示例:

Workflow DSL 示例图
EventMesh Workflow运行时特性:• 持久化1. 工作流任务是持久化存储,
2.任务调度完成时间不做约束,可以是几秒,几分,甚至几小时。
• 可靠性1. 任务执行是可靠的,在失败后是完全可自愈的。
2. 任务状态机保障工作流执行的状态在面对故障和中断时保持不变,并从最新状态恢复执行。
• 可扩展性
Task,Workflow-Engine,Scheduler组件可以集群模式部署,快速水平扩展,提升系统整体吞吐。• 可观测性1. Workflow执行过程溯源,包括过程耗时,执行链路
2. 关键指标,日志上报,基于OpenTelemetry标准
多元化事件存储与注册中心的支持
除了上面的工作流引擎特性以外,本次版本还扩展了不同的事件存储插件(RabbitMQ\Pulsar\Knative\Redis\Pravega等),用户可以根据自己的业务场景来选择不同的存储插件。并支持集成zookeeper作为注册中心,同时扩展了pinpoint作为EventMesh trace的插件。
多语言客户端的扩充
本次版本客户端部分新增了Rust SDK,同时在现有JavaSDK基础上支持对接EventMesh Workflow与Catalog服务的功能,并配备了相应的demo示例,方便用户体验workflow功能。
GitHub repo:https://github.com/apache/incubator-eventmeshGitee repo:https://gitee.com/WeBank/EventMeshWebsite:https://eventmesh.incubator.apache.org/
Slack(indate 2023-01-06):https://join.slack.com/t/apacheeventmesh/shared_invite/zt-1kzy4mlx2-0_20N_T3pwiZ1zR_Y8Vmgg
特性
功能#155 支持 rabbitmq 连接器
特性 #1261 支持 Pinpoint 跟踪插件特性
功能 #1248 添加 EventMesh Workflow模块
功能 #1247 添加EventMesh Catalog模块
特性 #1244 Java SDK 添加了 nacos 命名空间选择器
功能 #1092 Java SDK添加了EventMesh Workflow客户端
功能 #1091 Java SDK 添加了 EventMesh Catalog客户端
功能 #1090 支持使用 AsyncAPI 管理 EventMesh 事件
功能 #1040 支持 Pulsar 连接器插件和 Pulsar 作为事件存储
功能 #973 支持zookeeper注册中心
特性 #815 支持 Rust SDK
功能 #790 支持 Knative 作为 Eventing Infra
功能 #389 支持 Redis事件存储
功能 #270 支持Pravega事件存储
增强
增强 #2167 依赖默认编码
增强 #2169 方法检查集合的大小是否为零,而不是使用 isEmpty()[WebhookTopicConfig]
增强 #2147 添加工作流运行脚本
增强 #2069 支持 Go SDK Http EventMesh 消息协议
增强 #2062 由于被调用方法[SubScribeTask]的返回值,可能取消引用空指针
增强 #2056 使用 try-with-resources 管理资源[RejectClientByIpPortHandler]
增强 #2017 支持 Go SDK http 协议 RR 命令
增强 #2016 由于被调用方法[http SubController]的返回值,可能取消引用空指针
增强 #2008 支持 GO SDK Http 协议取消订阅
增强 #2004 添加工作流创建命令
增强 #2002 解决项目编译错误
增强 #1999 完善 rabbitmq 连接器单元测试
增强 #1993 依赖默认编码[WebhookFileListener]
增强 #1983 提取 GO SDK 协议常量
增强 #1934 升级工作流 go.mod
增强#1933 优化工作流-dal 逻辑
增强 #1932 优化工作流任务逻辑
增强#1931 优化工作流-jq 逻辑
增强 #1929 优化工作流目录逻辑
增强 #1928 升级工作流原型
增强 #1927 添加工作流示例演示
增强 #1822 支持 Go SDK producer 消息随机序列
增强 #1743 支持 Go SDK HTTP 客户端负载平衡
增强 #1682 Java SDK 添加 http 连接池
增强 #1670 添加工作流 mysql 架构文件
增强 #1648 修改工作流调度程序配置
增强 #1636 提高 connector-pulsar 中发布事件的性能
增强 #1628 SSLContextFactory 一些配置应该在EventMeshHTTPConfiguration 中配置
漏洞防范和修复
错误 #2163 此方法不必要地使用字符串文字作为字符集编码[SendSyncMessageProcessor]
错误 #2148 Webhook 测试发生在 NPE 上
错误 #1818 修复 SSLContextFactory 中的 IOException
错误 #1656 CloudEvent 的扩展字段不存在。
错误 #1654 当 broadcastEventListener 消费消息时发生 NullPointerException
错误 #1627 ConsumerGroup 订阅了多个主题,只有第一个主题可以调用 url
错误 #1367 无法找到 webhook 协议适配器
错误 #1350 修复 WebHookProcessorTest 测试错误
错误 #1347 取消订阅时 Pravega 连接器编写器不会关闭
错误 #1279 gradle.properties 在 eventmesh-connector-pulsar 下不正确
错误 #1238 无法启动脉冲星连接器
错误 #1208 使用 zipkin hippen NullPointerException
错误 #1021 当 eventMeshServerTraceEnable 为 false 时 Span 为 null
错误 #1022 Tcp 协议解析器的两个 NPE 问题
错误 #1035 Tcp UpStreamMsgContext 重试无限循环
错误 #1036 由 tcp closeSession 的逻辑顺序引起的错误
错误 #1038 validate target url 方法的结果在 http 协议中是相反的
错误 #1052 只有同一消费者组的第一个实例才能接收到 http 协议中的消息
错误 #1056 修复 StringIndexOutOfBoundsException
错误 #1059 Http 请求的 NullPointException
错误 #1064 ClientManageControllerTest 的 NullPointException
错误 #1074 修复 PrometheusConfigurationTest 运行测试失败
文档和代码风格改进
文档 #2074 更新 Pravega 连接器文档
文档 #2066 优化 http-demo zh 文档
文档 #1520 更新 eventmesh 关键字。
文档 #1500 修复自述文件。
文档 #1496 03-demo.md 中的错误词
文档 #1368 Knative 连接器:将文档移动到设计目录
文档 #1271 文档翻译[webhook.md]
文档 #1246 Pravega 连接器文档
文档 #1213 支持 Knative 作为 Eventing Infra:文档(发布/订阅)
Learn more:https://eventmesh.incubator.apache.org/