中秋國慶一共12天,玩的有點嗨,徹底沒想工做的事情- -。回來趕忙補補。看了一下mycat關於事務的支持狀況,作一下記錄。分佈式
說mycat的事務支持以前,先說說XA協議,即分佈式事務。指的是TM(事務管理器)和RM(資源管理器)之間的接口,定義了一些以ax_,xa_開頭的接口函數。以下:(來自XA規範文檔)函數
從這些函數的定義大體能夠看出XA協議作的工做。整個XA協議主要基於二階段提交的概念。這個概念很好理解,當TM接到一個全局事務請求的時候,TM會把請求告知註冊在它身上的全部RM,當全部RM準備就緒後,再執行commit操做。在這個過程當中,若是某個RMcommit失敗了,那麼TM會進行協調,一能夠回滾其它全部RM上的事務,二是等這個失敗的RM恢復後,從新進行commit。日誌
TM是用日誌來記錄XA事務的狀態的,且日誌必須存儲的很可靠。固然,真個XA協議,就是創建在可靠的TM和RM之上。blog
而mycat的事務支持是弱XA的,事務內的SQL在各自分片上執行而且返回狀態碼,若是某個分片上的返回碼爲error,mycat就認爲本次事務失敗了,此時將會一次回滾事務所涉及到的全部分片。反之,若是全部的分片都返回成功的返回碼,則當AP(應用程序)提交事務的時候,mycat會同時向事務涉及的全部分片發送提交事務的命令。接口
之因此說是弱XA,是由於在二階段提交的工程中,若commit時某個節點出錯了,只能回滾,而不會等其恢復後再次提交。事務
關於XA中特別重要的日誌存儲,mycat將來計劃以zookeeper做爲XA事務的日誌存儲手段,依靠zookeeper的可靠性,從而實現了TM角色的可靠性。資源