分布式服務下的交易一致性解決方案

2021-07-30 10:14:04 字數 721 閱讀 4558

一、遠端呼叫與本地事務區分開(別人掛, 我們不掛)

事務方法裡面不能建立遠端呼叫

悲觀鎖select * from *** where id = *** for update;

樂觀鎖select version from ***x where id = ***;

update *** set *** = *** where id = *** and version = 'version';

基於狀態機的樂觀鎖

int i = update *** set status = 4 where id = *** and status = 1;

i = 1 鎖成功, i = 0 鎖失敗

二、併發問題
資料庫鎖
三、交易申請
方案 1

@事務方案2

@事務if(鎖)

}方案3 (重點)

@事務}

//*************************=== 可重複執行, 例如定時任務

if(申請)

if(鎖)

@事務} ||

||if(申請)

if(鎖)

@事務}

四、單例&多執行緒
兩種方式

double check instance

static inner class

分布式一致性

分布式一致性是指在分布式環境中對某個副本資料進行更新操作時,必須確保其他副本也會更新,避免不同副本資料不一致。分布式系統乙個重要的問題時解決資料複製,一是為了增加系統的可用性防止單點故障,二是提高系統可用性,通過負載聚恆,使分布在不同位置的資料副本能夠提供服務。理想狀態下,當然希望分布式系統能夠實現...

分布式一致性

分布式系統的乙個重要問題是資料的複製。對資料的複製一般有兩個原因 資料複製的主要難題是保持各個副本的一致性。即在更新乙個副本時,必須確保同時更新其他的副本,否則資料的各個副本將不再相同。一致性模型實質上是程序和資料儲存之間的乙個約定。正常情況下,乙個資料項上執行讀操作時,它期待該操作返回的是該資料在...

分布式一致性方案

首先,先說一下。老外提出了乙個快取更新套路,名為 cache aside pattern 其中就指出 不是的。假設這會有兩個請求,乙個請求a做查詢操作,乙個請求b做更新操作,那麼會有如下情形產生 快取剛好失效 請求a查詢資料庫,得乙個舊值 請求b將新值寫入資料庫 請求b刪除快取 請求a將查到的舊值寫...