利用 Gravity 提升資料庫寫入效率

懶惰鬼的資料庫系統強化手段

Photo by Tamanna Rumee on Unsplash

在我們過往的客戶情境裡,大多數採用 CQRS、讀寫分離模式時,主要都是用於提高資料庫查詢能力。由於無論是在數位轉型還是微服務架構的需求上,讓資料得以被大量且快速發佈到各個資料節點以供大量讀取,這確實是主要訴求,因此我們寬橋(Brobridge)圍繞在 CQRS 上所發展的資料管理工具 Gravity,在解決問題上也更多是被拿來解決巨量的查詢問題。

有趣的是,在過往案例中的某些場景下,我們的客戶突發奇想利用 Gravity 的資料庫整合能力,搭配實現資料庫寫入的負載分流機制。在風險最低、最小變動、無痛的前提下,讓應用程式寫入資料庫效率大幅提高,得到更好的反應速度,也能避免大量的寫入工作衝擊既有資料庫。

由於這種做法不涉及資料庫系統本身的改動,無需架設和管理複雜的資料庫叢集,也無需為了寫入需求而強迫應用程式放棄舊有的資料庫系統。

幫既有資料庫實現寫入負載分流機制

利用多個資料庫處理分散處理第一線寫入需求

在不搭建複雜的資料庫叢集,且不修改任何程式碼的情況下,實務上可以直接搭建多個資料庫節點擋在第一線,用於處理寫入工作的負載分流,甚至可以搭配負載平衡解決方案(如:HAProxy)直接實現負載平衡。然後利用 Gravity 實現合併式複寫(Merge Replication),將多個前端資料庫的資料合併,再陸續抄寫匯流到主要的資料庫之中,以保持整個資料的完整性。

對於應用程式來說,並沒有改變寫入資料庫的方法,而對既有資料庫系統來說,也沒有變更設定和叢集架構,只是單純地增加一層輸入處理架構做為保護,可以說實作上非常容易。

Gravity 支援多種資料庫,包括常見的 MySQL、PostgreSQL、MSSQL、MongoDB 及 Oracle 等,可以完全滿足各類系統及開發人員習慣的資料庫需求。

資料回歸既有資料庫的即時性

因為採用了 CDC 等技術,所以 Gravity 會監控前端資料庫的資料變更(成功的資料變更操作才會觸發事件),即時的進行資料抄寫和複製。理論上,只要既有資料庫的批次寫入速度夠快,可以得到相當即時的同步效果。

註:Gravity 會在前端資料庫資料更新時,即時的抄寫資料,而且在寫入既有資料庫的工作中,會使用 Bulk Insert/Upsert 進行寫入的優化。理論上,無論在什麼類型的資料庫系統,批次寫入的表現總是比單筆寫入好,視情況寫入效率可提升達一倍至數倍不等,一些場景下甚至十幾至二十倍的表現。

導入 Gravity 的其他好處?

想要讓資料抄寫到不同類型的資料庫嗎?想快速做更多的副本、更彈性的建立查詢快取嗎?想保護既有資料庫系統不要被壓垮嗎?欲知更多 Brobridge Gravity 的好處和功能,歡迎與我們寬橋(Brobridge)聯絡。

--

--