分布式數據庫中間件DDM的實現原理
作為數據庫中間件,分布式數據庫中間件DDM將底層數據庫存儲引擎以集群方式管理起來,用戶使用非常方便。應用程序不需要關心具體有多少分片。類似操作單機數據庫,用戶通過DDM管理控制臺進行數據庫運維,使用JDBC等驅動服務或SQL客戶端連接數據庫,進行數據讀寫。
DDM服務的業務架構圖示
分片是解決數據庫存儲容量限制的直接途徑。分片包括垂直分片與水平分片兩種方式。
垂直分片
垂直分片又叫縱向分割,即以邏輯表為單位,把原有數據庫切分成多個數據庫。切分後不同的表存儲在不同的數據庫上。
垂直分片與業務架構設計有密切的聯系。比如從業務領域對系統進行架構優化,分成多個子業務系統,各個子業務系統耦合度較低。子業務系統間以接口方式進行數據通信和數據交換。垂直拆分後業務清晰,拆分規則明確,系統之間容易整合與擴展。一般用於數據庫上層架構設計。
垂直分片示意圖
水平分片
水平分片又叫橫向分割,即以邏輯表中的數據行記錄為單位,把原有邏輯數據庫切分成多個物理數據庫分片,表數據記錄分布存儲在各個分片上。
水平分片主要用業務架構無法繼續細分,而數據庫中單張表數據量太大,查詢性能下降的場景。通過水平分片,即解決單庫容量問題,同時提高並發查詢性能。
水平分片示意圖
DDM實現了自動水平分片,應用無需關心某個數據該存儲在哪一塊分片上。對邏輯表水平分片需要依據一定的分片規則,例如一個訂單跟蹤系統(見上圖),我們選取訂單號(OrderId)作為拆分鍵,分別對“訂單流水表”、“訂單詳情表”以及“物流跟蹤表”進行水平拆分,拆分規則為對鍵值Hash後求模,則分片計算規則如下:
H(Key(OrderId)) = Hash(Key(OrderId))%N
其中,N表示一共有N個數據分片,H(Key(OrderId))表示該訂單經過訂單號Hash並求模後存儲的分片編號。
分片後數據存儲示意圖
路由分發
路由分發與水平分片同為DDM的基礎功能。在分布式數據庫中,路由的作用即將SQL語句進行解析,並轉發到正確的分片上,保證SQL執行後得到正確的結果,並且節約QPS資源。例如:訂單支付系統包含了shard0、shard1、shard2三個分片,訂單號2017010112345678的訂單數據存儲在shard0分片上,則應該將以下語句路由分發到shard0分片上執行。
select Customer, OrderStatus, CreateDate from Order
where OrderId = ‘2017010112345678‘;
如果同時路由到shard0、shard1、shard2三個分片,會造成多余的查詢,浪費資源;如果路由到shard1、shard2分片,則得不到正確的返回結果。
DDM對單張表的路由解析流程如下:
單張表的路由解析流程
讀寫分離
數據庫中對計算和緩存資源消耗較多的往往是密集或復雜的SQL查詢。當系統資源被查詢語句消耗,反過來會影響數據寫入操作,進而導致數據庫整體性能下降,響應緩慢。因此,當數據庫CPU和內存資源占用居高不下,且讀寫比例較高時,可以為數據庫添加只讀實例。
添加只讀實例的作用有以下:
1、將查詢非事務性查詢SQL路由到只讀實例中執行,主實例上執行事務性SQL,在很大程度上緩解主實例上的S鎖與X鎖的競爭。
2、對只讀實例上的表可配置不提供事務支持的數據庫引擎,進而提升查詢效率。
3、增加只讀實例,也相當於數據庫橫向擴展,直接增加負載能力,同時增加數據冗余,確保數據庫高可用。
DDM服務實現了自動讀寫分離,用戶購買了RDS只讀實例後,將只讀實例信息同步到DDM中即可,無需再做其他配置。同時,DDM支持用戶在SQL中自定義讀寫分離策略,具體用法請參考如何實現讀寫分離。
讀寫分離示意圖
平滑擴容
隨著業務增長,邏輯庫存儲空間不足,並發壓力較大,此時可對DDM實例邏輯庫進行平滑擴容,通過增加RDS實例來提高數據存儲能力與並發支持能力。
平滑擴容是一種水平擴容方式,通過增加RDS實例的數量來提升總體數據存儲容量,把分庫平滑擴容到新增加的RDS實例上,保證所有的數據都是均衡分布在每個分庫上,降單個RDS實例的處理壓力。平滑擴容原理如下圖所示。
平滑擴容原理
以上就是對分布式數據庫中間件DDM實現原理的淺析,目前華為雲DDM推出了免費體驗活動,想要了解更多,歡迎前往分布式數據庫中間件查看。
分布式數據庫中間件DDM的實現原理