<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          事件總線 + 函數(shù)計算構(gòu)建云上最佳事件驅(qū)動架構(gòu)應(yīng)用

          共 6462字,需瀏覽 13分鐘

           ·

          2022-12-18 14:34

          關(guān)注我們,后臺回復(fù) 手冊免費獲取產(chǎn)品解決方案



          作者 | 史明偉(世如)
          距離阿里云事件總線(EventBridge)和 Serverless 函數(shù)計算(Function Compute,F(xiàn)C)宣布全面深度集成已經(jīng)過去一年。站在系統(tǒng)元數(shù)據(jù)互通,產(chǎn)品深度集成的肩膀上,這一年我們又走過了哪些歷程?

          ??前情回顧:“全”事件觸發(fā):阿里云函數(shù)計算與事件總線產(chǎn)品完成全面深度集成

          從事件總線到事件流,從基于 CloudEvents 的事件總線觸發(fā)到更具個性化的事件流觸發(fā),函數(shù)計算已成為事件總線生態(tài)不可或缺的重要組成部分,承載了 EventBridge 系統(tǒng)架構(gòu)中越來越多的角色,事件流基礎(chǔ)架構(gòu)的函數(shù) Transform,基于函數(shù)計算的多種下游 Sink Connector 投遞目標支持,函數(shù)作為 EventBridge 端點 API Destination;基于事件總線統(tǒng)一,標準的事件通道能力,和基于函數(shù)計算敏捷、輕量、彈性的計算能力,我們將又一次起航探索云上事件驅(qū)動架構(gòu)的最佳實踐。

          正文導(dǎo)讀:


          本文主題圍繞事件總線+函數(shù)計算,構(gòu)建云上最佳事件驅(qū)動架構(gòu)應(yīng)用。希望通過下面的分享,幫助大家深入理解 Serverless 函數(shù)計算、EventBridge 事件總線對于構(gòu)建云上事件驅(qū)動架構(gòu)應(yīng)用的價值和背后的邏輯、 為什么函數(shù)計算是云上事件驅(qū)動服務(wù)最佳實踐?為什么我們?nèi)绱诵枰录偩€服務(wù)?伴隨著這些謎題的解開,最后,讓我們一起了解應(yīng)用于實際生產(chǎn)的一些 Serverless 事件驅(qū)動客戶案例。



          01


          事件驅(qū)動架構(gòu)的本質(zhì)


          Back to the Nature of Event-Driven
          大家可能會疑惑,事件驅(qū)動家喻戶曉,為什么我們又要重新討論事件驅(qū)動呢?我想這也正是我們需要討論它的原因,回歸本質(zhì),重新起航。

          事件驅(qū)動可能是一個比較寬泛的概念,而本文聚焦事件驅(qū)動架構(gòu)的討論,事件驅(qū)動架構(gòu)作為一種軟件設(shè)計模式,的確不是一個新的概念,伴隨著計算機軟件架構(gòu)的演進,它已經(jīng)存在了一段很久的時間,大家對它的討論也從未停止過,當(dāng)我們需要重新討論一個已經(jīng)存在的概念的時候,我想我們有必要重新回到它最開始的定義,一起探索那些本質(zhì)的東西,重新認識它。


          上面的這些內(nèi)容是我從相關(guān)的一些資料上摘錄的關(guān)于事件驅(qū)動架構(gòu)的一些描述,“abstract”,“simple”,“asynchronous”,“message-driven” 這些具有代表性的詞匯很好的給予事件驅(qū)動架構(gòu)一個宏觀的描述;從事件驅(qū)動架構(gòu)的抽象概念,到它簡潔的架構(gòu),以及事件驅(qū)動架構(gòu)要達成的目的,和它在實際的系統(tǒng)架構(gòu)中所展現(xiàn)的形態(tài)。

          事件驅(qū)動架構(gòu)基本概念及形態(tài)

          在了解了關(guān)于事件驅(qū)動架構(gòu)的一些基本描述之后,我們需要進一步明確事件驅(qū)動架構(gòu)所涉及的一些基本概念和架構(gòu)形態(tài)。根據(jù)維基百科描述,事件驅(qū)動架構(gòu)涉及的核心概念如下所示:


          事件驅(qū)動架構(gòu)基本形態(tài)



          圍繞事件的流轉(zhuǎn),根據(jù)事件驅(qū)動架構(gòu)的概念和基本形態(tài),主要涉及以下四個核心部分:


          • Event Producer:負責(zé)產(chǎn)生事件,并將產(chǎn)生的事件投遞到事件通道;
          • Event Channel:負責(zé)接收事件,并將接收的事件持久化存儲,投遞給訂閱該事件的后端處理引擎;
          • Event Processing Engine:負責(zé)對于訂閱的事件做出響應(yīng)和處理,根據(jù)事件更新系統(tǒng)狀態(tài);
          • Downstream event-driven activity:事件處理完成之后,對于事件處理響應(yīng)的一種展示;


          事件驅(qū)動架構(gòu)要達成的目的

          了解了事件驅(qū)動架構(gòu)的基本形態(tài),架構(gòu)中事件通道的引入,解耦了事件生產(chǎn)和事件處理這兩個最基本的系統(tǒng)角色,那么這樣的架構(gòu)模型所要達成的最終目的到底是什么?



          系統(tǒng)架構(gòu)松耦合

          事件生產(chǎn)者與事件訂閱者在邏輯上是分開的。事件的生成與使用的分離意味著服務(wù)具有互操作性,但可以獨立擴縮、更新和部署。


          只面向事件的松散耦合可以減少系統(tǒng)依賴項,并允許您以不同的語言和框架實現(xiàn)服務(wù)。您無需更改任何一個服務(wù)的邏輯,即可添加或移除事件生成方和接收方。您無需編寫自定義代碼來輪詢、過濾和路由事件。


          系統(tǒng)的可伸縮性


          基于事件驅(qū)動架構(gòu)的松耦合特性,意味著可以獨立對事件生產(chǎn)者,事件通道服務(wù),以及事件處理引擎進行獨立的擴縮容;尤其對于后端事件處理引擎,可以根據(jù)消息處理響應(yīng) SLA 和后端資源供給進行彈性擴縮容;同時可以基于事件粒度構(gòu)建不同規(guī)格的后端處理服務(wù),實現(xiàn)更細粒度的系統(tǒng)彈性伸縮。


          系統(tǒng)的可擴展性


          系統(tǒng)的可擴展性,主要表現(xiàn)在當(dāng)系統(tǒng)需要增加新的功能,如何快速的基于現(xiàn)有系統(tǒng)架構(gòu)快速構(gòu)建支持新的業(yè)務(wù)邏輯,在事件驅(qū)動架構(gòu)應(yīng)用中,圍繞事件粒度的處理模式,能夠天然快速支持增加新的基于事件的數(shù)據(jù)流抽象。


          當(dāng)系統(tǒng)中增加新的事件類型的時候,無需調(diào)整變更發(fā)布整個系統(tǒng),只需要關(guān)注需要訂閱的事件進行事件處理邏輯的開發(fā)和部署即可,也可以基于原來的系統(tǒng)做很少的代碼變更即可實現(xiàn),也可以在業(yè)務(wù)初期通過獨立的服務(wù)訂閱指定的事件完成特定的業(yè)務(wù)邏輯支持。




          02


          為什么函數(shù)計算
          是云上事件驅(qū)動服務(wù)最佳實踐?



          在討論完事件驅(qū)動架構(gòu)基本模型之后,我想關(guān)于事件驅(qū)動的概念,形態(tài)我們有了統(tǒng)一的認識和理解,接下來我們進入議題的第二個部分,為什么函數(shù)計算是云上事件驅(qū)動服務(wù)最佳實踐?


          函數(shù)計算簡介

          函數(shù)計算 FC 是一款基于事件驅(qū)動的全托管計算服務(wù),相關(guān)的產(chǎn)品細節(jié)可以見官網(wǎng)介紹。作為一款通用的事件驅(qū)動型計算服務(wù),接下來我會從三個方面進行詳細的介紹。



          編程范式


          使用函數(shù)計算,用戶無需采購與管理服務(wù)器等基礎(chǔ)設(shè)施,只需編寫并上傳代碼。函數(shù)計算為你準備好計算資源,彈性地、可靠地運行任務(wù),并提供日志查詢、性能監(jiān)控和報警等開箱即用功能,編程范式帶來開發(fā)的“簡單,快捷”。


          按照函數(shù)粒度進行獨立的功能單元開發(fā),快速調(diào)試,快速的部署上線,省去了大量資源購買,環(huán)境搭建的運維工作;同時函數(shù)計算是一個事件驅(qū)動的模型,事件驅(qū)動,意味著用戶不需要關(guān)注服務(wù)產(chǎn)品數(shù)據(jù)傳遞的問題,省去了在編寫代碼中涉及的大量服務(wù)訪問連接的邏輯;“事件驅(qū)動” + “函數(shù)粒度開發(fā)” + “免服務(wù)器運維”等幾個維度特征幫助函數(shù)計算支撐“聚焦業(yè)務(wù)邏輯敏捷開發(fā)”的底層邏輯。



          計算模型


          除了開發(fā)模式帶來的研發(fā)效能提升之外,函數(shù)計算提供非常細粒度的計算資源和毫秒級計費模型,支撐按需計算,按量收費;能夠支持按用戶的請求,根據(jù)用戶流量的模型為計算付費;當(dāng)然按用戶請求付費存在技術(shù)上巨大的挑戰(zhàn),要求函數(shù)計算實例的啟動小于用戶的 RT 要求,冷啟動性能尤為重要,這時候極致彈性成為了 Serverless 按需付費,業(yè)務(wù)降本的底層技術(shù)支撐。函數(shù)計算通過“極致彈性” + “按需付費”的模型幫助 Serverless 函數(shù)計算實現(xiàn)真正的按需計算邏輯。



          事件驅(qū)動


          在基于云的開發(fā)環(huán)境,云產(chǎn)品承載的服務(wù)相對內(nèi)聚,各自扮演著分布式系統(tǒng)架構(gòu)中的各個重要角色,云產(chǎn)品之間的事件觸發(fā)機制能夠幫助客戶更好的基于多個云產(chǎn)品構(gòu)建自己的業(yè)務(wù)系統(tǒng);否則需要用戶自己負責(zé)云產(chǎn)品事件的監(jiān)聽,串聯(lián)云服務(wù),進行復(fù)雜的錯誤處理,這是非常復(fù)雜,開發(fā)代價極其昂貴的一件事;


          除了產(chǎn)品連接帶來的開發(fā)效率之外,當(dāng)用戶訂閱某個事件,并提供處理邏輯的時候,客戶已經(jīng)潛在的過濾掉了不需要處理的事件請求,事件驅(qū)動意味著每一次的事件觸發(fā)請求都是一次完全有效的計算。



          函數(shù)計算對于事件驅(qū)動架構(gòu)的價值

          為什么函數(shù)計算是云上最佳的事件驅(qū)動架構(gòu)服務(wù)?函數(shù)計算對于事件驅(qū)動架構(gòu)的核心價值到底是什么?


          事件驅(qū)動架構(gòu)一直存在,在沒有函數(shù)計算的時候,同樣也有事件驅(qū)動架構(gòu),在微服務(wù)的時候也同樣有事件驅(qū)動架構(gòu)。如今,當(dāng)我們重新再來討論事件驅(qū)動架構(gòu)的時候,到底是什么發(fā)生了變化,有哪些本質(zhì)的區(qū)別?在整個事件驅(qū)動架構(gòu)中,函數(shù)計算最大的價值在于幫助構(gòu)建 “Event Processing Engine” 這個角色,我想主要是以下兩個方面發(fā)生了本質(zhì)的變化:



          系統(tǒng)可擴展性價值


          開發(fā)模式發(fā)生了本質(zhì)的變化:函數(shù)計算提供的框架能力及編程模型,最大化的消除了客戶業(yè)務(wù)邏輯之外的處理內(nèi)容,極大的加速了客戶業(yè)務(wù)開發(fā),同時基于這樣這樣的開發(fā)模式,用戶對于新增事件處理邏輯能夠在最短的時間完成處理并上線,細粒度,專注業(yè)務(wù)的敏捷開發(fā)模式能夠加速業(yè)務(wù)快速上線。


          系統(tǒng)可伸縮性價值


          計算模式發(fā)生了本質(zhì)的變化:基于事件驅(qū)動架構(gòu)事件粒度的處理邏輯和函數(shù)計算更細粒度力度計算彈性能力,能夠從多個維度實現(xiàn) “Event Processing Engine” 組件的彈性能力, 這我想這也是函數(shù)計算對于事件驅(qū)動架構(gòu)的一個最核心價值。



          03


          為什么我們?nèi)绱诵枰录偩€服務(wù)?


          構(gòu)建云上事件驅(qū)動架構(gòu)挑戰(zhàn)

          函數(shù)計算以其輕量,快捷,能夠利用事件驅(qū)動的方式與其他云產(chǎn)品進行聯(lián)動的特點, 成為很多客戶利用事件驅(qū)動架構(gòu)構(gòu)建業(yè)務(wù)系統(tǒng)的首選,隨著業(yè)務(wù)及客戶需求的不斷增加,客戶對于函數(shù)計算和更多云產(chǎn)品及服務(wù)的連接需求變得越來越多,同時對于其他云產(chǎn)品的客戶而言, 也希望能夠利用 Serverless 函數(shù)計算的特點幫助處理一些系統(tǒng)任務(wù)和事件。

          盡管函數(shù)計算和云上的眾多云產(chǎn)品進行了集成,提供了一些開箱即用的事件觸發(fā)能力,那么我們?yōu)槭裁催€需要事件總線服務(wù)來構(gòu)建事件驅(qū)動應(yīng)用架構(gòu)呢?

          圍繞函數(shù)計算構(gòu)建事件驅(qū)動架構(gòu)生態(tài)的過程中,我們面臨主要來自三個方面的挑戰(zhàn)。面對這些挑戰(zhàn),基于函數(shù)計算和事件總線幫助云上客戶構(gòu)建完備的事件驅(qū)動架構(gòu)生態(tài)迫在眉睫。


          事件源多樣性挑戰(zhàn)


          事件驅(qū)動作為函數(shù)計算產(chǎn)品核心競爭力,打通函數(shù)計算和其它云產(chǎn)品,以及用戶自定義應(yīng)用,SaaS 服務(wù)的連通成為函數(shù)計算生態(tài)集成的迫切需求,但系統(tǒng)集成,生態(tài)建設(shè)從來都不是一件容易的事情。

          函數(shù)計算系統(tǒng)在和 EventBridge 集成之前,已經(jīng)和 OSS,SLS 等用戶典型場景的云產(chǎn)品進行了集成,也和阿里云的其它大概十多款產(chǎn)品進行了集成,不同系統(tǒng)具有不同的事件格式,不同系統(tǒng)的注冊通知機制也各不相同,以及上游不同系統(tǒng)的失敗處理機制也各不相同。

          部分系統(tǒng)支持同步的調(diào)用方式,部分系統(tǒng)支持異步的調(diào)用方式,調(diào)用方式的差異主要取決于上游系統(tǒng)在接入函數(shù)計算的時候當(dāng)時面臨的產(chǎn)品業(yè)務(wù)場景,對于新的產(chǎn)品能力和業(yè)務(wù)場景的擴展支持,在當(dāng)時并未有太多的考慮。隨著和更多云產(chǎn)品的集成,集成的投入,集成的困難度和底層數(shù)據(jù)管理難度越來越大。面對多種事件源集成的客觀困難,函數(shù)計算急需提高和其他云產(chǎn)品的集成效率。

          授權(quán)復(fù)雜及安全隱患


          除此之外, 函數(shù)計算希望提升用戶體驗,保證用戶只關(guān)心事件的處理;同時希望能夠在面對大量的云產(chǎn)品時保證系統(tǒng)授權(quán)層面的復(fù)雜度。用戶在使用事件觸發(fā)的時候, 需要了解不同產(chǎn)品接入函數(shù)計算的權(quán)限要求,針對不同的產(chǎn)品需要提供不同的授權(quán)策略,對于客戶使用函數(shù)計算帶來了非常大的困難,為了加速產(chǎn)品接入,大量用戶經(jīng)常使用 FullAcees 權(quán)限,造成較大產(chǎn)品安全隱患, 和其它云產(chǎn)品的集成急需統(tǒng)一的授權(quán)界面,統(tǒng)一用戶體驗。

          通用能力難以沉淀


          面對上游不同的事件源, 如何更好的投遞事件、更好的消費事件?如何進行事件的錯誤處理?函數(shù)計算調(diào)用方式如何選擇?以及函數(shù)計算后端錯誤 Backpressure 能力的反饋、重試策略和上游系統(tǒng)參數(shù)設(shè)置、觸發(fā)器數(shù)量的限制等問題獲成為函數(shù)計算事件觸發(fā)不得不面對的問題。

          為了更好的服務(wù)客戶,提供可靠的消費處理能力,函數(shù)計算希望能夠有一個統(tǒng)一的接入層,基于統(tǒng)一的接入層進行消費能力和流控能力的建設(shè)。通過沉淀在這樣一個標準的層面,在保證調(diào)用靈活性的同時,提供可靠的服務(wù)質(zhì)量。

          事件總線簡介

          阿里云事件總線(EventBridge) 是一種無服務(wù)器事件總線,支持將用戶的應(yīng)用程序、第三方軟件即服務(wù) (SaaS)數(shù)據(jù)和阿里云服務(wù)的數(shù)據(jù)通過事件的方式輕松的連接到一起,這里匯聚了來自云產(chǎn)品及 SaaS 服務(wù)的豐富事件;

          總線模式(EventBus)



          從整個架構(gòu)來看,EventBridge 通過事件總線,事件規(guī)則將事件源和事件目標進行連接。首先,讓我們快速普及下 EventBridge 架構(gòu)中涉及的幾個核心概念:

          • 事件:狀態(tài)變化的記錄;
          • 事件源:事件的來源,事件的產(chǎn)生者,產(chǎn)生事件的系統(tǒng)和服務(wù), 事件源生產(chǎn)事件并將其發(fā)布到事件總線;
          • 事件總線:負責(zé)接收來自事件源的事件;EventBridge 支持兩種類型的事件總線:
            • 云服務(wù)專用事件總線:無需創(chuàng)建且不可修改的內(nèi)置事件總線,用于接收您的阿里云官方事件源的事件。
            • 自定義事件總線:標準存儲態(tài)總線,用于接收自定義應(yīng)用或存量消息數(shù)據(jù)的事件,一般事件驅(qū)動可選該總線。
          • 事件規(guī)則:用于過濾,轉(zhuǎn)化事件,幫助更好的投遞事件;
          • 事件目標:事件的消費者,負責(zé)具體事件的處理。

          通過上面的流程,完成了事件的產(chǎn)生,事件的投遞,事件的處理整個過程。當(dāng)然事件并不是一個新的概念,事件驅(qū)動架構(gòu)也不是一個新的概念,事件在我們的系統(tǒng)中無處不在,事件驅(qū)動架構(gòu)同樣伴隨著整個計算機的架構(gòu)演進,不斷地被討論。

          對于 EventBridge,采用云原生事件標準 CloudEvents 來描述事件;帶來事件的標準化,這樣的標準化和事件標準的開放性帶來一個最顯著的優(yōu)勢:接入的標準化,無論是對于事件源還是事件目標。

          事件流模式(EventStreaming)


          消息產(chǎn)品憑借其異步解耦、削峰填谷的特點,成為了互聯(lián)網(wǎng)分布式架構(gòu)的必要組成部分,Serverless 函數(shù)計算有著與其完全吻合的應(yīng)用場景,針對消息產(chǎn)品生態(tài)集成,函數(shù)計算在架構(gòu)層面做了專門的建設(shè),基于 EventBridge 產(chǎn)品提供的 EventStreaming 通道能力建設(shè)了通用的消息消費服務(wù) Poller Service,基于該架構(gòu)對用戶提供了 RocketMQ,Kafka,RabbitMQ,MNS 等多個消息類型觸發(fā)能力。

          將消費的邏輯服務(wù)化,從業(yè)務(wù)邏輯中剝離由平臺提供,消費邏輯和處理邏輯的分離,將傳統(tǒng)架構(gòu)的消息拉模型轉(zhuǎn)化成 Serverless 化的事件驅(qū)動推模型,能夠支撐由函數(shù)計算承載消息處理的計算邏輯 ,實現(xiàn)消息處理的 Serverless 化。

          基于這樣的架構(gòu),能夠幫助客戶解決消息客戶端的集成連接問題,簡化消息處理邏輯的實現(xiàn),同時對于波峰波谷的業(yè)務(wù)模型,結(jié)合函數(shù)計算提供細粒度的計算彈性能力,能夠?qū)崿F(xiàn)資源的動態(tài)擴容,降低用戶成本。


          事件總線對于事件驅(qū)動架構(gòu)的價值

          • 簡化統(tǒng)一事件源接入



          • 沉淀通用事件通道能力




          • 提升優(yōu)化用戶集成體驗


          利用函數(shù)計算提供的 HTTP 函數(shù) URL 能力,結(jié)合事件總線端點 API 能力,能夠快速的幫助客戶進行系統(tǒng)擴展和集成。




          04


          客戶場景案例分享


          總線模式+函數(shù)計算用戶案例

          • 利用 ActionTrail 事件觸發(fā)函數(shù)進行多賬號審計管理



          • 利用 OSS 文件上傳事件觸發(fā)函數(shù)擴容 ACK  集群資源



          • 利用 OSS 文件上傳執(zhí)行 Terraform 文件并訪問外部 API 做結(jié)果通知



          事件流模式+函數(shù)計算用戶案例

          利用函數(shù)計算細粒度資源彈性特征,結(jié)合業(yè)務(wù)波峰波谷的特點,實現(xiàn)快速的消息清洗和處理。

          • 事件流觸發(fā)函數(shù)計算處理業(yè)務(wù)消息



          • 事件流觸發(fā)函數(shù)計算進行簡單 ETL 數(shù)據(jù)同步



          • 事件流觸發(fā)函數(shù)進行簡單 ETL 數(shù)據(jù)清洗入庫



          • 函數(shù)異步+事件流觸發(fā)函數(shù)構(gòu)建電商運營通知系統(tǒng)


          在購物車加購,商品變更通知場景,利用函數(shù)計算異步系統(tǒng)(內(nèi)部自帶 Queue 能力),觸發(fā)大量運營通知,利用函數(shù)異步的 Destination 能力將運營通知結(jié)果寫入 MQ,然后利用事件流能力對 MQ 數(shù)據(jù)進行再次處理,寫入 HBase 數(shù)據(jù)庫中。


          一 END 一

          未來已來:從技術(shù)升級到降本提效


          “全”事件觸發(fā):阿里云函數(shù)計算與事件總線產(chǎn)品完成全面深度集成


          <關(guān)注 Serverless 公眾號,留言回復(fù) 手冊 免費獲取阿里云云原生 Serverless 產(chǎn)品解決方案手冊>

          ??歡迎后臺回復(fù) “進群” 加入阿里云 Serverless 千人開發(fā)者技術(shù)學(xué)習(xí)群交流。


          點擊“閱讀原文”進入 EventBridge 官網(wǎng)!



          瀏覽 64
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  久久精品一区二区三区不卡牛牛 | 吴梦梦精品一区二区三区观看 | renrense在线观看 | 我要操逼网 | 久久免费高清视频 |