從入門到放棄 - 事件溯源

xuding發表於2021-08-16


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

在接觸事件溯源之初,其截然不同的設計模式常會讓初學者望而卻步。這篇文章概括了幾種導致初學者放棄繼續學習事件溯源的誤解。

查詢速度太慢

既然應用的當前狀態需要通過事件流來獲取的話,事件溯源無法實現對查詢速度要求高的搜尋功能。

當我們需要實現類似搜尋這種對速度要求比較高的功能時,事件溯源提供了相應的解決方案 Projector。Projector 通過監聽事件,生成獨立的檢視儲存應用的當前狀態。我們可以將其想象成資料庫中的物化檢視,或者是一種快取。

聚合效能問題

隨著事件數量的線性增長,塑造聚合的時間也會線性增長至無限長。

聚合需讀取事件流來重塑其當前狀態,塑造的時間確實會隨事件數量的增長而呈線性增長,為了解決這個問題,事件溯源提供了一種叫做 Snapshot 的解決方案。

Snapshot 的中文意思是快照,顧名思義,Snapshot 的原理是將聚合的最新狀態持久化。這樣的話,在重塑時聚合便不需要讀取所有的事件,這將大大提高其效能。

陡峭的學習曲線

與 CRUD 這種儲存當前狀態的模式相比,事件溯源的學習曲線太陡峭了,不值一顧。

學習事件溯源,我們必須改變傳統的 CRUD 思想,學會使用事件驅動的方式解決問題。這種新的程式設計方式可以解決很多使用 CRUD 比較棘手的問題。

當然,我們也需要辯證地看待事件溯源。切不可任何專案都使用事件溯源,一定要分析業務場景,選擇最理想的解決方案。

總結

放棄很簡單,但堅持下來,一定很酷。

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

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

相關文章