事件溯源與流處理的對比

責任編輯:editor004

作者:Jan Stenberg

2016-06-03 11:58:13

摘自:INFOQ

事件溯源(event sourcing)和CQRS是在領(lǐng)域驅(qū)動設(shè)計(Domain-Driven Design,DDD)社區(qū)出現(xiàn)的兩個模式。在對比事件溯源與流處理的過程中

事件溯源(event sourcing)和CQRS是在領(lǐng)域驅(qū)動設(shè)計(Domain-Driven Design,DDD)社區(qū)出現(xiàn)的兩個模式。流處理(Stream processing)構(gòu)建在類似的理念上,但是它來源于不同的社區(qū),Martin Kleppmann在今年的領(lǐng)域驅(qū)動設(shè)計歐洲會議的演講中,將事件溯源與流處理進行了對比。

Kleppmann之前有在互聯(lián)網(wǎng)公司構(gòu)建大規(guī)模數(shù)據(jù)系統(tǒng)的背景,但是他目前就職于劍橋大學(xué),在將企業(yè)級軟件與互聯(lián)網(wǎng)公司的系統(tǒng)進行對比的時候,Kleppmann指出,它們主要的差異在于復(fù)雜性所在的位置不同。在企業(yè)級軟件方面,復(fù)雜性主要在于領(lǐng)域模型和業(yè)務(wù)邏輯。在互聯(lián)網(wǎng)公司中,領(lǐng)域模型相對會比較簡單,但是它會快速產(chǎn)生數(shù)量非常大的數(shù)據(jù),這導(dǎo)致了數(shù)據(jù)基礎(chǔ)設(shè)施的復(fù)雜性。盡管這兩個方面都有其復(fù)雜性,而且產(chǎn)生的原因各異,但是Kleppmann發(fā)現(xiàn)它們的解決方案是類似的,在企業(yè)級領(lǐng)域采用的是事件溯源,而在互聯(lián)網(wǎng)方面,采用的則是流處理或者不可變事件的序列(sequences of immutable events)。

Kleppmann提到了處理事件流的一個工具,那就是Kafka。最初開發(fā)它的目的在于聚集日志文件和處理事件。它是基于非常簡單的理念構(gòu)造的,Kleppmann將其類比為可以附加(append)日志內(nèi)容的日志文件,不過這里不斷添加的是新的消息或事件。這樣會創(chuàng)建出按序排列的記錄序列,它可以用來統(tǒng)一地處理任意事件流。Kafka一個很重要的特性就是在它跨服務(wù)器分布的時候,能夠處理大量的事件。

使用Kafka實現(xiàn)的一個很有意思功能就是為數(shù)據(jù)庫變更事件創(chuàng)建事件流,Kleppmann認為這與事件溯源非常類似,數(shù)據(jù)庫每條記錄的更新都會產(chǎn)生一個事件,如聚合狀態(tài)或?qū)嶓w的更新。通過這種方式,在發(fā)布并應(yīng)用更新到本地版本的數(shù)據(jù)時,客戶可以讀取到一個事件。Kleppmann指出這種使用場景類似于數(shù)據(jù)庫復(fù)制(database replication),在數(shù)據(jù)庫復(fù)制中,會首先寫入到一個主數(shù)據(jù)庫中,然后復(fù)制到備份數(shù)據(jù)庫中。

在Kafka最初所設(shè)計的使用場景中,所有的消息出現(xiàn)一定百分比的丟失是可以接受的,但是隨著運維經(jīng)驗的不斷豐富和成熟,對持久化的預(yù)期也在提高,它的復(fù)制技術(shù)已經(jīng)達到了很多關(guān)系型數(shù)據(jù)庫復(fù)制系統(tǒng)的水準。為Kafka添加事務(wù)支持的工作正在進行之中,它允許以原子的方式自動發(fā)布消息到多個分區(qū)。Kleppmann指出,盡管事件流和處理是非常新的技術(shù),但是毫無疑問這種趨勢已經(jīng)進入到很多數(shù)據(jù)庫之中了。

在對比事件溯源與流處理的過程中,Kleppmann發(fā)現(xiàn)特別有意思的一點在于這兩個類似的理念來源于兩個差異性非常大的社區(qū),而且這兩個社區(qū)很少有交流。這表明在底層會有一些基礎(chǔ)的理念,而這些理念是非常重要的。

在QCon倫敦的演講中,Kleppmann討論了如何使用事件流和Kafka在異構(gòu)的系統(tǒng)間保持數(shù)據(jù)同步。

Kleppmann演講的slides可以在該地址獲取。

明年的領(lǐng)域驅(qū)動設(shè)計歐洲會議計劃會在2017年的1月底舉行。

查看英文原文:Comparison of Event Sourcing with Stream Processing

鏈接已復(fù)制,快去分享吧

企業(yè)網(wǎng)版權(quán)所有?2010-2024 京ICP備09108050號-6京公網(wǎng)安備 11010502049343號