MySQL數(shù)據(jù)庫中間件如何實(shí)現(xiàn)分布式事務(wù)
問題描述
假設(shè)我有兩個(gè)MySQL數(shù)據(jù)庫節(jié)點(diǎn),在這兩個(gè)節(jié)點(diǎn)前面有一個(gè)數(shù)據(jù)庫中間件,應(yīng)用通過數(shù)據(jù)庫中間件來使用后面的兩個(gè)MySQL節(jié)點(diǎn), 結(jié)構(gòu)如下圖所示:

當(dāng)應(yīng)用通過中間件執(zhí)行一個(gè)事務(wù)時(shí),這個(gè)事務(wù)需要由中間件轉(zhuǎn)發(fā)給兩個(gè)MySQL節(jié)點(diǎn),于是在中間件這一層,原本普通的事務(wù)現(xiàn)在升級(jí)成了跨越兩個(gè)MySQL節(jié)點(diǎn)的分布式事務(wù)。對(duì)于應(yīng)用程序來說,應(yīng)用程序希望這個(gè)事務(wù)要么都被兩個(gè)MySQL節(jié)點(diǎn)執(zhí)行成功,要么都不成功。
當(dāng)應(yīng)用程序begin了事務(wù),執(zhí)行一系列SQL語句后,應(yīng)用程序進(jìn)行commit,此時(shí)數(shù)據(jù)庫中間件會(huì)分別向兩個(gè)MySQL節(jié)點(diǎn)發(fā)送commit命令,假設(shè)兩個(gè)MySQL節(jié)點(diǎn)都接收到了commit命令,并成功提交,那么事務(wù)執(zhí)行成功。如果其中一個(gè)節(jié)點(diǎn)commit成功,而另外一個(gè)節(jié)點(diǎn)由于一些原因無法執(zhí)行commit(可能網(wǎng)絡(luò)斷開,或者M(jìn)ySQL數(shù)據(jù)庫出現(xiàn)錯(cuò)誤),又由于已經(jīng)commit的事務(wù)無法rollback,所以此時(shí)兩個(gè)MySQL節(jié)點(diǎn)就出現(xiàn)了數(shù)據(jù)不一致的情況。
我的問題是:目前是否有上述問題的解決方法或解決思路,先謝謝了
問題解答
回答1:xa
事務(wù)資源預(yù)分配
業(yè)務(wù)原子操作
相關(guān)文章:
1. javascript - sublime快鍵鍵問題2. javascript - immutable配合react提升性能?3. Apache 已經(jīng)把網(wǎng)站根目錄的改為allow from all了,但是服務(wù)器還是不能訪問?4. css - 寫頁面遇到個(gè)布局問題,求大佬們幫解答,在線等,急!~5. javascript - 移動(dòng)端上不能實(shí)現(xiàn)拖拽布局嗎?6. phpstudy8.1支持win11系統(tǒng)嗎?7. 實(shí)現(xiàn)bing搜索工具urlAPI提交8. 配置Apache時(shí),添加對(duì)PHP的支持時(shí)語法錯(cuò)誤9. javascript - nodejs關(guān)于進(jìn)程間發(fā)送句柄的一點(diǎn)疑問10. vue.js - Vue 如何像Angular.js watch 一樣監(jiān)聽數(shù)據(jù)變化

網(wǎng)公網(wǎng)安備