Azure CosmosDB配置多個Azure Region寫入時,沖突類型和解決策略要如何考慮?
對于配置了多個寫入?yún)^(qū)域的Azure Cosmos DB帳戶,當(dāng)寫入者同時更新多個區(qū)域中的相同項時,沖突劃分為以下三種類型:
插入沖突:
當(dāng)應(yīng)用程序同時從兩個或更多個區(qū)域插入具有相同唯一索引的兩個或更多個項時,可能會發(fā)生這些沖突。例如,可能會因?yàn)镮D屬性而發(fā)生此沖突。所有寫入最初可能會在其各自的本地區(qū)域中成功。但根據(jù)所選的沖突解決策略,最終只會提交一個具有原始ID的項目。
替換沖突:
當(dāng)應(yīng)用程序同時從兩個或更多個區(qū)域更新單個項時,可能會發(fā)生這些沖突。
刪除沖突:
當(dāng)應(yīng)用程序同時從一個區(qū)域刪除一個項并從其他區(qū)域更新該項時,可能會發(fā)生這些沖突。
沖突解決策略:
Azure CosmosDB提供了靈活的策略驅(qū)動的機(jī)制來解決更新沖突??梢葬槍zure CosmosDB容器,從以下兩種沖突解決策略中進(jìn)行選擇:
1.Last Write Wins(LWW),最后寫入者勝出。
如果在執(zhí)行插入或替換操作時有兩個或更多個項發(fā)生沖突,沖突解決路徑值最大的項將成為優(yōu)勝者。如果多個項的沖突解決路徑的數(shù)字值相同,則由系統(tǒng)確定優(yōu)勝者。保證所有區(qū)域融合到單個優(yōu)勝者,并且提交的項的版本最終相同。當(dāng)涉及到刪除沖突時,已刪除版本始終優(yōu)先于插入或替換沖突。不管沖突解決路徑的值如何,均會發(fā)生此結(jié)果。
“最后寫入者勝出”是默認(rèn)的沖突解決策略。它可用于SQL和MongoDB API帳戶。
2.自定義
此解決策略旨在使用應(yīng)用程序定義的語義來調(diào)解沖突。在Azure Cosmos DB容器上設(shè)置此策略時,還需注冊合并存儲過程。當(dāng)在服務(wù)器的數(shù)據(jù)庫事務(wù)下檢測到?jīng)_突時,將自動調(diào)用此過程。在執(zhí)行提交協(xié)議過程中,該系統(tǒng)可保證正好執(zhí)行合并過程一次。