項目背景
阿里巴巴B2B公司,因爲業務的特性,賣家主要集中在國內,買家主要集中在國外,所以衍生出了杭州和美國異地機房的需求,同時爲了提升用戶體驗,整個機房的架構爲雙A,兩邊均可寫,由此誕生了otter這樣一個產品。
otter第一版本可追溯到04~05年,此次外部開源的版本爲第4版,開發時間從2011年7月份一直持續到現在,目前阿里巴巴B2B內部的本地/異地機房的同步需求基本全上了otte4。
目前同步規模:
- 同步數據量6億
- 文件同步1.5TB(2000w張圖片)
- 涉及200+個數據庫實例之間的同步
- 80+臺機器的集羣規模
項目介紹
名稱:otter ['ɒtə(r)]
譯意: 水獺,數據搬運工
語言: 純java開發
定位: 基於數據庫增量日誌解析,準實時同步到本機房或跨機房的mysql/oracle數據庫.
工作原理
原理描述:
1. 基於Canal開源產品,獲取數據庫增量日誌數據。 什麼是Canal, 請點擊
2. 典型管理系統架構,manager(web管理)+node(工作節點)
a. manager運行時推送同步配置到node節點
b. node節點將同步狀態反饋到manager上
3. 基於zookeeper,解決分佈式狀態調度的,允許多node節點之間協同工作.
什麼是canal?
otter之前開源的一個子項目,開源鏈接地址:http://github.com/alibaba/canal
otter能解決什麼?
1. 異構庫同步
a. mysql -> mysql/oracle. (目前開源版本只支持mysql增量,目標庫可以是mysql或者oracle,取決於canal的功能)
2. 單機房同步 (數據庫之間RTT < 1ms)
a. 數據庫版本升級
b. 數據表遷移
c. 異步二級索引
3. 跨機房同步 (比如阿里巴巴國際站就是杭州和美國機房的數據庫同不,RTT > 200ms,亮點)
a. 機房容災
4. 雙向同步
a. 避免迴環算法 (通用的解決方案,支持大部分關係型數據庫)
b. 數據一致性算法 (保證雙A機房模式下,數據保證最終一致性,亮點)
5. 文件同步
a. 站點鏡像 (進行數據複製的同時,複製關聯的圖片,比如複製產品數據,同時複製產品圖片).
單機房複製示意圖:
說明:
a. 數據on-Fly,儘可能不落地,更快的進行數據同步. (開啓node loadBalancer算法,如果Node節點S+ETL落在不同的Node上,數據會有個網絡傳輸過程)
b. node節點可以有failover / loadBalancer.
跨機房複製示意圖:
說明:
a. 數據涉及網絡傳輸,S/E/T/L幾個階段會分散在2個或者更多Node節點上,多個Node之間通過zookeeper進行協同工作 (一般是Select和Extract在一個機房的Node,Transform/Load落在另一個機房的Node)
b. node節點可以有failover / loadBalancer. (每個機房的Node節點,都可以是集羣,一臺或者多臺機器)
相關名詞解釋
otter核心model關係圖
名詞解釋
- Pipeline:從源端到目標端的整個過程描述,主要由一些同步映射過程組成
- Channel:同步通道,單向同步中一個Pipeline組成,在雙向同步中有兩個Pipeline組成
- DateMediaPair:根據業務表定義映射關係,比如源表和目標表,字段映射,字段組等
- DateMedia : 抽象的數據介質概念,可以理解爲數據表/mq隊列定義
- DateMediaSource : 抽象的數據介質源信息,補充描述DateMedia
- ColumnPair : 定義字段映射關係
- ColumnGroup : 定義字段映射組
- Node : 處理同步過程的工作節點,對應一個jvm
otter的S/E/T/L stage階段模型
說明:爲了更好的支持系統的擴展性和靈活性,將整個同步流程抽象爲Select/Extract/Transform/Load,這麼4個階段.
Select階段: 爲解決數據來源的差異性,比如接入canal獲取增量數據,也可以接入其他系統獲取其他數據等。
Extract/Transform/Load 階段:類似於數據倉庫的ETL模型,具體可爲數據join,數據轉化,數據Load的
相關實現介紹
QuickStart
See the page for quick start: QuickStart.
AdminGuide
See the page for admin deploy guide : AdminGuide