一、前言
近年來,隨著微服務(wù)、云原生和 Serverless 概念的普及以及容器化技術(shù)的發(fā)展,事件驅(qū)動(dòng)也再次成為熱點(diǎn),引起 IT 界廣泛的關(guān)注。事件驅(qū)動(dòng)架構(gòu)是一種用于設(shè)計(jì)應(yīng)用的軟件架構(gòu)和模型。對于事件驅(qū)動(dòng)系統(tǒng)而言,事件的捕獲、通信、處理和持久保留是解決方案的核心結(jié)構(gòu)。事件驅(qū)動(dòng)架構(gòu)可以最大程度減少耦合度,很好地?cái)U(kuò)展與適配不同類型的服務(wù)組件,因此是現(xiàn)代化分布式應(yīng)用架構(gòu)的理想之選。
本文會(huì)從以下幾個(gè)方面來剖析 Apache EventMesh 云原生分布式事件驅(qū)動(dòng)架構(gòu):
- 什么是 EventMesh
- 云原生生態(tài)下的事件驅(qū)動(dòng)架構(gòu)模型
- EventMesh 架構(gòu)
- EventMesh 的相關(guān)特性以及應(yīng)用場景
- 總結(jié)回顧
- 未來規(guī)劃與發(fā)展
二、什么是 EventMesh
Apache EventMesh 是?個(gè)?于解耦
應(yīng)?和后端中間件層的動(dòng)態(tài)云原?事件驅(qū)動(dòng)
架構(gòu)基礎(chǔ)設(shè)施。它?持?泛的?例,包括復(fù)雜的混合云、使?了不同技術(shù)棧的分布式架構(gòu)。
上面這張圖我們可以看到 EventMesh 所處的位置就是連接云應(yīng)用和基礎(chǔ)設(shè)施的一個(gè)中間層, Event Mesh 與 Service Mesh 具有同等的定位,而且它本身支持云原生的部署方式并且可以在 Kubernetes 上運(yùn)行。
Service Mesh 更多的是集成 RPC 的服務(wù),是同步調(diào)用的,可能存在一定的耦合度。而對于 Event Mesh 來說,更多的是集成的事件驅(qū)動(dòng)的微服務(wù),這種微服務(wù)的特性就是松耦合和異步的。
三、云原生生態(tài)下的事件驅(qū)動(dòng)架構(gòu)模型
3.1 事件編排和計(jì)算
從上面這張圖可以看出,EventMesh 可以接入的應(yīng)用有很多:分布式應(yīng)用、云原生應(yīng)用和服務(wù)、IoT 設(shè)備、數(shù)據(jù)流、云合作伙伴以及其它的云廠商。通過標(biāo)準(zhǔn)的 CloudEvents 協(xié)議接入到 EventMesh,通過這種事件驅(qū)動(dòng)的架構(gòu),可以提高應(yīng)用的彈性伸縮能力,因?yàn)樗鼈兘柚?EventMesh 實(shí)現(xiàn)了通信的解耦。
EventMesh 內(nèi)部具有 Orchestrator 的能力,可以自定義數(shù)據(jù)源觸發(fā)器以及實(shí)時(shí)處理函數(shù),對于其它接收到的事件,Orchestrator 可以路由到上面這些服務(wù),包括無服務(wù)的計(jì)算(像容器、函數(shù)、IoT 應(yīng)用)、監(jiān)控或通知類服務(wù)、數(shù)據(jù)分析類服務(wù)。
3.2 事件驅(qū)動(dòng) WebHook
舉個(gè)例子,比如我在 Github 上提了一個(gè) PR,其實(shí)都是可以配置這種 WebHook 的,其實(shí)就是類似這種旁路消息的通知機(jī)制,有任何的變動(dòng),都會(huì)推送過來。對于通知服務(wù)來講,它并不關(guān)注推送的目標(biāo)是誰,并且也不關(guān)注我產(chǎn)生的事件你是如何使用的或者被誰使用,它只關(guān)注產(chǎn)生事件就好。
那基于這樣的場景接入到 EventMesh 的話,那 EventMesh 其實(shí)具備事件路由、事件轉(zhuǎn)換、事件過濾的能力,你可以基于這樣的事件去配置相應(yīng)的規(guī)則,比如正向過濾、排除過濾。
四、EventMesh 架構(gòu)
EventMesh 本身對外提供了輕量級客戶端,標(biāo)準(zhǔn)化接口和協(xié)議。上面我們有講到 EventMesh 的定位是基于應(yīng)用與基礎(chǔ)設(shè)施的中間層。應(yīng)用通過輕量級客戶端可以接入 EventMesh,進(jìn)而實(shí)現(xiàn)與基礎(chǔ)設(shè)施強(qiáng)綁定的解耦。
上圖的左邊部分也就是我們 EventMesh 內(nèi)部的一個(gè)架構(gòu),EventMesh 對外提供了不同類型的 API,包括 Java、Go、C、Python 等。左邊最中間這部分其實(shí)是 EventMesh 的運(yùn)行時(shí)狀態(tài),它本身支持集群化 Gateway 的方式部署,同時(shí)也可以支持容器化 Sidecar 的方式部署。
EventMesh 內(nèi)部主要分成以下幾個(gè)部分:協(xié)議、可觀測性、處理器、編排以及存儲(chǔ)。不同的部分都做了插件化處理,像協(xié)議的部分支持 HTTP、TCP、gRPC、MQTT,內(nèi)部通信的話都會(huì)轉(zhuǎn)成 CloudEvents,相當(dāng)于適配器的功能。
五、EventMesh 的相關(guān)特性以及應(yīng)用場景
5.1 EventMesh 插件化設(shè)計(jì)
SPI(Service Provider Interface)機(jī)制
設(shè)計(jì)思想:
- 遵循開閉原則
- 面向標(biāo)準(zhǔn)化接口編程+策略模式+配置文件
- 將運(yùn)行時(shí)與插件解耦,便于擴(kuò)展插件,以及運(yùn)行態(tài)動(dòng)態(tài)加載插件
5.2 Data Mesh
借助 EventMesh 可以將事件源與事件目標(biāo)進(jìn)行打通,比如左邊的 RDMS 關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)發(fā)生了更新,EventMesh 將以通知的形式通知到事件目標(biāo)比如 MQ,這樣就可以跨消息中間件、跨存儲(chǔ)的一個(gè)同步。這里其實(shí)借助 EventMesh brige 的能力,看起來只是像跨組件,但實(shí)際上兩邊的 EventMesh 可能不是一個(gè)集群的,它其實(shí)可以跨網(wǎng)絡(luò),往大的說還可以跨企業(yè)之間的聯(lián)通,以及公有云與私有云的數(shù)據(jù)交換。
場景一:跨網(wǎng)絡(luò)區(qū)域流量復(fù)制
場景二:跨事件存儲(chǔ)數(shù)據(jù)傳輸
5.3 EventMesh Workflow
場景:電商場景
EventMesh 在整個(gè)事件驅(qū)動(dòng)的這套系統(tǒng)中,起到的是事件編排的能力,EventMesh 會(huì)有無服務(wù)計(jì)算的工作流引擎,同時(shí)配合 AsyncAPI,AsyncAPI 可以定義這些服務(wù)節(jié)點(diǎn)的描述,Workflow 的工作引擎是符合 Serverless Workflow 規(guī)范標(biāo)準(zhǔn)的,通過這種方式可以完成一套工作流的定制與運(yùn)作。
- Online Store App Service DSL
- Order Service DSL
- Other Service DSLs …
5.4 EventMesh Workflow Engine
EventMesh Workflow Engine 主要分為三大塊:EventMesh Catalog、EventMesh Workflow Engine、EventMesh Runtime。
對于 EventMesh Catalog 而言,其實(shí)就是對哪些服務(wù)定義了,定義了之后,通過 Catalog 內(nèi)部的 AsyncAPI 解析器,解析出來 Publisher Module、Channel Module、Subscriber Module,這些節(jié)點(diǎn)在下面的工作流 DSL 定義,EventMesh Workflow Engine 解析到 Workflow 節(jié)點(diǎn)后,會(huì)跟 EventMesh Catalog 有個(gè)交互,會(huì)查詢服務(wù)有哪些 Publisher 以及 Subscriber,Engine 這邊觸發(fā)了事件后,會(huì)發(fā)給 EventMesh Runtime,最后才會(huì)推給下游的應(yīng)用,整個(gè)一套 EventMesh Workflow Engine 是可以實(shí)現(xiàn)工作流的流轉(zhuǎn)。文章來源:http://www.zghlxwxcb.cn/news/detail-488009.html
六、總結(jié)回顧
- 輕松構(gòu)建松耦合、分布式事件驅(qū)動(dòng)架構(gòu)。
- 開放兼容,原生支持 CloudEvents SDK 和 API,易擴(kuò)展。
- 打破數(shù)據(jù)孤島,支持企業(yè)全聯(lián)接、數(shù)字化、多云協(xié)同。
七、未來發(fā)展與規(guī)劃
文章來源地址http://www.zghlxwxcb.cn/news/detail-488009.html
到了這里,關(guān)于深度剖析 Apache EventMesh 云原生分布式事件驅(qū)動(dòng)架構(gòu)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!