DDD之聚合與事件溯源[A +ES]

在開發(fā)微服務(wù)的過程中妄均,分布式數(shù)據(jù)管理是必須解決的問題。不同服務(wù)數(shù)據(jù)庫選擇的多樣性哪自,事務(wù)問題及跨服務(wù)的數(shù)據(jù)查詢都是我們要面對的挑戰(zhàn)丰包。


對于大多數(shù)應(yīng)用而言,要實現(xiàn)微服務(wù)和管理分布數(shù)據(jù)壤巷,都需要采用事件驅(qū)動架構(gòu)邑彪。在事件驅(qū)動架構(gòu)中,某個服務(wù)在發(fā)生重要事情的時候胧华,比如寄症,創(chuàng)建一個訂單會發(fā)布一個事件宙彪,而其他服務(wù)訂閱這些事件。作為對事件的回應(yīng)有巧,接收事件的服務(wù)通常會更新自身的狀態(tài)释漆,或許會發(fā)布更多事件,讓其他服務(wù)進行更新篮迎。


我們分析一下上述用例男图,我的的業(yè)務(wù)代碼必需完成在MySQL數(shù)據(jù)庫中加入訂單相關(guān)數(shù)據(jù)并將事件發(fā)布到Kafka中。如何避免不一致性發(fā)生甜橱,保證這兩個操作在同一個事務(wù)中呢享言?

傳統(tǒng)方法中,我們可以使用包含數(shù)據(jù)庫和消息代理的分布式事務(wù)渗鬼,但我們都知道分布式事務(wù)帶來的諸多問題與限制,荧琼。然而譬胎,事件溯源(Event Sourcing)也是一個不錯的辦法。它已經(jīng)存在了幾十年命锄,直到Greg Young用于DDD中后堰乔,逐步流行了起來。

這里我們借助Martin Fowler對事件溯源給出的一些解釋:

事件溯源的核心理念是說脐恩,在對系統(tǒng)的狀態(tài)做出變更時镐侯,把每次變更記錄為一個事件,在未來的任何時刻驶冒,都可以通過重新處理這些事件來重建系統(tǒng)的狀態(tài)苟翻。事件存儲是主要的事件來源,可以從事件存儲中重建系統(tǒng)的狀態(tài)骗污。對于程序員來說崇猫,版本控制系統(tǒng)是一個最好的例子。提交日志就是事件存儲需忿,而代碼工作副本就是系統(tǒng)狀態(tài)诅炉。在某個指定的工作副本上重播提交日志就可以創(chuàng)建另一個工作副本,也就是重建了某個時刻的系統(tǒng)狀態(tài)屋厘。

拿訂單為例涕烧,在整個訂單的生命周期中所發(fā)生的重要的事情,都會記錄在事件存儲中汗洒。

再看看事件事件溯源是如何工作的:

這里的訂單是訂單服務(wù)中的訂單聚合议纯,可能有的讀者會問,這樣的架構(gòu)怎樣解決訂單更新與保存的一致性呢仲翎?其實訂單沒有對應(yīng)的MySQL數(shù)據(jù)庫痹扇,只存在于內(nèi)存中铛漓,需要持久化的只有訂單業(yè)務(wù)過程中的領(lǐng)域事件,保存在了事件存儲中鲫构,單一的存儲類型浓恶,這樣就不存在一致性問題了。

關(guān)于不同服務(wù)的joins問題结笨,事件溯源推薦使用CQRS架構(gòu)包晰,將查詢與事件處理分離,在DDD中我們會定義成領(lǐng)域報告炕吸。詳細內(nèi)容后續(xù)文章會有處理伐憾。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市赫模,隨后出現(xiàn)的幾起案子树肃,更是在濱河造成了極大的恐慌,老刑警劉巖瀑罗,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胸嘴,死亡現(xiàn)場離奇詭異,居然都是意外死亡斩祭,警方通過查閱死者的電腦和手機劣像,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來摧玫,“玉大人耳奕,你說我怎么就攤上這事∥芟瘢” “怎么了屋群?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坏挠。 經(jīng)常有香客問我谓晌,道長,這世上最難降的妖魔是什么癞揉? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任纸肉,我火速辦了婚禮,結(jié)果婚禮上喊熟,老公的妹妹穿的比我還像新娘柏肪。我一直安慰自己,他們只是感情好芥牌,可當我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布烦味。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪谬俄。 梳的紋絲不亂的頭發(fā)上柏靶,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天,我揣著相機與錄音溃论,去河邊找鬼屎蜓。 笑死,一個胖子當著我的面吹牛钥勋,可吹牛的內(nèi)容都是我干的炬转。 我是一名探鬼主播,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼算灸,長吁一口氣:“原來是場噩夢啊……” “哼扼劈!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起菲驴,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤荐吵,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后赊瞬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體捍靠,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年森逮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片磁携。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡褒侧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出谊迄,到底是詐尸還是另有隱情闷供,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布统诺,位于F島的核電站歪脏,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏粮呢。R本人自食惡果不足惜婿失,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望啄寡。 院中可真熱鬧豪硅,春花似錦、人聲如沸挺物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽识藤。三九已至砚著,卻和暖如春次伶,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背稽穆。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工冠王, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秧骑。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓版确,卻偏偏與公主長得像,于是被迫代替她去往敵國和親乎折。 傳聞我的和親對象是個殘疾皇子绒疗,可洞房花燭夜當晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容