SpringMVC原始碼分析之一個請求的處理
官網:https://github.com/alibaba/canal
什麼是canal
阿里巴巴B2B公司,因為業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,從2010年開始,阿里系公司開始逐步的嘗試基於資料庫的日誌解析,獲取增量變更進行同步,由此衍生出了增量訂閱&消費的業務。
canal是用java開發的基於資料庫增量日誌解析,提供增量資料訂閱&消費的中介軟體。目前,canal主要支援了MySQL的binlog解析,解析完成後才利用canal client 用來處理獲得的相關資料。(資料庫同步需要阿里的otter中介軟體,基於canal)。
這裡我們可以簡單地把canal理解為一個用來同步增量資料的一個工具:
canal通過binlog同步拿到變更資料,再發送到儲存目的地,比如MySQL,Kafka,Elastic Search等多源同步。
canal使用場景
場景1:原始場景, 阿里otter中介軟體的一部分
場景2:更新快取
場景3:抓取業務資料新增變化表,用於製作拉鍊表。( 拉鍊表:記錄每條資訊的生命週期,一旦一條記錄的生命週期結束,就要重新開始一條新的記錄,並把當前日期放入生效的開始日期 )
場景4:抓取業務表的新增變化資料,用於製作實時統計。
canal執行原理
複製過程分成三步:
Master主庫將改變記錄,寫到二進位制日誌(binary log)中
Slave從庫向mysql master傳送dump協議,將master主庫的binary log events拷貝到它的中繼日誌(relay log);
Slave從庫讀取並重做中繼日誌中的事件,將改變的資料同步到自己的資料庫。
canal的工作原理很簡單,就是把自己偽裝成slave,假裝從master複製資料。