微服务的好处与弊端_《微服务架构设计模式》-学习总结07
本篇主要總結(jié)第七章:在微服務(wù)架構(gòu)中實(shí)現(xiàn)查詢
- 在微服務(wù)架構(gòu)中查詢數(shù)據(jù)的挑戰(zhàn)
- 何時(shí)以及如何使用API組合模式實(shí)現(xiàn)查詢
- 何時(shí)以及如何使用CQRS模式實(shí)現(xiàn)查詢
微服務(wù)架構(gòu)中,查詢通常需要檢索分散在多個(gè)服務(wù)所擁有的數(shù)據(jù)庫(kù)中的數(shù)據(jù),跨服務(wù)數(shù)據(jù)查詢的兩種模式:
- API組合模式
- 簡(jiǎn)單,應(yīng)盡可能使用
- CQRS:命令查詢職責(zé)隔離模式
- 強(qiáng)大但復(fù)雜
- 維護(hù)一個(gè)或多個(gè)視圖數(shù)據(jù)庫(kù)
API組合模式
API組合模式:由API組合器和兩個(gè)或多個(gè)服務(wù)提供方組成,API組合器通過(guò)查詢每個(gè)服務(wù)的API并組合結(jié)果,實(shí)現(xiàn)從多個(gè)服務(wù)檢索數(shù)據(jù)的查詢。
- API組合器:調(diào)用數(shù)據(jù)提供方API并組合查詢結(jié)果
- 數(shù)據(jù)提供方服務(wù)
API組合模式需要解決的兩個(gè)設(shè)計(jì)問(wèn)題:
- 由誰(shuí)來(lái)?yè)?dān)任API組合器的角色
- 客戶端
- API Gateway
- API組合器獨(dú)立為服務(wù)
- 如何編寫有效的聚合邏輯
- 盡可能并行查詢,使用響應(yīng)式編程模型
API組合模式的好處和弊端
- 好處
- 簡(jiǎn)單
- 弊端
- 增加了額外的開(kāi)銷
- 將一個(gè)查詢變成了N個(gè)查詢
- 帶來(lái)可用性降低的風(fēng)險(xiǎn)
- 依賴于每個(gè)服務(wù)提供方都可用,總體可用性是各服務(wù)提供方可用性的乘積。
- 需要專門的策略來(lái)提高可用性
- 緩存數(shù)據(jù)
- 返回不完整數(shù)據(jù)
- 缺乏事務(wù)數(shù)據(jù)一致性
- 查詢操作可能返回不一致的數(shù)據(jù)
- 增加了額外的開(kāi)銷
CQRS模式(命令查詢職責(zé)隔離)
CQRS模式:使用事件來(lái)維護(hù)從多個(gè)服務(wù)復(fù)制數(shù)據(jù)的只讀視圖,借此實(shí)現(xiàn)對(duì)來(lái)自多個(gè)服務(wù)的數(shù)據(jù)的查詢。它將持久化數(shù)據(jù)模型和使用數(shù)據(jù)的模塊分為命令端和查詢端,他們擁有各自的獨(dú)立數(shù)據(jù)庫(kù)。
- 命令端
- 增、刪和改操作CUD
- 不需要join,僅基于主鍵的查詢操作
- 發(fā)布領(lǐng)域事件
- 查詢端
- 查詢操作R
- 數(shù)據(jù)庫(kù)視圖
- 訂閱并處理領(lǐng)域事件并更新數(shù)據(jù)庫(kù)
CQRS模式的好處和弊端
- 好處
- 在微服務(wù)架構(gòu)中高效地實(shí)現(xiàn)查詢
- 高效地實(shí)現(xiàn)多種不同的查詢類型
- 在基于事件溯源技術(shù)的應(yīng)用程序中實(shí)現(xiàn)查詢
- 更進(jìn)一步地實(shí)現(xiàn)問(wèn)題隔離
- 弊端
- 更加復(fù)雜的架構(gòu)
- 處理數(shù)據(jù)復(fù)制導(dǎo)致的延遲
- 在命令端發(fā)布事件和在查詢端處理事件并更新視圖之間存在延遲。
- 命令端和查詢端API提供數(shù)據(jù)的版本信息,使其能夠判斷查詢端是否過(guò)時(shí),查詢API調(diào)用端可以輪詢查詢直到獲得最新版本的數(shù)據(jù)。
- 在命令端發(fā)布事件和在查詢端處理事件并更新視圖之間存在延遲。
設(shè)計(jì)CQRS視圖
CQRS視圖模型包括視圖數(shù)據(jù)庫(kù)和三個(gè)子模塊:
- 查詢API
- 事件處理程序
- 數(shù)據(jù)訪問(wèn)模塊
- 視圖數(shù)據(jù)庫(kù)
設(shè)計(jì)CQRS視圖需要考慮:
- 選擇視圖數(shù)據(jù)庫(kù)
- 設(shè)計(jì)數(shù)據(jù)庫(kù)訪問(wèn)模塊
- 并發(fā)處理:樂(lè)觀鎖
- 冪等事件處理程序
- 添加和更新CQRS視圖
- 使用歸檔事件構(gòu)建CQRS視圖
- 增量式構(gòu)建CQRS視圖
- 快照+后續(xù)事件
- 增量式構(gòu)建CQRS視圖
學(xué)習(xí)總結(jié)
本章主要講跨服務(wù)查詢的問(wèn)題。主要是兩個(gè)解決方案:
第一,使用一個(gè)API查詢組合器,分別調(diào)用各個(gè)服務(wù)提供的API查詢數(shù)據(jù),再將結(jié)果組合起來(lái)。第二,使用CQRS,設(shè)計(jì)單獨(dú)的命令端和查詢端,命令端通過(guò)事件通知查詢端更新數(shù)據(jù)視圖,需要跨服查詢時(shí)直接查數(shù)據(jù)視圖。
在項(xiàng)目的初期或者在比較簡(jiǎn)單查詢的情況下,可以多使用API查詢組合器。在項(xiàng)目后期或者對(duì)于一些較復(fù)雜的查詢,需要使用CQRS。
總結(jié)
以上是生活随笔為你收集整理的微服务的好处与弊端_《微服务架构设计模式》-学习总结07的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 索非亚机器人的采访_还记得曾经扬言要“毁
- 下一篇: 华为卡槽打不开怎么办_17500元!华为