LinkedIn開源低延時(shí)變化數(shù)據(jù)捕獲系統(tǒng)Databus
LinkedIn于2月26日開源了其低延時(shí)變化數(shù)據(jù)捕獲系統(tǒng)Databus,該系統(tǒng)可以在MySQL以及Oracle數(shù)據(jù)源上捕獲數(shù)據(jù),當(dāng)下LinkedIn只開源了Oracle上的連接器。Databus作為L(zhǎng)inkedIn生態(tài)系統(tǒng)中的一致性保障組件,在低延時(shí)的情況下仍然具有高有效性;而其最大的特點(diǎn)莫過于無限制lookback能力及豐富的subscription功能。
以下為L(zhǎng)inkedIn上Databus簡(jiǎn)述譯文:
何為Databus
LinkedIn擁有一個(gè)針對(duì)數(shù)據(jù)儲(chǔ)存和服務(wù)系統(tǒng)的多樣化生態(tài)系統(tǒng)。首要的OLTP數(shù)據(jù)存儲(chǔ)是針對(duì)于寫和讀操作開發(fā)。其它的專業(yè)系統(tǒng)則聚焦于復(fù)雜查詢以及通過緩存對(duì)查詢進(jìn)行加速。舉個(gè)例子:通過Search Index系統(tǒng)來服務(wù)搜索查詢,這會(huì)需要系統(tǒng)不間斷給主數(shù)據(jù)庫(kù)數(shù)據(jù)做索引。
這將導(dǎo)致對(duì)可靠性的特殊需求,事務(wù)一致性需求將貫穿整個(gè)系統(tǒng) —— 從主數(shù)據(jù)源中捕獲變化數(shù)據(jù)并發(fā)送給派生數(shù)據(jù)系統(tǒng)。針對(duì)這個(gè)需求,LinkedIn建立了Databus,添為L(zhǎng)inkedIn數(shù)據(jù)處理管道的重要組成部分。Databus傳輸層實(shí)現(xiàn)了毫秒級(jí)終端到終端的數(shù)據(jù)傳輸,在具備無限制的lookback(還原)能力及豐富subscription(截取)的功能同時(shí),還保障了單服務(wù)器每秒數(shù)以萬計(jì)的改變事件(change event)。

如上圖所述,類似于Search Index及Read Replica這些作為Databus的Consumer(類節(jié)點(diǎn))使用的將是Client Library(客戶端庫(kù))。當(dāng)對(duì)一個(gè)主OLTP數(shù)據(jù)庫(kù)做寫操作時(shí),連接了這個(gè)數(shù)據(jù)庫(kù)的Relay們將會(huì)把改變存入Relay中;Databus這些被嵌入內(nèi)存或者索引的Consumer將會(huì)把它從Relay或Bootstrap(引導(dǎo)程序)中取出,并且根據(jù)情況修改索引或者緩存,這就做到了根據(jù)源數(shù)據(jù)庫(kù)的狀態(tài)實(shí)時(shí)的更新索引。
Databus工作原理簡(jiǎn)述
Databus重要特性如下:
數(shù)據(jù)源獨(dú)立:Databus支持從多樣的數(shù)據(jù)源中捕捉變化數(shù)據(jù),包括Oracle及MySQL。Oracle轉(zhuǎn)接器已經(jīng)被開源,不久后也將會(huì)開源MySQL轉(zhuǎn)接器。
可擴(kuò)展和高有效性:在保證高有效性的同時(shí),Databus可以擴(kuò)展到上萬個(gè)Consumer和事務(wù)型源數(shù)據(jù)庫(kù)上。
事務(wù)有序的進(jìn)行交付:Databus為源數(shù)據(jù)庫(kù)保存了事務(wù)保障,并且根據(jù)源提交順序分組的對(duì)改變事務(wù)進(jìn)行交付。
低延時(shí)以及豐富的subscription功能:一旦數(shù)據(jù)源發(fā)生改變,Databus可以在幾毫秒內(nèi)將事務(wù)交付到Consumer。Consumer同樣可以使用Databus服務(wù)器端的篩選對(duì)數(shù)據(jù)流的指定部分進(jìn)行檢索。
無限制的lookback:Databus中最革新的部分就是Consumer可以無限制的lookback。Consumer對(duì)完整數(shù)據(jù)做拷貝時(shí)(比如說一個(gè)新的搜索索引)不會(huì)給主OLTP數(shù)據(jù)庫(kù)帶來額外的負(fù)載,這一點(diǎn)在Consumer性能大幅度下降時(shí)同樣會(huì)有所幫助。

如上圖所示,Databus系統(tǒng)由Relay、Bootstrap Service和Client Library組成。Relay從源數(shù)據(jù)庫(kù)中捕獲改變內(nèi)容,并將事件儲(chǔ)存在一個(gè)高性能的日志存儲(chǔ)中。Bootstrap Service會(huì)通過Relay改變流申請(qǐng)為源數(shù)據(jù)庫(kù)儲(chǔ)存一個(gè)流動(dòng)的快照。應(yīng)用程序使用Databus Client Library從Relay或者Bootstrap中抽取改變流,并且通過Consumer(實(shí)現(xiàn)了庫(kù)內(nèi)定義的回調(diào)API)對(duì)改變事件進(jìn)行處理。
快速的從Databus Relay中轉(zhuǎn)移Consumer需要的檢索事件。如果一個(gè)Consumer的性能下降到它所請(qǐng)求的事件已經(jīng)不再保存在Relay的日志里,這個(gè)Consumer需要交付一個(gè)快照 —— 保存了該Consumer上一次處理完成至今所發(fā)生的改變合集;如果一個(gè)新的(沒有之前版本數(shù)據(jù)集)Consumer建立,這樣新加入的Consumer可以快速的保持一致。































