在微服務中結合使用DDD與事件
英文原文:DDD, Events and Microservices
一年一度的 DDD Exchange 大會今年在倫敦如期舉行,David Dawson 為聽眾帶來了一場精彩的演講。他在演講中表示:要真正體現出微服務的強大能力,必須結合使用領域驅動設計(DDD)。在5-10 年前,DDD 曾經幫助我們解決了在軟件設計中所犯下的諸多錯誤,而在微服務這一背景下,同樣的錯誤又開始冒頭了。
Dawson 是 Simplicity itself 公司的 CEO,他首先從哲學的角度對架構進行了重新定義:這是你處理某個問題,或對其進行推理的方式,也是你用于解決某個問題的指導原則。但它本身并不是一種解決方案,而是一種設計。你所做的并非形成某種架構,而是根據這些指導原則逐步形成某種設計。有許多組織雖然已經從技術角度實現了微服務,但并未從中受益。在 Dawson 看來,這是因為這些組織遵從了不正確的指導原則。
Dawson 曾經就微服務究竟是什么這一話題與許多人進行過交流,他發現每個人的觀點都有所不同,但有一點是一致的:即通過某種網絡邊界實現隔離性。在他看來,這種隔離性是微服務價值的根本,也是痛苦的源頭。你需要在這方面做出大量的權衡,才能夠獲得豐厚的回報,但其代價也同樣不菲。
Dawson 相信,為了創建優秀的微服務,我們真正所需關注的內容與 DDD 中的概念是相吻合的,例如聚合根、網關、視圖和事件。他認為事件改變了我們設計軟件的方式,并將事件稱為真正的統一語言。在與用戶進行交流時,他們總是說有什么事發生了,這就是事件。如果從事件的角度進行設計,那么微服務中所存在的大量問題將煙消云散。對于他來說,整個系統中唯一有意義的事實就是一個事件流,而靜止的數據,例如數據庫中的數據是無用的。只有當這種數據活動起來時,你才能夠從中獲得價值。當你發起一次請求或查詢、發送一個命令,或是對數據進行某種改變時,這些數據就開始活動起來了。
Dawson 認為,如今在開發微服務時,人們對于 HTTP 和 REST 的使用近乎癡迷,但這種技術是有局限性的。它只是一種集成風格,但只提供了請求與響應的功能,卻不支持事件廣播與流。而通過消息傳遞,你就能夠得到對廣播與流的支持,甚至更多的功能。他還相信,通過事件溯源所設計的微服務從根本上對你解決某個問題的方式產生了改變。
明年的 DDD Exchange大會預計于 2016 年 6 月 10 日舉辦,現在已開放注冊。