Databus簡介

1.背景
在互聯網架構中,數據系統通常分爲真實數據(source-of-truth)系統,作爲基礎數據庫,存儲用戶產生的寫操作;以及衍生數據庫或索引,提供讀取和其他複雜查詢操作。後者常常衍生自主數據存儲,會對其中的數據做轉換,有時還要包括複雜的業務邏輯處理。緩存中的數據也來自主數據存儲,當主數據存儲發生變化,緩存中的數據就需要刷新,或是轉爲無效。這樣架構自然而然的一個問題就是如何保障基礎數據庫和其它數據存儲方的數據一致性。一個想法是雙寫,在有數據進來的時候就同時更新基礎數據庫和衍生數據庫(或緩存),但這種方式如果沒有很強的協議來保證,就還是會有一致性問題,比如說主數據庫寫入成功但是衍生數據庫(或緩存)寫入失敗。另外的一個方案就是隻寫基礎數據庫,其它衍生數據庫(緩存)通過監聽基礎數據庫的變化來進行數據變更,這個方案要求能有一個工具能監聽基礎數據庫的變更並且能夠及時的通知衍生數據庫(緩存)具體的變化,而Databus就是這樣的一個系統。

2.簡介
Databus是一個實時的低延時數據抓取系統。它將數據庫作爲唯一真實數據來源,並將變更從事務或提交日誌中提取出來,然後通知相關的衍生數據庫或緩存。
Databus傳輸層端到端的延遲是微秒級別的,這意味着每臺服務器每秒可以處理數千次數據吞吐變更事件,同時還支持無限回溯能力和豐富的變更訂閱功能,目前從實踐中來看,單個DB寫入QPS達到1.5k就要進行拆庫,而到達2k就會出現比較明顯的主從延遲,而relay雖然要串行解析單個庫的binlog,但是也可以扛到2.2k。下面的圖是大概的結構:
這裏寫圖片描述
上圖展示Search Index、Read Replicas系統是Databus的消費者。當Primary DB發生數據變更的時候,連接其上的中繼系統會將數據拉取到中繼上去。嵌入在Search Index或緩存中的Databus消費者客戶端就會從中繼拉取數據並更新緩存或數據庫。
DataBus提供以下功能:

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

3.簡單架構
這裏寫圖片描述
粗略的來說databus主要模塊是兩個,一個是relay,負責從mysql/oracle拉取變更事件,並存儲到本地的內存buffer;一個是client,負責從relay拉取變更事件,並做業務定製化的處理。
上面的圖片是Databus的大致架構,可以看到包括中繼Relay、Bootstrap服務和客戶端庫三大模塊;其中Bootstrap包括BootStrap Producer和BootStrap Server。快速變化的消費者從relay中拉取數據,但如果一個消費者的數據大幅度落後,relay就不能提供它要的數據,轉而由Bootstrap Producer提供給它自上次處理後變更的所有數據快照。下面來具體的介紹下這幾個模塊的主要功能:
Databus Relay中繼主要功能:

  1. 從Databus來源讀取變更行,並在內存緩存中將其序列化爲DataBus事件。
  2. 監聽來着Databus客戶端(包括Bootstrap)的請求,並傳輸新的Databus變更事件

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

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

Bootstrap Server可以看成一種特定的Databus客戶端,它的功能有:

  1. 監聽中繼數據變革
  2. 將變更存儲到mysql數據庫中
  3. mysql數據庫供Bootstrap和客戶端使用

Databus Bootstrap Server的主要功能,就是監聽來自Databus客戶端的請求,並返回長期回溯數據變更事件。
目前databus的主要應用:1.是主數據庫和衍生數據庫的同步,一般是爲了對主數據庫數據按另外維度進行組織,提供給查詢使用 2.是用來將數據庫數據同步到緩存中,這樣主要是爲了減輕數據庫讀壓力。

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