2016-07-04 33 views
0

我正在開發一個分佈式數據庫中間件,它打算作爲MySQL的代理。當談到跨多個MySQL的事務時,我發現很難讓多個MySQL作爲整體提交或回滾。這裏是這樣的情況:如何執行作爲MySQL代理的分佈式事務

說有2個mysql實例是由我的數據庫中間件代理的,在應用程序端,當我想對兩個mysql實例執行「prepare-commit」操作時,首先,我發送向中間件「準備」請求,中間件將請求轉發給2個mysql實例,然後通過中間件執行一些sql,最後,當我向中間件發送「提交」請求時,中間件會將請求轉發給2個mysql實例,這裏是讓我困惑的事情:

如果發送到第一個mysql實例的「提交」請求成功執行,而發送到第二個實例的「提交」請求以某種方式失敗,如我所知,如果一個事務已經被提交,它不能被回滾,但是這個h因爲導致2個mysql實例處於不一致的狀態。

我想知道如何處理這個問題,任何幫助將不勝感激。

回答

0

一個承諾,一個失敗,協調員應記錄事務更改,並將成功返回給用戶。一旦失敗的實例恢復,從協調器檢索日誌並確保一致性。就像mysql作爲協調者的binlog一樣,你的中間件應該承擔相同的責任。

MySQL外部XA也是協調器是客戶端的分佈式事務的一個例子。

扳手選擇2PC + Paxos來減少一個節點故障的可能性。

相關問題