|
如果你要設(shè)計(jì)一個(gè)分布式系統(tǒng),它可能是基于微服務(wù)的,并且你在考慮采用 事件架構(gòu)(Event Architecture),那么目前存在多種模型和技術(shù)可供使用。 David Dawson 近期在博客中介紹了多種類(lèi)型的事件架構(gòu),并指出:非功能性需求是影響架構(gòu)選擇的一個(gè)主要因素。 http:///blog/2017/07/10/styles-of-event-architecture.html Dawson 是一位自由職業(yè)的系統(tǒng)架構(gòu)師,他將事件架構(gòu)簡(jiǎn)單地定義為一種基于事件的軟件架構(gòu)。鑒于事件也是數(shù)據(jù)模型的一部分,因此事件架構(gòu)也是一種數(shù)據(jù)架構(gòu)。他強(qiáng)調(diào),事件架構(gòu)并非定義服務(wù)交互方式的一系列技術(shù)或特定模型。 分階段事件驅(qū)動(dòng)架構(gòu)(SEDA,Staged Event-Driven Architecture)是一種簡(jiǎn)單并很好確立的模型。 SEDA 本質(zhì)上是一個(gè)工作流過(guò)程,其中各個(gè)組件根據(jù)自身的處理情況發(fā)出事件去驅(qū)動(dòng)整個(gè)過(guò)程,而事件通常使用某種消息總線進(jìn)行傳輸。 Dawson 指出,SEDA 模型的一個(gè)重要問(wèn)題是事件的生存期很短,因而在會(huì)在傳輸或組件離線過(guò)程中丟失。因此與其讓系統(tǒng)采納最終一致性,不如實(shí)現(xiàn)一種 Dawson 所稱(chēng)的“期許一致性”(Hopeful Consistency)。 只要所有組件工作正常,系統(tǒng)就是一致的。一旦有組件崩潰,那么最終將會(huì)得到不一致的系統(tǒng),這時(shí)必須做手工恢復(fù)去回到一致性狀態(tài)。Dawson 稱(chēng)其為“面向?qū)嶓w的微服務(wù)”,并強(qiáng)烈建議不要采納這種架構(gòu)。 為重建一致性狀態(tài),Dawson 給出的最優(yōu)解決方案是將事件看作是一種數(shù)據(jù),并持久化事件流。這樣我們就可以在任一時(shí)刻重放(Replay)流以恢復(fù)狀態(tài),并且借助此得到真正的最終一致性系統(tǒng)。從中我們還可以得到其它一些優(yōu)點(diǎn),例如可以對(duì)同一事件流給出多個(gè)視圖。 從 Dawson 的經(jīng)驗(yàn)來(lái)看,盡管通常稱(chēng)持久化事件流為“事件溯源”,但是他堅(jiān)信這并非正確的,因?yàn)樗皇侨ブ亟ㄒ粋€(gè)實(shí)體的狀態(tài),而是對(duì)不受限實(shí)體集創(chuàng)建視圖。 鑒于此,他更愿意稱(chēng)其為“類(lèi)型流處理”(Style Stream Processing)。他認(rèn)為 Kafka 正是使用了這樣的架構(gòu)。Kafka 客戶(hù)按流的順序依次讀取事件,但在重放事件時(shí)可以從頭開(kāi)始,或是從所需的特定事件處開(kāi)始。 用 DDD 的術(shù)語(yǔ)解釋?zhuān)酆希╝ggregate)是 處于一致性范疇內(nèi)的一系列實(shí)體。通過(guò)對(duì)一個(gè)聚合的所有更改發(fā)出和持久化事件,并通過(guò)重放而獲取的同一事件而構(gòu)建同一聚合的狀態(tài),我們可以得到經(jīng)事件溯源的聚合根,Dawson 稱(chēng)其為“真實(shí)事件溯源”。 Daswon 指出,具有 獨(dú)立單一事件流 在重建聚合過(guò)程中是非常重要的。對(duì)于創(chuàng)建視圖等其它一些需求,必須要?jiǎng)?chuàng)建獨(dú)立的流。 為輔助構(gòu)建基于事件架構(gòu)模型的系統(tǒng),Dawson 創(chuàng)建了 Muon Stack 項(xiàng)目。 https://github.com/muoncore/stack-event 它是一系列面向消息和事件的軟件庫(kù)和服務(wù),用于構(gòu)建分布式系統(tǒng)。其中包括了一個(gè)事件流 API 客戶(hù)端,以及一個(gè)名為“Photon”的事件存儲(chǔ)。目前他正致力于構(gòu)建 Muon Stack 對(duì) Kafka 的接口。 https://www./news/2017/08/selecting-event-architecture 今日薦文 點(diǎn)擊下方圖片即可閱讀
|