概要結構如下圖。
圖中顯示:Search Index和Read Replicas等系統是Databus的消費者。當主OLTP數據庫發生寫操作時,連接其上的中繼系統會將數據拉到中繼中。簽入在Search Index或是緩存中的Databus消費者客戶端,就會從中繼中拉出數據,並更新索引或緩存。
Databus提供如下功能:
- 來源獨立:Databus支持多種數據來源的變更抓取,包括Oracle和MySQL。Oracle適配器在開源版本中有提供,MySQL適配器將在以后提供。
- 可擴展、高度可用:Databus能擴展到支持數千消費者和事務數據來源,同時保持高度可用性。
- 事務按序提交:Databus能保持來源數據庫中的事務完整性,並按照事務分組和來源的提交順尋交付變更事件。
- 低延遲、支持多種訂閱機制:數據源變更完成后,Databus能在微秒級內將事務提交給消費者。同時,消費者使用Databus中的服務器端過濾功能,可以只獲取自己需要的特定數據。
- 無限回溯:這是Databus最具創新性的組件之一,對消費者支持無限回溯能力。當消費者需要產生數據的完整拷貝時(比如新的搜索索引),它不會對主OLTP數據庫產生任何額外負擔,就可以達成目的。當消費者的數據大大落后於來源數據庫時,也可以使用該功能。
上圖中介紹了Databus系統的構成,包括中繼Relay、bootstrap服務和客戶端庫。Bootstrap服務中包括Bootstrap Producer和Bootstrap Server。快速變化的消費者直接從Relay中取事件。如果一個消費者的數據更新大幅落后,它要的數據就不在Relay的日志中,而是在 Bootstrap Producer里面,提交給它的,將會是自消費者上次處理變更之后的所有數據變更快照。
Databus Relay中繼的功能主要包括:
- 從Databus來源讀取變更行,並在內存緩存內將其序列化為Databus變更事件
- 監聽來自Databus客戶端(包括Bootstrap Producer)的請求,並傳輸新的Databus數據變更事件
Databus客戶端的功能主要包括:
- 檢查Relay上新的數據變更事件,並執行特定業務邏輯的回調
- 如果落后Relay太多,向Bootstrap Server發起查詢
- 新Databus客戶端會向Bootstrap Server發起bootstrap啟動查詢,然后切換到向中繼發起查詢,以完成最新的數據變更事件
- 單一客戶端可以處理整個Databus數據流,或者可以成為消費者集群的一部分,其中每個消費者只處理一部分流數據
Databus Bootstrap Producer只是一種特定的Databus客戶端,它的功能有:
- 檢查中繼上的新數據變更事件
- 將變更存儲在MySQL數據庫中
- MySQL數據庫供Bootstrap和客戶端使用
Databus Bootstrap Server的主要功能,就是監聽來自Databus客戶端的請求,並返回長期回溯數據變更事件。
在LinkedIn,Databus支持的系統有:
- 社會化圖譜索引(Social Graph Index),服務LinkedIn所有圖譜查詢
- 人員搜索索引(People Search Index),支持搜索所有LinkedIn用戶
- 用戶檔案數據(Member Profile)多個冗余的讀取查詢
轉自:http://www.infoq.com/cn/news/2013/03/linkedin-databus