Databus

系統(tǒng)如果要應(yīng)付大規(guī)模的請(qǐng)求,一條必經(jīng)之路就是數(shù)據(jù)庫的分割,單服務(wù)器的性能早晚都會(huì)成為負(fù)載的短板。而數(shù)據(jù)庫分割,通常有Master/Salve或者集群Cluster的方式,這些方式通常都是基于同種類型的數(shù)據(jù)。對(duì)于一個(gè)龐大的多類型數(shù)據(jù)庫的系統(tǒng),在不同的數(shù)據(jù)庫之間(甚至是不同地理位置的機(jī)房間)保持?jǐn)?shù)據(jù)的同步,需要更復(fù)雜的解決方案。LinkedIn良心開源了內(nèi)部的一個(gè)項(xiàng)目Databus,正是解決這個(gè)問題的一套實(shí)時(shí)低延遲數(shù)據(jù)同步系統(tǒng)。

Databus采用的是數(shù)據(jù)庫日志挖掘的方式,這種方式最大的好處是能最大限度的保持一致性,而且具有最有的性能,但是缺點(diǎn)就是實(shí)現(xiàn)起來極為困難。因?yàn)镺racle和MySQL這樣的數(shù)據(jù)庫有自己特有的私有交易日志格式以及復(fù)制冗余解決方案,每次版本升級(jí)之后可能都會(huì)導(dǎo)致日志挖掘的代碼失敗,需要持續(xù)的保持升級(jí)。

當(dāng)然以LinkedIn的技術(shù)實(shí)力,他們還是解決了那些問題。Databus的傳輸層端到端延遲是微秒級(jí)的,每臺(tái)服務(wù)器每秒可以處理數(shù)千次數(shù)據(jù)吞吐變更事件,同時(shí)還支持無限回溯能力和豐富的變更訂閱功能。

Databus具有如下特性:

  • 來源獨(dú)立:Databus支持多種數(shù)據(jù)來源的變更抓取,包括Oracle和MySQL。

  • 可擴(kuò)展、高度可用:Databus能擴(kuò)展到支持?jǐn)?shù)千消費(fèi)者和事務(wù)數(shù)據(jù)來源,同時(shí)保持高度可用性。

  • 事務(wù)按序提交:Databus能保持來源數(shù)據(jù)庫中的事務(wù)完整性,并按照事務(wù)分組和來源的提交順尋交付變更事件。

  • 低延遲、支持多種訂閱機(jī)制:數(shù)據(jù)源變更完成后,Databus能在微秒級(jí)內(nèi)將事務(wù)提交給消費(fèi)者。同時(shí),消費(fèi)者使用Databus中的服務(wù)器端過濾功能,可以只獲取自己需要的特定數(shù)據(jù)。

  • 無限回溯:這是Databus最具創(chuàng)新性的組件之一,對(duì)消費(fèi)者支持無限回溯能力。當(dāng)消費(fèi)者需要產(chǎn)生數(shù)據(jù)的完整拷貝時(shí)(比如新的搜索索引),它不會(huì)對(duì)主OLTP數(shù)據(jù)庫產(chǎn)生任何額外負(fù)擔(dān),就可以達(dá)成目的。當(dāng)消費(fèi)者的數(shù)據(jù)大大落后于來源數(shù)據(jù)庫時(shí),也可以使用該功能。

Databus的系統(tǒng)構(gòu)成

Databus由Databus Relays(中繼)和Databus Client(客戶端):

Databus Relay中繼的功能主要包括:

  1. 從Databus來源讀取變更行,并在內(nèi)存緩存內(nèi)將其序列化為Databus變更事件;
  2. 監(jiān)聽來自Databus客戶端(包括Bootstrap Producer)的請(qǐng)求,并傳輸新的Databus數(shù)據(jù)變更事件。

Databus客戶端的功能主要包括:

  1. 檢查Relay上新的數(shù)據(jù)變更事件,并執(zhí)行特定業(yè)務(wù)邏輯的回調(diào);
  2. 如果落后Relay太多,向Bootstrap Server發(fā)起查詢;
  3. 新Databus客戶端會(huì)向Bootstrap Server發(fā)起bootstrap啟動(dòng)查詢,然后切換到向中繼發(fā)起查詢,以完成最新的數(shù)據(jù)變更事件;
  4. 單一客戶端可以處理整個(gè)Databus數(shù)據(jù)流,或者可以成為消費(fèi)者集群的一部分,其中每個(gè)消費(fèi)者只處理一部分流數(shù)據(jù)。

最近一直在研究這個(gè)項(xiàng)目,希望能應(yīng)用在整個(gè)系統(tǒng)的架構(gòu)中,對(duì)于重要數(shù)據(jù)在跨系統(tǒng)中保持自動(dòng)同步,這樣可以大大減少代碼層面不同系統(tǒng)中的數(shù)據(jù)API的調(diào)用,簡(jiǎn)化IT的工作量。

對(duì)Databus項(xiàng)目感興趣的同學(xué),可以去Databus在Github上的頁面查看更多信息。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容