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