阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
項(xiàng)目背景
? ?阿里巴巴B2B公司,因?yàn)闃I(yè)務(wù)的特性,賣(mài)家主要集中在國(guó)內(nèi),買(mǎi)家主要集中在國(guó)外,所以衍生出了杭州和美國(guó)異地機(jī)房的需求,同時(shí)為了提升用戶體驗(yàn),整個(gè)機(jī)房的架構(gòu)為雙A,兩邊均可寫(xiě),由此誕生了otter這樣一個(gè)產(chǎn)品。
???otter第一版本可追溯到04~05年,此次外部開(kāi)源的版本為第4版,開(kāi)發(fā)時(shí)間從2011年7月份一直持續(xù)到現(xiàn)在,目前阿里巴巴B2B內(nèi)部的本地/異地機(jī)房的同步需求基本全上了otte4。
目前同步規(guī)模:
?
項(xiàng)目介紹
名稱:otter ['?t?(r)]
譯意: 水獺,數(shù)據(jù)搬運(yùn)工
語(yǔ)言: 純java開(kāi)發(fā)
定位: 基于數(shù)據(jù)庫(kù)增量日志解析,準(zhǔn)實(shí)時(shí)同步到本機(jī)房或跨機(jī)房的mysql/oracle數(shù)據(jù)庫(kù).?
?
工作原理
原理描述:
1. ? 基于Canal開(kāi)源產(chǎn)品,獲取數(shù)據(jù)庫(kù)增量日志數(shù)據(jù)。 什么是Canal, ?請(qǐng)點(diǎn)擊
2. ? 典型管理系統(tǒng)架構(gòu),manager(web管理)+node(工作節(jié)點(diǎn))
? ? ?a. ?manager運(yùn)行時(shí)推送同步配置到node節(jié)點(diǎn)
? ? ?b. ?node節(jié)點(diǎn)將同步狀態(tài)反饋到manager上
3. ?基于zookeeper,解決分布式狀態(tài)調(diào)度的,允許多node節(jié)點(diǎn)之間協(xié)同工作.?
?
什么是canal?
otter之前開(kāi)源的一個(gè)子項(xiàng)目,開(kāi)源鏈接地址:http://github.com/alibaba/canal
?
?
otter能解決什么?
1. ?異構(gòu)庫(kù)同步
? ?a. ?mysql -> ?mysql/oracle. ?(目前開(kāi)源版本只支持mysql增量,目標(biāo)庫(kù)可以是mysql或者oracle,取決于canal的功能)
2. ?單機(jī)房同步 (數(shù)據(jù)庫(kù)之間RTT < 1ms)
? ?a. 數(shù)據(jù)庫(kù)版本升級(jí)
? ?b. 數(shù)據(jù)表遷移
? ?c. 異步二級(jí)索引
3. ?跨機(jī)房同步 (比如阿里巴巴國(guó)際站就是杭州和美國(guó)機(jī)房的數(shù)據(jù)庫(kù)同不,RTT > 200ms,亮點(diǎn))
? ?a. 機(jī)房容災(zāi)
4. ?雙向同步
? ? a. ?避免回環(huán)算法 ?(通用的解決方案,支持大部分關(guān)系型數(shù)據(jù)庫(kù))
? ? b. ?數(shù)據(jù)一致性算法 ? (保證雙A機(jī)房模式下,數(shù)據(jù)保證最終一致性,亮點(diǎn))
5. ?文件同步
? ? a. ?站點(diǎn)鏡像 ?(進(jìn)行數(shù)據(jù)復(fù)制的同時(shí),復(fù)制關(guān)聯(lián)的圖片,比如復(fù)制產(chǎn)品數(shù)據(jù),同時(shí)復(fù)制產(chǎn)品圖片).
?
單機(jī)房復(fù)制示意圖:
說(shuō)明:?
? ?a. ?數(shù)據(jù)on-Fly,盡可能不落地,更快的進(jìn)行數(shù)據(jù)同步. ?(開(kāi)啟node?loadBalancer算法,如果Node節(jié)點(diǎn)S+ETL落在不同的Node上,數(shù)據(jù)會(huì)有個(gè)網(wǎng)絡(luò)傳輸過(guò)程)
? ?b. ?node節(jié)點(diǎn)可以有failover / ?loadBalancer. ?
?
跨機(jī)房復(fù)制示意圖:
說(shuō)明:?
? ?a. ?數(shù)據(jù)涉及網(wǎng)絡(luò)傳輸,S/E/T/L幾個(gè)階段會(huì)分散在2個(gè)或者更多Node節(jié)點(diǎn)上,多個(gè)Node之間通過(guò)zookeeper進(jìn)行協(xié)同工作 ?(一般是Select和Extract在一個(gè)機(jī)房的Node,Transform/Load落在另一個(gè)機(jī)房的Node)
? ?b. ?node節(jié)點(diǎn)可以有failover / ?loadBalancer. ?(每個(gè)機(jī)房的Node節(jié)點(diǎn),都可以是集群,一臺(tái)或者多臺(tái)機(jī)器)
?
?
相關(guān)名詞解釋
?
otter核心model關(guān)系圖
?
?
名詞解釋
- Pipeline:從源端到目標(biāo)端的整個(gè)過(guò)程描述,主要由一些同步映射過(guò)程組成
- Channel:同步通道,單向同步中一個(gè)Pipeline組成,在雙向同步中有兩個(gè)Pipeline組成
- DateMediaPair:根據(jù)業(yè)務(wù)表定義映射關(guān)系,比如源表和目標(biāo)表,字段映射,字段組等
- DateMedia : 抽象的數(shù)據(jù)介質(zhì)概念,可以理解為數(shù)據(jù)表/mq隊(duì)列定義
- DateMediaSource : 抽象的數(shù)據(jù)介質(zhì)源信息,補(bǔ)充描述DateMedia
- ColumnPair : 定義字段映射關(guān)系
- ColumnGroup : 定義字段映射組
- Node : 處理同步過(guò)程的工作節(jié)點(diǎn),對(duì)應(yīng)一個(gè)jvm
otter的S/E/T/L stage階段模型
說(shuō)明:為了更好的支持系統(tǒng)的擴(kuò)展性和靈活性,將整個(gè)同步流程抽象為Select/Extract/Transform/Load,這么4個(gè)階段.
Select階段: 為解決數(shù)據(jù)來(lái)源的差異性,比如接入canal獲取增量數(shù)據(jù),也可以接入其他系統(tǒng)獲取其他數(shù)據(jù)等。
Extract/Transform/Load 階段:類(lèi)似于數(shù)據(jù)倉(cāng)庫(kù)的ETL模型,具體可為數(shù)據(jù)join,數(shù)據(jù)轉(zhuǎn)化,數(shù)據(jù)Load的
?
相關(guān)實(shí)現(xiàn)介紹
- ???Otter調(diào)度模型
- ???Otter數(shù)據(jù)入庫(kù)算法
- ???Otter雙向回環(huán)控制
- ???Otter數(shù)據(jù)一致性
- ???Otter高可用性
- ???Otter擴(kuò)展性?
QuickStart
See the page for quick start:?QuickStart.
AdminGuide
See the page for admin deploy guide :?AdminGuide
?
總結(jié)
以上是生活随笔為你收集整理的阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Flying to the Mars
- 下一篇: 分布式系统中,权限设计实践