事件消費者之 Projector - 事件溯源

xuding發表於2021-07-17

本文轉載自【何以解耦】:codedecoupled.com/php-es-projector...

在事件溯源架構中,通過事件流獲取應用的當前狀態可能造成效能問題,Projector(放映機)通過監聽事件,生成獨立的檢視儲存應用的當前狀態。我們可以將其想象成資料庫中的物化檢視,或者是一種快取。

以下是從我們的實戰經驗中總結出的幾種 Projector 用例。

實戰用例

查詢模型

使用者對頁面的反應速度要求較高,我們可以使用 Projector 生成服務於使用者的查詢模型。

值得一提的是 Projector 可使用與事件流不同的資料持久化方式,比如事件流原本儲存在 MySQL, Projector 可使用 ElastiSearch 持久化查詢模型:

讓我們看一個簡單的案例,使用 Projector 生成訂單查詢模型:

支援業務實現

當其他客戶需要及時獲取應用的當前狀態,但是無法通過簡單的事件傳送時,我們可以使用 Projector 生成類似於緩衝的 Repository。 此 Repository 將為實現業務邏輯提供及時的應用狀態。

讓我們看一個簡單的案例,使用 Projector 生成車輛可預定 Repository:

值得注意的是,這種用例傾向於同步處理方案,因為其時效性一般比較大。

總結

Projector 是一個簡單且強大的模式,Projector 的職責單一且專注,易於編寫單元測試。

本文轉載自【何以解耦】:codedecoupled.com/php-es-projector... ,如果你也對 TDD,DDD 以及簡潔程式碼感興趣,歡迎關注公眾號【何以解耦】,一起探索軟體開發之道。

本作品採用《CC 協議》,轉載必須註明作者和本文連結
Know how, know why meanwhile.

相關文章