分布式相關(guān)

一致性哈希

對節(jié)點(diǎn)和key進(jìn)行hash計算,分布在2^32槽的環(huán)上。
對于節(jié)點(diǎn)比較少的,虛擬節(jié)點(diǎn)防止數(shù)據(jù)傾斜。

性能標(biāo)準(zhǔn)

吞吐量,qps(每秒處理請求數(shù)),tps(每秒處理事務(wù)數(shù))。
rt(請求延遲)。
95線99線就是95%,99%。并發(fā)100,可以達(dá)到80ms延遲,過95線。

id生成方案

id uuuid(32字節(jié))
雪花(8字節(jié) 時間相關(guān))
時鐘回?fù)軉栴},發(fā)現(xiàn)重復(fù)阻塞5ms重試。
或者預(yù)留的值累加避免重復(fù),如果累加到一定程度拋異常。

分布式事務(wù)

2pc,3pc是數(shù)據(jù)庫層面的,而tcc是業(yè)務(wù)層面的。

  • 2pc
    協(xié)調(diào)者,參與者。
    第一步,協(xié)調(diào)者會發(fā)送給參與者事務(wù)請求,參與者進(jìn)行預(yù)處理,記錄undo,redo日志。
    第二步,協(xié)調(diào)者接到全部的返回,通知所有參與者進(jìn)行統(tǒng)一操作。

  • 3pc
    與2pc類似,把第一步分為兩步,保證參與者執(zhí)行提交或者回滾任務(wù),狀態(tài)是一致的。另外協(xié)調(diào)者和參與者都加了超時檢測機(jī)制,如果協(xié)調(diào)者發(fā)生故障,參與者可以在超時過后,執(zhí)行提交。如果參與者發(fā)生故障,協(xié)調(diào)者收不到參與者的返回,可以繼續(xù)進(jìn)行統(tǒng)一回滾。2pc這兩種情況,都會占用資源,阻塞各參與者的處理。

  • tcc(Try Confirm Cancel)事務(wù)補(bǔ)償
    大致分3步,先try一下,根據(jù)try的結(jié)果,確定走confirm或者cancel。
    Try 階段去占庫存,Confirm 階段則實(shí)際扣庫存,如果庫存扣減失敗 Cancel 階段進(jìn)行回滾,釋放庫存。
    TCC 不存在資源阻塞的問題,因為每個方法都直接進(jìn)行事務(wù)的提交,一旦出現(xiàn)異常通過則 Cancel 來進(jìn)行回滾補(bǔ)償,這也就是常說的補(bǔ)償性事務(wù)。
    通常會利用事務(wù)表來記錄事務(wù)提交情況,避免空回滾,懸掛,冪等問題。
    空回滾,try超時了執(zhí)行cancel時,應(yīng)該不走業(yè)務(wù),直接return。
    在try是插入事務(wù)記錄,cancel時發(fā)現(xiàn)事務(wù)記錄沒有,就插入事務(wù)記錄(避免懸掛問題),return;
    懸掛,try超時了執(zhí)行cancel,之后try又執(zhí)行,如果再try方法里執(zhí)行了記錄鎖定,可能就釋放不了鎖了。在執(zhí)行try之前先檢查是否已經(jīng)有事務(wù)記錄了,如果已經(jīng)存在就不執(zhí)行try。
    冪等,執(zhí)行前先檢查下是否已經(jīng)存在事務(wù)記錄。

  • mq
    保證節(jié)點(diǎn)事務(wù)和消息原子操作,發(fā)給下游,下游也同樣,執(zhí)行任務(wù)返回消息。

  • sega
    事務(wù)1,事務(wù)2,事務(wù)3
    事務(wù)1回滾操作,事務(wù)2回滾操作,事務(wù)3回滾操作
    按個執(zhí)行事務(wù),失敗就執(zhí)行對應(yīng)的回滾操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容