sourcing啥意思 談一下關(guān)于CQRS架構(gòu)怎么實現(xiàn)高性能?
談一下關(guān)于CQRS架構(gòu)怎么實現(xiàn)高性能?不久前,我在博客花園看到一位朋友寫的文章。這種觀點認為,為了獲得高性能,我們需要避免網(wǎng)絡(luò)開銷(IO)、海量數(shù)據(jù)和資源競爭。我認為這三點很合理。所以我還想談?wù)勅绾卧?/p>
談一下關(guān)于CQRS架構(gòu)怎么實現(xiàn)高性能?
不久前,我在博客花園看到一位朋友寫的文章。這種觀點認為,為了獲得高性能,我們需要避免網(wǎng)絡(luò)開銷(IO)、海量數(shù)據(jù)和資源競爭。我認為這三點很合理。所以我還想談?wù)勅绾卧赾qrs架構(gòu)下實現(xiàn)高性能。您應該熟悉cqrs(命令查詢責任遷移)體系結(jié)構(gòu)。簡而言之,它是一個系統(tǒng),分為兩部分:命令處理(寫請求)和查詢處理(讀請求)。然后通過不同的體系結(jié)構(gòu)實現(xiàn)讀寫端,實現(xiàn)CQ兩端的優(yōu)化(命令端,簡稱C端;查詢端,簡稱Q端)。Cqrs作為一種讀寫分離的體系結(jié)構(gòu),對數(shù)據(jù)存儲沒有太多的限制。因此,我認為cqrs可以在不同的層次上實現(xiàn)。例如,CQ的兩端共享數(shù)據(jù)庫,CQ的兩端僅與上層代碼分開。這種方法的優(yōu)點是我們可以將代碼的讀寫分開,并更好地維護它。CQ的兩端沒有數(shù)據(jù)一致性問題,因為我們共享一個數(shù)據(jù)庫。在我看來,這種建筑很實用。它不僅考慮了數(shù)據(jù)的強一致性,而且使代碼易于維護。將CQ兩端的數(shù)據(jù)庫和上層代碼分離,然后通常通過域事件從C端同步Q的數(shù)據(jù)。有兩種同步方式,同步或異步。如果CQ兩端需要強一致性,則需要同步;如果CQ兩端的數(shù)據(jù)最終一致性可以接受,則可以使用異步。有了這種架構(gòu),我覺得C端應該采用事件源(ES)模式,這樣才有意義,否則會給自己帶來麻煩。因為如果你這樣做,你會發(fā)現(xiàn)會有多余的數(shù)據(jù)。同樣的數(shù)據(jù)在C側(cè)數(shù)據(jù)庫和q側(cè)數(shù)據(jù)庫中都可用。與上述第一種方法相比,我想不出有什么優(yōu)點。如果使用es,C端的所有最新數(shù)據(jù)都可以用域事件表示;如果要查詢和顯示數(shù)據(jù),可以從Q端的readdb(關(guān)系數(shù)據(jù)庫)進行查詢。我認為要達到高績效,還有很多事情要談。