Databus 分佈式數據庫同步系統

社區wiki主頁:https://github.com/linkedin/Databus/wiki

背景

一個大型分佈式系統往往存在多種的存儲系統,mysql,tair,redis,memcache,hbase等等。一些重要的或者需要事務支持的數據操作,通常都會放到mysql處理。但是,爲了滿足高性能的訪問需求或者做一些服務定製化的查詢,業務上通常又會把mysql的數據再寫到tair或者redis等外部存儲中一份。

以業務將tair作爲mysql的高速緩存爲例,通常業務在代碼中會有這麼一段邏輯,讀取tair,數據不存在,從mysql讀取數據,然後寫入tair。用戶變更mysql,然後會同時刷新tair,或者將tair數據刪除。爲了降低客戶端複雜度並且防止緩存穿透,常會引入MQ進行異步同步,如下圖所示:

image.png

但是無論客戶端同步方式還是MQ方式,其實都會存在數據一致性問題,這些場景,如果沒有一個強一致協議(比如兩階段提交,paxos等)是很難解決掉的。

現在,有了Databus,上面提到的這些一致性問題就都沒有了,並且,那些冗長的雙寫邏輯也可以去掉了。

功能介紹

Databus是一個實時的、可靠的、支持事務的、保持一致性的數據變更抓取系統。 2011年在LinkedIn正式進入生產系統,2013年開源。

Databus通過挖掘數據庫日誌的方式,將數據庫變更實時、可靠的從數據庫拉取出來,業務可以通過定製化client實時獲取變更。

Databus的傳輸層端到端延遲是微秒級的,每臺服務器每秒可以處理數千次數據吞吐變更事件,同時還支持無限回溯能力和豐富的變更訂閱功能。

功能&特性

  • 來源獨立:Databus支持多種數據來源的變更抓取,包括Oracle和MySQL。
  • 可擴展、高度可用:Databus能擴展到支持數千消費者和事務數據來源,同時保持高度可用性。
  • 事務按序提交:Databus能保持來源數據庫中的事務完整性,並按照事務分組和來源的提交順尋交付變更事件。
  • 低延遲、支持多種訂閱機制:數據源變更完成後,Databus能在微秒級內將事務提交給消費者。同時,消費者使用Databus中的服務器端過濾功能,可以只獲取自己需要的特定數據。
  • 無限回溯:這是Databus最具創新性的組件之一,對消費者支持無限回溯能力。當消費者需要產生數據的完整拷貝時(比如新的搜索索引),它不會對數據庫產生任何額外負擔,就可以達成目的。當消費者的數據大大落後於來源數據庫時,也可以使用該功能。

設計

架構設計

Databus概要結構:

image.png

圖中顯示:Search Index和Read Replicas等系統是Databus的消費者。當主數據庫發生寫操作時,連接其上的中繼系統會將數據拉到中繼中。簽入在Search Index或是緩存中的Databus消費者客戶端,就會從中繼中拉出數據,並更新索引或緩存。

系統結構設計

image.png

上圖中介紹了Databus系統的構成,包括中繼Relay、bootstrap服務和客戶端庫。Bootstrap服務中包括Bootstrap Producer和Bootstrap Server。快速變化的消費者直接從Relay中取事件。如果一個消費者的數據更新大幅落後,它要的數據就不在Relay的日誌中,而是在 Bootstrap Producer裏面,提交給它的,將會是自消費者上次處理變更之後的所有數據變更快照。

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

    1. 從Databus來源讀取變更行,並在內存緩存內將其序列化爲Databus變更事件
    2. 監聽來自Databus客戶端(包括Bootstrap Producer)的請求,並傳輸新的Databus數據變更事件
  • Databus客戶端的功能主要包括:

    1. 檢查Relay上新的數據變更事件,並執行特定業務邏輯的回調
    2. 如果落後Relay太多,向Bootstrap Server發起查詢
    3. 新Databus客戶端會向Bootstrap Server發起bootstrap啓動查詢,然後切換到向中繼發起查詢,以完成最新的數據變更事件
    4. 單一客戶端可以處理整個Databus數據流,或者可以成爲消費者集羣的一部分,其中每個消費者只處理一部分流數據
  • Databus Bootstrap Producer的功能有:

    1. 檢查中繼上的新數據變更事件
    2. 將變更存儲在MySQL數據庫中
    3. MySQL數據庫供Bootstrap和客戶端使用
  • Databus Bootstrap Server的主要功能,監聽來自Databus客戶端的請求,並返回長期回溯數據變更事件。

業務應用

Databus在linkedin

在LinkedIn,Databus支持的系統有:

  • 社會化圖譜索引(Social Graph Index),服務LinkedIn所有圖譜查詢
  • 人員搜索索引(People Search Index),支持搜索所有LinkedIn用戶
  • 用戶檔案數據(Member Profile)多個冗餘的讀取查詢

個人介紹:

高廣超:多年一線互聯網研發與架構設計經驗,擅長設計與落地高可用、高性能、可擴展的互聯網架構。

本文首發在 高廣超的簡書博客 轉載請註明!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章