EventMesh發(fā)布由騰訊貢獻(xiàn)的CNCF Serverless Workflow Engine實(shí)現(xiàn)
EventMesh 動(dòng)態(tài)事件驅(qū)動(dòng)的應(yīng)用程序運(yùn)行時(shí),能夠用動(dòng)態(tài)插件式基礎(chǔ)服務(wù)對(duì)系統(tǒng)進(jìn)行解耦,支持不同技術(shù)棧的混合多云、復(fù)雜分布的拓?fù)浣Y(jié)構(gòu)等廣泛用例。以事件驅(qū)動(dòng)為核心,增強(qiáng)事件處理能力,優(yōu)化編排協(xié)調(diào)過(guò)程,并提供聯(lián)邦治理機(jī)制。為企業(yè)實(shí)現(xiàn)數(shù)字化轉(zhuǎn)型提供了應(yīng)用進(jìn)程間通信的全套解決方案,幫助企業(yè)降低系統(tǒng)復(fù)雜度,節(jié)約開(kāi)發(fā)維護(hù)成本。
EventMesh v1.7.0是進(jìn)入Apache孵化后更新的第6個(gè)版本,本次版本為大家?guī)?lái)了 14 個(gè)新增特性,其中重磅的EventMesh Workflow Engine特性來(lái)自于騰訊的朱同學(xué)(GitHub id Walter)貢獻(xiàn),同時(shí)強(qiáng)化了 28 個(gè)模塊,完善和修復(fù)了 22 個(gè)可能的安全問(wèn)題,在文檔和代碼風(fēng)格方面做了 9 處改進(jìn)……具體有哪些,請(qǐng)大家下滑了解一下,關(guān)于分布式運(yùn)行時(shí)用起來(lái)有多爽 ?效果怎么樣?案例有哪些?歡迎來(lái)社區(qū)討論!

EventMesh架構(gòu)圖
EventMesh v1.7.0版本新增的主要特性:
支持工作流引擎與服務(wù)編排
????EventMesh Workflow Engine在本次版本與大家見(jiàn)面,其設(shè)計(jì)的整體架構(gòu)如下圖所示:

EventMesh Workflow架構(gòu)圖
????工作流引擎核心部分分為了兩個(gè)模塊:EventMesh Workflow與EventMesh Catalog,同時(shí)插件部分包含了:Task、Queue、Scheduler、Protocol、Store、Naming。核心部分提供了系統(tǒng)運(yùn)行所需的最小功能集,而插件是獨(dú)立的組件,包含自定義的各種業(yè)務(wù)代碼,用來(lái)向核心系統(tǒng)增強(qiáng)或擴(kuò)展額外的業(yè)務(wù)能力?;谶@種自上而下的3層存算分離插件化架構(gòu),可以擴(kuò)展出不同類型的事件存儲(chǔ)(MQ/SQL/NO-SQL等)和不同的通信協(xié)議(grpc/http/cloudevents等)。

EventMesh?Workflow交互圖
????從上圖中我們可以看到,應(yīng)用服務(wù)通過(guò)AsyncAPI來(lái)描述定義服務(wù),并通過(guò)SDK向EventMesh Catalog服務(wù)注冊(cè),Catalog服務(wù)實(shí)現(xiàn)服務(wù)的解析與發(fā)現(xiàn);基于配置化理念,EventMesh Workflow DSL遵從CNCF Serverless Workflow Spec,解析后的DSL包含了State\Action\Function\Event\Retry模塊,同時(shí)工作流的事件收發(fā)統(tǒng)一采用了CloudEvents標(biāo)準(zhǔn)事件協(xié)議,EventMesh實(shí)例實(shí)現(xiàn)交互。如下圖所示,為下單-支付-運(yùn)送 Workflow DSL示例:

Workflow?DSL 示例圖
EventMesh Workflow運(yùn)行時(shí)特性:? 持久化1. 工作流任務(wù)是持久化存儲(chǔ),
2.任務(wù)調(diào)度完成時(shí)間不做約束,可以是幾秒,幾分,甚至幾小時(shí)。
? 可靠性1. 任務(wù)執(zhí)行是可靠的,在失敗后是完全可自愈的。
2. 任務(wù)狀態(tài)機(jī)保障工作流執(zhí)行的狀態(tài)在面對(duì)故障和中斷時(shí)保持不變,并從最新?tīng)顟B(tài)恢復(fù)執(zhí)行。
? 可擴(kuò)展性
Task,Workflow-Engine,Scheduler組件可以集群模式部署,快速水平擴(kuò)展,提升系統(tǒng)整體吞吐。??可觀測(cè)性1. Workflow執(zhí)行過(guò)程溯源,包括過(guò)程耗時(shí),執(zhí)行鏈路
2. 關(guān)鍵指標(biāo),日志上報(bào),基于OpenTelemetry標(biāo)準(zhǔn)
多元化事件存儲(chǔ)與注冊(cè)中心的支持
????除了上面的工作流引擎特性以外,本次版本還擴(kuò)展了不同的事件存儲(chǔ)插件(RabbitMQ\Pulsar\Knative\Redis\Pravega等),用戶可以根據(jù)自己的業(yè)務(wù)場(chǎng)景來(lái)選擇不同的存儲(chǔ)插件。并支持集成zookeeper作為注冊(cè)中心,同時(shí)擴(kuò)展了pinpoint作為EventMesh trace的插件。
多語(yǔ)言客戶端的擴(kuò)充
????本次版本客戶端部分新增了Rust SDK,同時(shí)在現(xiàn)有JavaSDK基礎(chǔ)上支持對(duì)接EventMesh Workflow與Catalog服務(wù)的功能,并配備了相應(yīng)的demo示例,方便用戶體驗(yàn)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 作為事件存儲(chǔ)
功能 #973?支持zookeeper注冊(cè)中心
特性 #815?支持 Rust SDK
功能 #790?支持 Knative 作為 Eventing Infra
功能 #389?支持 Redis事件存儲(chǔ)
功能 #270?支持Pravega事件存儲(chǔ)
增強(qiáng)
增強(qiáng) #2167?依賴默認(rèn)編碼
增強(qiáng) #2169?方法檢查集合的大小是否為零,而不是使用 isEmpty()[WebhookTopicConfig]
增強(qiáng) #2147?添加工作流運(yùn)行腳本
增強(qiáng) #2069?支持 Go SDK Http EventMesh 消息協(xié)議
增強(qiáng) #2062?由于被調(diào)用方法[SubScribeTask]的返回值,可能取消引用空指針
增強(qiáng) #2056?使用 try-with-resources 管理資源[RejectClientByIpPortHandler]
增強(qiáng) #2017?支持 Go SDK http 協(xié)議 RR 命令
增強(qiáng) #2016?由于被調(diào)用方法[http SubController]的返回值,可能取消引用空指針
增強(qiáng)?#2008?支持 GO SDK Http 協(xié)議取消訂閱
增強(qiáng) #2004?添加工作流創(chuàng)建命令
增強(qiáng) #2002?解決項(xiàng)目編譯錯(cuò)誤
增強(qiáng) #1999?完善 rabbitmq 連接器單元測(cè)試
增強(qiáng) #1993?依賴默認(rèn)編碼[WebhookFileListener]
增強(qiáng) #1983?提取 GO SDK 協(xié)議常量
增強(qiáng) #1934?升級(jí)工作流 go.mod
增強(qiáng)#1933?優(yōu)化工作流-dal 邏輯
增強(qiáng) #1932?優(yōu)化工作流任務(wù)邏輯
增強(qiáng)#1931?優(yōu)化工作流-jq 邏輯
增強(qiáng) #1929?優(yōu)化工作流目錄邏輯
增強(qiáng) #1928?升級(jí)工作流原型
增強(qiáng) #1927?添加工作流示例演示
增強(qiáng) #1822?支持 Go SDK producer 消息隨機(jī)序列
增強(qiáng) #1743?支持 Go SDK HTTP 客戶端負(fù)載平衡
增強(qiáng) #1682 Java SDK 添加 http 連接池
增強(qiáng) #1670?添加工作流 mysql 架構(gòu)文件
增強(qiáng) #1648?修改工作流調(diào)度程序配置
增強(qiáng) #1636?提高 connector-pulsar 中發(fā)布事件的性能
增強(qiáng) #1628 SSLContextFactory 一些配置應(yīng)該在EventMeshHTTPConfiguration 中配置
漏洞防范和修復(fù)
錯(cuò)誤 #2163?此方法不必要地使用字符串文字作為字符集編碼[SendSyncMessageProcessor]
錯(cuò)誤 #2148 Webhook 測(cè)試發(fā)生在 NPE 上
錯(cuò)誤 #1818?修復(fù) SSLContextFactory 中的 IOException
錯(cuò)誤 #1656 CloudEvent 的擴(kuò)展字段不存在。
錯(cuò)誤 #1654?當(dāng) broadcastEventListener 消費(fèi)消息時(shí)發(fā)生 NullPointerException
錯(cuò)誤 #1627 ConsumerGroup 訂閱了多個(gè)主題,只有第一個(gè)主題可以調(diào)用 url
錯(cuò)誤 #1367?無(wú)法找到 webhook 協(xié)議適配器
錯(cuò)誤 #1350?修復(fù) WebHookProcessorTest 測(cè)試錯(cuò)誤
錯(cuò)誤 #1347?取消訂閱時(shí) Pravega 連接器編寫器不會(huì)關(guān)閉
錯(cuò)誤 #1279 gradle.properties 在 eventmesh-connector-pulsar 下不正確
錯(cuò)誤 #1238?無(wú)法啟動(dòng)脈沖星連接器
錯(cuò)誤 #1208?使用 zipkin hippen NullPointerException
錯(cuò)誤 #1021?當(dāng) eventMeshServerTraceEnable 為 false 時(shí) Span 為 null
錯(cuò)誤 #1022 Tcp 協(xié)議解析器的兩個(gè) NPE 問(wèn)題
錯(cuò)誤 #1035 Tcp UpStreamMsgContext 重試無(wú)限循環(huán)
錯(cuò)誤 #1036?由 tcp closeSession 的邏輯順序引起的錯(cuò)誤
錯(cuò)誤 #1038 validate target url 方法的結(jié)果在 http 協(xié)議中是相反的
錯(cuò)誤 #1052?只有同一消費(fèi)者組的第一個(gè)實(shí)例才能接收到 http 協(xié)議中的消息
錯(cuò)誤 #1056?修復(fù) StringIndexOutOfBoundsException
錯(cuò)誤 #1059 Http 請(qǐng)求的 NullPointException
錯(cuò)誤 #1064 ClientManageControllerTest 的 NullPointException
錯(cuò)誤 #1074?修復(fù) PrometheusConfigurationTest 運(yùn)行測(cè)試失敗
文檔和代碼風(fēng)格改進(jìn)
文檔 #2074?更新 Pravega 連接器文檔
文檔 #2066?優(yōu)化 http-demo zh 文檔
文檔 #1520?更新 eventmesh 關(guān)鍵字。
文檔 #1500?修復(fù)自述文件。
文檔 #1496 03-demo.md 中的錯(cuò)誤詞
文檔 #1368 Knative 連接器:將文檔移動(dòng)到設(shè)計(jì)目錄
文檔 #1271?文檔翻譯[webhook.md]
文檔 #1246 Pravega 連接器文檔
文檔 #1213?支持 Knative 作為 Eventing Infra:文檔(發(fā)布/訂閱)
Learn more:https://eventmesh.incubator.apache.org/