LinkedIn於2月26日開源了其低延時變化數據捕獲系統Databus,該系統可以在MySQL以及Oracle數據 源上捕獲數據,當下LinkedIn只開源了Oracle上的連接器。Databus作為LinkedIn生態系統中的一致性保障組件,在低延時的情況下 仍然具有高有效性;而其最大的特點莫過於無限制lookback能力及豐富的subscription功能。
以下為LinkedIn上Databus簡述譯文:
何為Databus
LinkedIn擁有一個針對數據儲存和服務系統的多樣化生態系統。首要的OLTP數據存儲是針對於寫和讀操作開發。其它的專業系統則聚焦於復雜查詢以及通過緩存對查詢進行加速。舉個例子:通過Search Index系統來服務搜索查詢,這會需要系統不間斷給主數據庫數據做索引。
這將導致對可靠性的特殊需求,事務一致性需求將貫穿整個系統 —— 從主數據源中捕獲變化數據並發送給派生數據系統。針對這個需求,LinkedIn建立了Databus,添為LinkedIn數據處理管道的重要組成部 分。Databus傳輸層實現了毫秒級終端到終端的數據傳輸,在具備無限制的lookback(還原)能力及豐富subscription(截取)的功能 同時,還保障了單服務器每秒數以萬計的改變事件(change event)。
如上圖所述,類似於Search Index及Read Replica這些作為Databus的Consumer(類節點)使用的將是Client Library(客戶端庫)。當對一個主OLTP數據庫做寫操作時,連接了這個數據庫的Relay們將會把改變存入Relay中;Databus這些被嵌 入內存或者索引的Consumer將會把它從Relay或Bootstrap(引導程序)中取出,並且根據情況修改索引或者緩存,這就做到了根據源數據庫 的狀態實時的更新索引。
Databus工作原理簡述
Databus重要特性如下:
如上圖所示,Databus系統由Relay、Bootstrap Service和Client Library組成。Relay從源數據庫中捕獲改變內容,並將事件儲存在一個高性能的日志存儲中。Bootstrap Service會通過Relay改變流申請為源數據庫儲存一個流動的快照。應用程序使用Databus Client Library從Relay或者Bootstrap中抽取改變流,並且通過Consumer(實現了庫內定義的回調API)對改變事件進行處理。
快速的從Databus Relay中轉移Consumer需要的檢索事件。如果一個Consumer的性能下降到它所請求的事件已經不再保存在Relay的日志裡,這個 Consumer需要交付一個快照 —— 保存了該Consumer上一次處理完成至今所發生的改變合集;如果一個新的(沒有之前版本數據集)Consumer建立,這樣新加入的Consumer 可以快速的保持一致。
Databus相關下載
Databus能在LinkedIn服役多年其獨到之處無需質疑,現LinkedIn將其開源並廣邀感興趣的開發人員參與。