天天看點

一分鐘讀懂MySQL分布式消息的處理

在很多mysql環境中,對于mysql的分布式事物處理一直是個難題,在目前網際網路環境中,大多數應用系統是基于soa的很多複雜接口之間的調用,并且事物之間的處理優先級也是有先後的,是以對于實際入庫的資料而言,不同的系統,對于目前入庫的處理方式是不一樣的,這樣就衍生出了對于訂閱mysql消息的需求。

在公司内部,這套分布式消息系統負責了各個子接口之間資料的銜接,同時肩負後端dw資料倉庫的實時消息計算,多數的rdbms資料,被分解成各種子消息隊列,通過不同的topic被各種消費者訂閱。

一、如何分解消息

後端訂閱程式(基于阿裡巴巴的canal)通過解析不同應用的binlog (mysql線上産生的二進制日志) 通過模拟slave的行為,将binlog順序的訂閱到本地,通過内部解析程式,将binlog events解析成對應的消息,通過metaq 固化解析完成的消息,自定義存放時間,進而讓consumer 自行訂閱到對應的系統,進行相關處理。

一分鐘讀懂MySQL分布式消息的處理

具體roma文檔可以參考我的blog:

二、何時訂閱

通常當支付系統需要做異步分布式事務調用的時候,可以采用roma消息。采用水準拆分db而需要一些統計類的需求的時候(合表) 可以訂閱合并的topics。當需要一個彙總的資料倉庫,執行跨庫join查詢的時候 可以訂閱roma消息。

一分鐘讀懂MySQL分布式消息的處理

上圖中,各類系統通過rpc架構進行異步調用,同時将訂閱到的消息(roma異步消息)進行相處理,将操作類型,操作細節發送給對應子系統,進而實作了操作的異步化(而roma對于前端資料庫日志的實時解析保證了事物消息的實時性)。

三、對于資料倉庫

在我們的系統中,很多核心表被水準拆分成了n份,對于後端實時資料倉庫來說,希望通過合并所有的拆分表,進行多元度的查詢工作 (對job來說,可以通過定期任務抽取水準拆分的表,但是實時性是滞後的)。

在中轉伺服器上,使用java程式直接訂閱roma的消息,拼接成相應的sql在後端dw上直接執行。

一分鐘讀懂MySQL分布式消息的處理

通過訂閱同步消息,将前端更新實時同步到後端的資料倉庫,進而達到實時分析的需求。後期結合binlog server的改進還可以進行所有系統的binlog 集中化分層訂閱。

四、對于實時分析平台

同樣可以訂閱前端rdbms操作到後端大資料平台,通過流式計算實作秒級的分析。

一分鐘讀懂MySQL分布式消息的處理

後期需要改進的:

roma的訂閱能力,對于前端log并發解析的粒度

智能的存儲政策 動态調整沒有被訂閱消息的儲存時間

作者介紹  louis liu(www.vmcd.org)

平安健康網際網路資料庫架構師。

主要負責核心rdbms、分布式資料庫、分布式緩存的架構設計及運維工作。

<b></b>

<b>本文來自雲栖社群合作夥伴"dbaplus",原文釋出時間:2016-04-15</b>