EventMesh 动态事件驱动的应用程序运行时,能够用动态插件式基础服务对系统进行解耦,支持不同技术栈的混合多云、复杂分布的拓扑结构等广泛用例。以事件驱动为核心,增强事件处理能力,优化编排协调过程,并提供联邦治理机制。为企业实现数字化转型提供了应用进程间通信的全套解决方案,帮助企业降低系统复杂度,节约开发维护成本。
EventMesh v1.7.0是进入Apache孵化后更新的第6个版本,本次版本为大家带来了 14 个新增特性,其中重磅的EventMesh Workflow Engine特性来自于腾讯的朱同学(GitHub id Walter)贡献,同时强化了 28 个模块,完善和修复了 22 个可能的安全问题,在文档和代码风格方面做了 9 处改进……具体有哪些,请大家下滑了解一下,关于分布式运行时用起来有多爽 ?效果怎么样?案例有哪些?欢迎来社区讨论!
EventMesh v1.7.0版本新增的主要特性:
EventMesh Workflow Engine在本次版本与大家见面,其设计的整体架构如下图所示:
工作流引擎核心部分分为了两个模块:EventMesh Workflow与EventMesh Catalog,同时插件部分包含了:Task、Queue、Scheduler、Protocol、Store、Naming。核心部分提供了系统运行所需的最小功能集,而插件是独立的组件,包含自定义的各种业务代码,用来向核心系统增强或扩展额外的业务能力。基于这种自上而下的3层存算分离插件化架构,可以扩展出不同类型的事件存储(MQ/SQL/NO-SQL等)和不同的通信协议(grpc/http/cloudevents等)。
从上图中我们可以看到,应用服务通过AsyncAPI来描述定义服务,并通过SDK向EventMesh Catalog服务注册,Catalog服务实现服务的解析与发现;基于配置化理念,EventMesh Workflow DSL遵从CNCF Serverless Workflow Spec,解析后的DSL包含了State\Action\Function\Event\Retry模块,同时工作流的事件收发统一采用了CloudEvents标准事件协议,EventMesh实例实现交互。如下图所示,为下单-支付-运送 Workflow DSL示例:
2.任务调度完成时间不做约束,可以是几秒,几分,甚至几小时。
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-eventmesh
Gitee repo:https://gitee.com/WeBank/EventMesh
Website: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 命名空间选择器
-
功能 #1092Java 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/