選單

微服務架構下,解決資料庫跨庫查詢的一些思路

前言

在服務做微服務改造後,原先單庫 查詢已經不能滿足要求,每個拆分的微服務對應一個數據庫例項,而且部署在不同的伺服器上,那麼解決“跨庫查詢”就勢在必行了。

微服務架構下,解決資料庫跨庫查詢的一些思路

以筆者實戰經歷來看,以下幾個思路僅供參考。

表字段冗餘

想必大家已經很熟悉,幾乎每天都會打交道,不用多講。

需要指出的是

欄位不能太多,建議控制在 2-4 個左右。否則會出現資料更新不一致問題,一旦冗餘欄位有改動,極容易產生髒資料

解決思路

建立同步機制,必要時採取人工補償措施。

所以,合理的欄位冗餘是潤滑劑,減少 關聯查詢,讓資料庫執行效能更高更快。

聚合服務封裝查詢

聚合服務

簡單來說,就是把不同服務的資料統一組裝在一個新的服務裡做聚合,對外提供統一入口 介面查詢。

筆者曾經開發新聞報表查詢介面時,需要用到使用者,新聞、使用者標籤、登入記錄等資料。但是使用者、新聞、登入記錄在不同的資料庫,而且還不在同一臺伺服器上。

經筆者分析,把程式碼寫在使用者微服務或者新聞微服務都不合適,最後只能自己單獨寫了一個聚合服務來解決跨查詢資料問題。

聚合服務的資料組裝是以 API 介面呼叫來實現,一般不建議直連資料庫連表查詢。

這樣做的好處是減少服務間呼叫次數以及查詢庫表壓力,在實際的業務開發中,我們經常碰到類似的需求,而聚合服務不失為一種較徹底的服務解耦實現方式。

表檢視查詢

如果涉及到不同資料庫表之間的 查詢,可以在其中某一資料庫的表上建立檢視()關係,這種方式非常高效,只需要開發一個簡單介面對外提供服務就可以了,而且省去聚合服務帶來呼叫、查詢、聚合的複雜性。

前提條件

資料庫需要部署在同一臺伺服器上

資料庫賬戶密碼必須相同,也就是在同一個 下

另外表檢視查詢這種方式,是一種緊耦合的設計方式,不利於程式擴充套件,除非你很確定將來業務變動不大,可以考慮使用。以筆者經驗來看,不適合大規模使用。

多資料來源查詢

這種方式是一種比較技術化的思路,簡單來說就是一個微服務配置多個數據庫源(),進行資料來源來回切換進行庫表查詢,以達到獲取不同資料的目的。

實現思路

利用

利用 的 動態切換資料來源

利用 的依賴注入方式管理 資料來源物件

具體實現方式,網上例子很多很成熟的實現方案。

分庫分表:使用資料庫中介軟體

Sharding-Shpere

想必做過分庫分表的同學對他一定不陌生,其出身來至當當開源專案 。非常優秀的跨庫查詢解決方案,目前在京東內部已經廣泛使用。 創始人張亮已加入京東, 還在不停的迭代,目前更名為 ,已經入Apache頂級專案,進行孵化,非常看好它

高可用架構圖

微服務架構下,解決資料庫跨庫查詢的一些思路

官網傳送門

shardingsphere

Mycat

一個徹底開源的,面向企業應用開發的大資料庫叢集,支援事務、、可以替代 的加強版資料庫;一個可以視為 叢集的企業級資料庫,用來替代昂貴的 叢集;一個融合記憶體快取技術、 技術、 大資料的新型 ;結合傳統資料庫和新型分散式資料倉庫的新一代企業級資料庫產品;一個新穎的資料庫中介軟體產品。

高可用架構圖

微服務架構下,解決資料庫跨庫查詢的一些思路

Mycat關鍵特性

遵守 原生協議,跨語言,跨平臺,跨資料庫的通用中介軟體代理。

支援單庫內部任意 ,支援跨庫 表 ,甚至基於 的多表 。

支援透過全域性表, 關係的分片策略,實現了高效的多表 查詢。

從 特性來說,其天生就支援分庫分表以及跨庫查詢,具體不多說,有興趣的同學,可以去官網瞭解 的原理。