究竟為什麼要引入資料庫中介軟體

2022-06-07 15:24:08 字數 2694 閱讀 9150

不少朋友經常會問我以下問題:

你是不是也有類似的疑問?

然而,「究竟為什麼要引入資料庫中介軟體」卻很少有人問及。 「架構師之路」文章思路,以解決「為什麼」為優先,藉著近期撰寫網際網路分層架構系列文章,講一講這個核心問題:

經過連續分層架構演進,dao層基礎資料服務化通用業務服務化前後端分離之後,乙個業務系統的後端結構如上:

隨著時間的推移,資料量會越來越大,base-service通過dao來訪問db的效能會越來越低需要開始考慮對db進行水平切分,一旦db進行水平切分,原來很多sql可以支援的功能,就需要base-service層來進行特殊處理:

更具體的,對於前台高併發的業務,db水平切分後,有這麼幾類典型的業務場景及應對方案。特別強調一下,此處應對的是「前台」「高併發」「db水平切分」的場景,對於後台的需求,將通過前台與後台分離的架構處理,不在此處討論。

一:partition key上的單行查詢

典型場景:通過uid查詢user

場景特點

解決方案:base-service層通過patition key來進行庫路由

如上圖:

二、非patition key上的單行查詢

典型場景:通過login_name查詢user

場景特點

解決方案1:base-service層訪問所有庫

如上圖:

如上圖:

當有非 patition key的查詢時,先通過login_name查詢uid

再通過patition key進行路由,最終返回一條記錄

解決方案3:基因法

關於「基因法」解決非patition key上的查詢需求詳見《分庫後,非patition key上訪問的多種解決辦法》。

三、patition key上的批量查詢

典型場景:使用者列表uid上的in查詢

場景特點

解決方案1:base-service層訪問所有庫,結果集到base-service合併

解決方案2:base-service分析路由規則,按需訪問

如上圖:

四、非patition key上的誇庫分頁需求

關於分庫後,誇庫分頁的查詢需求,詳見《業界難題,誇庫分頁的四種方案》。

五、其他需求…

當需要進行db水平切分的base-service越來越多以後,此時分層架構會變成下面這個樣子:

底層的複雜性會擴散到各個base-service,所有的base-service都要關注:

這個架構圖是不是看上去很彆扭?如何讓資料的獲取更加高效快捷呢?

資料庫中介軟體的引入,勢在必行。

這是「基於服務端」的資料庫中介軟體架構圖:

這是「基於客戶端」的資料庫中介軟體架構圖:

結論

資料庫水平切分,base-service層獲取db資料過於複雜,成為通用痛點的時候,就應該抽象出資料庫中介軟體,簡化資料獲取過程,提高資料獲取效率,向上游遮蔽底層的複雜性。

任何脫離業務的架構設計,都是耍流氓

「為什麼」比「怎麼樣」更重要。

系統架構中為什麼要引入訊息中介軟體?

感謝博主的分享,系統架構中為什麼要引入訊息中介軟體?在本文的開頭,我們將討論訊息中介軟體的高頻訪問問題,它也將涵蓋mq中介軟體的一些常見技術問題。如果面試官看了你的簡歷中使用mq中介軟體的經歷,可能會有以下問題 在你的公司的生產環境中使用了什麼訊息中介軟體?為什麼要將訊息中介軟體引入系統?引入訊息中...

面試 資料庫 中介軟體

lru是redis唯一支援的 演算法 no eviction 不刪除策略 對於所有的key allkeys lru 刪除最近訪問頻率低的key allkeys random 隨機刪除一部分key 對於設定expire volatile lru 刪除最近訪問頻率低的key volatile rando...

mysql proxy資料庫中介軟體架構

一 mysql proxy簡介 mysql proxy是mysql官方提供的mysql中介軟體服務,上游可接入若干個mysql client,後端可連線若干個mysql server。它使用mysql協議,任何使用mysql client的上游無需修改任何 即可遷移至mysql proxy上。mys...