什么是事件驅(qū)動(EDA)?為什么它是技術(shù)領域的主要驅(qū)動力?


伴隨企業(yè)數(shù)字化進程進入“深水區(qū)”,企業(yè)面臨著日益復雜的 IT 系統(tǒng)和業(yè)務流程,不同系統(tǒng)間的壁壘導致企業(yè)運轉(zhuǎn)效率下降以及協(xié)同摩擦增加。而事件驅(qū)動架構(gòu)(Event-Driven Architecture,EDA)已成為解決這些問題的關(guān)鍵技術(shù)。
事件驅(qū)動是指在分布式系統(tǒng)中,各個組件之間的交互基于事件通信,而非直接的請求-響應模式,具有異步、松散耦合等特征。在 EDA 中,組件之間通過發(fā)布(Publish)和訂閱(Subscribe)事件來實現(xiàn)協(xié)作,事件可以是用戶操作、系統(tǒng)狀態(tài)變化、傳感器數(shù)據(jù)等。
Gartner 將事件驅(qū)動架構(gòu)(EDA)列為十大戰(zhàn)略技術(shù)趨勢之一,并強調(diào)事件驅(qū)動架構(gòu) (EDA) 是技術(shù)和軟件領域發(fā)展的主要驅(qū)動力。EDA 是實時敏捷數(shù)字業(yè)務的核心,通過“監(jiān)聽”物聯(lián)網(wǎng) (IoT) 設備、移動應用程序、生態(tài)系統(tǒng)以及社交和業(yè)務網(wǎng)絡等事件源,以數(shù)字形式實時捕獲真實世界的業(yè)務事件。
過去,以 API 為中心的應用程序設計架構(gòu)顯著提升了業(yè)務的敏捷性,但隨著數(shù)字化業(yè)務場景越來越復雜,企業(yè)對于實時智能、敏捷響應、上下文自適應等需求增加。僅依靠 API 為中心的請求驅(qū)動模型就顯得力不從心。隨著越來越多數(shù)字化系統(tǒng)的接入,應用程序變得更難拓展,連接的 API 網(wǎng)絡更難管理,不同系統(tǒng)間的數(shù)據(jù)壁壘越筑越高,系統(tǒng)的耦合度越來越高。而依托事件驅(qū)動架構(gòu)異步、松耦合的特性,將各個業(yè)務系統(tǒng)解耦,降低系統(tǒng)間的依賴程度,最大程度提升企業(yè)數(shù)字敏捷性。

本文將主要探討什么是事件驅(qū)動?事件驅(qū)動對業(yè)務的幫助和價值是什么?
01.什么是事件驅(qū)動?
想象一個常見的場景。
當你的公司需要招聘一名新員工,基礎流程包括:發(fā)布職位廣告-面試-錄用-人事準備-入職程序-工作安排。這是一個基礎的招聘流程,在這個流程中,每一個步驟都是基于一個特定的事件來進行的。例如,招聘過程是基于公司需要新員工這個事件的觸發(fā)來進行的;面試是基于收到應聘者申請這個事件的觸發(fā)來進行的;錄用是基于面試考核通過這個事件的觸發(fā)來進行的。
以上是一個常見的事件驅(qū)動用例。該用例是企業(yè)標準的招聘流程或系統(tǒng),企業(yè)管理者只需要搭建好整套招聘流程和擬定標準,以及每個節(jié)點所需要的人員。在管理者需要招聘新員工時,只需要發(fā)布指令,該招聘系統(tǒng)則會自動依照流程運作,直至返回招聘結(jié)果。以上述場景為例,事件驅(qū)動架構(gòu)主要包括四個關(guān)鍵組件:
事件:在系統(tǒng)中發(fā)生的任何事情都可以看作是一個事件。在員工入職流程中,例如發(fā)布招聘廣告、收到應聘者申請、發(fā)出錄用通知、完成培訓等都可以看作是事件。
事件源:事件源是觸發(fā)事件的對象。在員工入職流程中,例如發(fā)布招聘廣告的人員、收到應聘者申請的招聘專員、發(fā)出錄用通知的人事專員等都可以看作是事件源。
事件處理程序:事件處理程序是針對特定事件的處理邏輯。在員工入職流程中,例如招聘專員負責面試和錄用流程,人事專員負責人事準備和入職程序,部門經(jīng)理負責為新員工安排工作等都可以看作是事件處理程序。
事件隊列:事件隊列是用于存儲事件的數(shù)據(jù)結(jié)構(gòu)。在員工入職流程中,事件隊列可以是公司的招聘管理系統(tǒng)或人事管理系統(tǒng)。
在事件驅(qū)動架構(gòu)中,事件源觸發(fā)一個事件,該事件被放入事件隊列中等待被處理。事件處理程序從事件隊列中獲取事件并執(zhí)行相應的邏輯,最終完成事件的處理。在上述員工入職流程中,當公司需要新員工時,招聘專員發(fā)布招聘廣告并收到應聘者申請,這些事件會被放入事件隊列中,招聘專員則會從事件隊列中獲取這些事件并執(zhí)行面試和錄用流程。

在實際業(yè)務場景中,雖然有很多數(shù)字化工具幫助處理相關(guān)信息,但依舊有很多程序需要手動執(zhí)行,不僅效率低,還存在很多因人為操作失誤帶來的風險隱患。
例如在上述場景中,員工各類應用系統(tǒng)賬號創(chuàng)建、各系統(tǒng)員工身份數(shù)據(jù)的同步(包含權(quán)限等)、員工入轉(zhuǎn)調(diào)離身份信息管理、員工離職后的權(quán)限及信息刪除等員工全生命周期管理均需要手動操作。這無疑是一項重復機械的勞動,對于體量較大的或人事變動較多的組織來說更是如此。并且還存在因為漏關(guān)權(quán)限等人為誤操作帶來的企業(yè)信息安全隱患。而基于事件驅(qū)動架構(gòu)設計的身份自動化編排系統(tǒng),則可以通過無代碼的形式將員工全生命周期編排成一個事件流,以實現(xiàn)員工全生命周期自動化管理,同樣的場景也可以復用在用戶、合作伙伴管理中。
當然,以上僅僅是一個基礎用例?;谑录?qū)動的身份自動化管理系統(tǒng)還擁有無窮的想象和創(chuàng)新空間。如果你希望更詳細了解身份自動化,點擊文章底部“閱讀原文”,可以免費預約我們的身份專家為你講解。
02.事件驅(qū)動對企業(yè)的價值
Gartner 報告指出,掌握“事件驅(qū)動的 IT”和以事件為中心的數(shù)字業(yè)務戰(zhàn)略將成為大多數(shù)全球企業(yè) CIO 的首要任務。企業(yè)嚴重依賴技術(shù)來構(gòu)建可擴展、敏捷和高度可用的業(yè)務。事件驅(qū)動架構(gòu)正在成為支持現(xiàn)代企業(yè)實時運營、快速適應變化并做出明智業(yè)務決策的關(guān)鍵基石。
降低系統(tǒng)之間的依賴性
在傳統(tǒng)的系統(tǒng)中,不同的組件需要在代碼層面進行耦合,例如通過函數(shù)調(diào)用或共享變量等方式。這種緊密的耦合會導致組件之間高度依賴,當一個組件需要修改時,往往需要同時修改其它組件的代碼,這樣會導致系統(tǒng)的不穩(wěn)定性和難以維護。
相比之下,事件驅(qū)動架構(gòu)中,組件之間通過事件進行通信,而不是直接調(diào)用代碼或共享變量。當一個組件完成某個任務時,它將觸發(fā)一個事件,然后將這個事件發(fā)送給系統(tǒng)中的其他組件。其他組件可以根據(jù)自己的需要選擇是否要監(jiān)聽這個事件,如果監(jiān)聽則可以響應事件并執(zhí)行相應的操作。這種機制使得系統(tǒng)中的組件可以相對獨立地進行開發(fā)和維護,減少了代碼之間的耦合度。
這種松耦合方式使得系統(tǒng)具有更高的可維護性和可擴展性。當需要修改某個組件時,僅需要對該組件進行修改,而不需要同時修改其他組件的代碼。這不僅簡化了開發(fā)過程,同時也使得系統(tǒng)更加健壯和靈活,因為不同的組件可以獨立地進行部署和升級。同時,這種事件驅(qū)動架構(gòu)的松耦合特性也使得系統(tǒng)更加容易進行擴展和集成,因為新的組件可以很容易地添加到系統(tǒng)中而不會影響到其他組件的運行。
提高可用性和可靠性
傳統(tǒng)的系統(tǒng)通常采用緊耦合的方式,即各個組件之間緊密依賴,一個組件的故障很容易影響到其他組件的正常運行,從而導致系統(tǒng)的故障和不可用。在事件驅(qū)動架構(gòu)中,當某個組件出現(xiàn)故障時,其他組件可以選擇是否監(jiān)聽該事件,不受影響的組件可以繼續(xù)執(zhí)行自己的任務而不受影響。因此,這種松散的耦合方式可以提高系統(tǒng)的可用性和可靠性。
此外,事件驅(qū)動架構(gòu)還可以通過異步事件處理的方式來提高系統(tǒng)的可用性和可靠性。異步事件處理的特點是事件的處理是非阻塞的,即組件不需要等待事件的處理結(jié)果就可以繼續(xù)執(zhí)行自己的任務。這種處理方式可以降低系統(tǒng)的延遲,并且能夠處理大量的并發(fā)請求,從而提高系統(tǒng)的性能和可靠性。
事件驅(qū)動架構(gòu)還可以通過實現(xiàn)事件溯源機制來提高系統(tǒng)的可靠性和容錯性。事件溯源機制是指將事件的歷史狀態(tài)記錄下來,并且可以回溯到任何一個事件的狀態(tài)。這種機制可以幫助企業(yè)快速恢復系統(tǒng),以及減少因故障而導致的數(shù)據(jù)丟失。通過記錄和回放事件,企業(yè)可以更加容易地發(fā)現(xiàn)和解決系統(tǒng)的問題,從而提高系統(tǒng)的可靠性和容錯性。
敏捷開發(fā)
事件驅(qū)動架構(gòu)可以幫助開發(fā)人員更快地開發(fā)和部署應用程序。由于每個組件都是獨立的,因此可以并行地開發(fā)和測試每個組件,從而縮短應用程序的開發(fā)時間。在部署方面,企業(yè)可以選擇只部署需要的組件,而不是整個應用程序,這將進一步加快部署速度。
支持靈活的架構(gòu)演進
企業(yè)可以通過向系統(tǒng)中添加新的事件、更改現(xiàn)有事件的結(jié)構(gòu)或添加新的組件來擴展其功能。通過這種方式,企業(yè)可以實現(xiàn)較小的增量更改,同時仍保持整個系統(tǒng)的穩(wěn)定性和可靠性。
另外,事件驅(qū)動架構(gòu)還可以通過使用適當?shù)氖录愋蛠泶龠M組件之間的松散耦合。例如,企業(yè)可以定義通用事件類型來處理跨多個組件的通信和協(xié)作。這種松散耦合使得企業(yè)可以更容易地更改系統(tǒng)的某些部分而不影響整個系統(tǒng)。
在靈活的架構(gòu)演進方面,事件驅(qū)動架構(gòu)還支持多種部署選項。企業(yè)可以選擇在本地、云端或混合部署中使用事件驅(qū)動架構(gòu),以適應其業(yè)務需求和可用資源。
實時的數(shù)據(jù)處理與分析
在事件驅(qū)動架構(gòu)中,事件是系統(tǒng)的核心,組件通過觸發(fā)和處理事件來進行通信與協(xié)作。因此,事件驅(qū)動架構(gòu)非常適合處理實時數(shù)據(jù),并且可以輕松地將數(shù)據(jù)從一個組件傳輸?shù)搅硪粋€組件。企業(yè)可以構(gòu)建實時數(shù)據(jù)處理系統(tǒng),從而更快地對業(yè)務數(shù)據(jù)做出決策和反應。例如,企業(yè)可以使用事件驅(qū)動架構(gòu)來監(jiān)控網(wǎng)站流量、分析用戶行為、檢測異常等。在這種情況下,組件可以通過觸發(fā)和處理事件來快速響應這些實時數(shù)據(jù),并執(zhí)行必要的操作。
此外,事件驅(qū)動架構(gòu)也可以用于構(gòu)建復雜的數(shù)據(jù)流處理系統(tǒng),例如處理大數(shù)據(jù)、實現(xiàn)實時分析等。這些系統(tǒng)需要處理大量的數(shù)據(jù),并且需要快速而準確地處理數(shù)據(jù)。事件驅(qū)動架構(gòu)可以通過使用分布式事件處理系統(tǒng)來實現(xiàn)這些目標,同時保持系統(tǒng)的可擴展性和可靠性。這些優(yōu)勢可以幫助企業(yè)更好地了解自己的業(yè)務,優(yōu)化業(yè)務流程,并提高企業(yè)的競爭力。