使用DDD、事件风暴和Actor来设计反应式系统
領域驅(qū)動設計(domain-driven design,DDD)通常在微服務領域用于查找邊界(限界上下文)。同樣來自DDD的聚合(aggregate)對于定義持久化和一致性的范圍來講也是很重要的。 但是,并不是領域驅(qū)動設計中的所有內(nèi)容都適合微服務,Lutz Huehnken在柏林舉辦的microxchg 2018的演講中討論了如何使用DDD、事件風暴(Event Storming)和基于Akka的Lagom框架來構(gòu)建反應式系統(tǒng),在這個過程中模型與實現(xiàn)會按照1-1的方式進行映射。
在DDD中,傳統(tǒng)上會關注系統(tǒng)的靜態(tài)結(jié)構(gòu),當我們與領域?qū)<医涣鞯臅r候會聆聽他們的名詞。Huehnken是一位獨立咨詢顧問,對他來講關注靜態(tài)屬性通常會導致糟糕的邊界。因此,他主張我們應該關注動態(tài)性和事件。在設計的初期階段,至關重要的并不是事物,而是所發(fā)生的事情。
事件風暴
事件風暴主要是來自DDD社區(qū)的一個工作坊,用于快速探索復雜的業(yè)務領域。在這個過程中,會使用一面大墻作為建模面,并使用貼紙來代表模型。我們將業(yè)務人員和開發(fā)人員聚集起來,并采用事件的方式查找領域中所發(fā)生的事情。當找到事件時,會嘗試沿著一個時間線對它們進行排序。隨后,我們會添加觸發(fā)每個事件的命令。Huehnken在這里沒有基于實體看上去的從屬關系創(chuàng)建聚合,而是希望能夠根據(jù)命令流和事件而生成聚合。這會給聚合帶來不同的視角,它會對命令和事件一起進行邏輯分組,他相信這種方式能夠為我們帶來更好的邊界劃分,并且有助于將聚合分割到不同的服務中。
在Huehnken的經(jīng)驗中,事件風暴是一個強大的工具,在一些較大規(guī)模的場景中更是如此,但是它可以用于不同的級別。他發(fā)現(xiàn)我們還可以將其用到一個更加技術化的級別,用于建模服務和聚合。這種方式的一個巨大優(yōu)勢就是能夠?qū)⒛P秃蛯崿F(xiàn)匹配起來,這在DDD中是非常重要的。
反應式系統(tǒng)
反應式系統(tǒng)指的是構(gòu)建具備即時響應性、彈性、適應性以及消息驅(qū)動特征的系統(tǒng)。實現(xiàn)這些特征的方式是異步消息。對于Huehnken來說,微服務的關鍵點在于隔離、快速反應并且能夠在部署新版本服務時不影響系統(tǒng)的其他組成部分,所以對他來說,這兩個概念非常具有互補性,我們需要反應式的微服務。
實現(xiàn)反應式系統(tǒng)的教科書式技術是Actor,但是Huehnken認為這種模型并不像他想象中的那樣被廣泛采用,他相信造成這一點的原因在于從單體模型進行轉(zhuǎn)移所需的思想方式轉(zhuǎn)變。在單體模型中,我們可以訪問任何的內(nèi)容,甚至可以跨越已存的邏輯邊界。在真正的分布式系統(tǒng)中,會具有網(wǎng)絡邊界,我們無法以整體的方式訪問系統(tǒng)。涉及到多個聚合的業(yè)務進程可能會需要像sagas這樣的模式。現(xiàn)在,我們還要告別全局狀態(tài),在分布式系統(tǒng)中,每個服務是本地化的,已經(jīng)過去的事情要通過事件來表示。
Huehnken認為我們已經(jīng)有了一個非常有趣的采用Actor的實現(xiàn)技術。現(xiàn)在有多個可用的框架,包括Erlang和Akka。Lagom是一個更新、更具傾向性的微服務框架,它基于Akka、CQRS和事件溯源(event sourcing)。因為思維方式的挑戰(zhàn),人們在構(gòu)建復雜異步解耦的系統(tǒng)時還較為困難,但是如果我們想要將建模技術和實現(xiàn)技術結(jié)合起來,這將是一個非常好的機會。
在DDD中,非常重要的一點在于代碼要表述模型的概念。Huehnken認為我們在這一點上已經(jīng)迷失并且在偏離方向。我們已經(jīng)開發(fā)了實現(xiàn)技術,并且又獨立開發(fā)了新的建模技術,現(xiàn)在我們必須將它們結(jié)合起來,這樣來自模型的理念能夠直接反射到代碼中,這樣的話,會在構(gòu)建分布式系統(tǒng)方面取得真正的突破。
會議演講的視頻進行了錄制,其中有一部分已經(jīng)發(fā)布,更多的視頻稍后會發(fā)布。
相關文章:
Actor-ES框架:Ray
Actor-ES框架:Ray--事件(Event)編寫說明
Ray框架Q&A
Actor-ES框架:Ray-Handler之CoreHandler編寫
Actor-ES框架:Ray-Handler之ToReadHandler編寫
原文地址:http://www.infoq.com/cn/news/2018/04/reactive-actors-eventstorming
.NET社區(qū)新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com
總結(jié)
以上是生活随笔為你收集整理的使用DDD、事件风暴和Actor来设计反应式系统的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Serilog Tutorial
- 下一篇: 站在巨人肩上的.NET Core 2.1