什麼是事件驅動,且即時有多快?

已完成

如果我們想一下,就能指出許多事件驅動案例。 其中許多需要即時回應。

即時是什麼意思?

即時回應可視為立即答覆。 以咖啡店的收銀員為例,假設收銀員詢問您想要喝什麼飲料。

收銀員會預期立即答覆,或至少很快就有答覆。 否則,收銀員可能會換個說法提問,或懷疑您很無禮。 此時會要求快速答覆,而這樣的要求也很適當。 答覆的時間可能稍有不同,但仍會被視為「即時」。因此,您應該很快就會打聲招呼回應,但可能會花點時間想一下訂單,再回答收銀員的問題。

如果您將該案例轉化為軟體系統,您只需要注意時間:回應時間、完成時間、存取時間、啟動時間等。 使用者或存取應用程式會定義這些時程。

注意

系統工作會即時在指定的期限內執行其功能。

您應該隨時留意系統中的狀況。 因此,請確保您不會忘記顯而易見之事,那就是記錄、監視和測量您的時間。

重要

請務必事先指定期限和時間,並設定非封鎖的監視解決方案以進行檢查。

總而言之,我們同意即時意思為超快和一瞬間。 實際上有多快則會取決您的指定案例。

事件驅動應用程式

如果您想到點選事件,那麼這與您所想的有所出入。 事件驅動應用程式使用「射後不理」(Fire and Forget) 原則。 事件會傳送或「發射」到下一個系統,這可以是另一項服務、事件中樞、資料流或訊息代理程式 (例如 Kafka)。 我們不一定要等候系統中下一個項目的回應。 達成「鬆散結合」會犧牲最終一致性,而這必須另外加以解決。

為了看清事件驅動應用程式的本質,讓我們舉例來看主要架構模式。在此範例中,名為 Alex 的顧客購買了一杯咖啡和一杯卡布奇諾。

事件通知

事件通知是指特定情況或事件的通知。 每個事件都要分開來看。 此範例 (名為 Alex 的顧客購買了一杯咖啡和一杯卡布奇諾) 可能如下所示:

1. 事件:Alex 買了一杯咖啡。

2. 事件:Alex 買了一杯卡布奇諾。

一位咖啡師必須仔細聆聽所有事件,才能了解 Alex 的整個訂單。 但兩位咖啡師也可以獨立準備和供應飲料。

事件傳送狀態傳輸

使用事件傳送狀態傳輸時,所有需要的資訊都會儲存在單一事件中。 如果某個事件遺失或您的服務未接聽所有事件,這會很有用。 在我們的範例中,事件看起來如下所示:

1. 事件:Alex 買了一杯咖啡。

2. 事件:除了咖啡,Alex 還買了一杯卡布奇諾。

若有一位咖啡師,只要聆聽第二個事件可能就已足夠。 若有兩位咖啡師,第二位必須注意第一位。 訂單可以同時供應,但整個過程所需的時間可能會比完全分離更長。

事件來源

使用事件來源時,事件儲存體會成為焦點。 如您所見,事件與第一個範例相同。 但當咖啡師接收事件,然後考慮所有對應事件以取得由 Alex 所下全部訂單的目前狀態時,此時咖啡師對於這個概念就很重要。

在第二個訂單中,咖啡師想起第一個訂單,因此知道 Alex 的訂單包含一杯咖啡和剛才訂購的一杯卡布奇諾。 與第二位咖啡師並行工作可能沒有那麼容易。

當我們增加一位收銀員來接收訂單和供應飲料時,咖啡師可以獨立工作準備飲料。 他們不需要知道客戶的任何情報。 收銀員在該案例中是所謂的事件存放區,會保存事件。 事件來源增加了另一層複雜度,但也新增了分離功能。

1. 事件:Alex 買了一杯咖啡。

收銀員:Alex 的第一個訂單:咖啡

2. 事件:Alex 買了一杯卡布奇諾。

收銀員:Alex 的第二個訂單:卡布奇諾

Visualization that shows event sourcing for buying a coffee.

遙測資料是即時事件

另外還有其他可以想像的範例。 想像一下執行冷藏系統的案例,例如食品或藥品製造商的冷藏系統。 您需要持續控制系統中的溫度及其他相關資料。 了解遙測資料並自動進行控制,對於您的成功至關重要。 事件驅動系統會每兩秒測量一次遙測,然後將其傳送至控制系統,以分析、處理及操作資料。 此外,資料必須即時處理,因為快速回應對於避免企業發生悲慘的後果而言很重要。