一、背景
隨着業務復雜程度的提高、數據規模的增長,越來越多的公司選擇對其在線業務數據庫進行垂直或水平拆分,甚至選擇不同的數據庫類型以滿足其業務需求。原本在同一數據庫實例里就能實現的SQL查詢,現在需要跨多個數據庫實例才能完成。業務的數據被“散落”在各個地方,如何方便地對這些數據進行匯總關聯查詢,已經成為困擾用戶的一大難題。
針對這類問題,傳統的解決方案需要用戶提前將所有實例的數據提前匯集到同一處,然后再做離線查詢分析。為此,用戶需要維護數據遷移鏈路,購買機器資源存儲匯集起來的數據,付出大量的資源和運維成本。不僅如此,數據遷移也意味着數據延遲,剛剛產生的在線業務數據,需要“等一會”甚至“等一天”才能去做分析,無法滿足實時性需求。
為了解決跨數據庫實例及時查詢的難題,阿里雲DMS(數據管理)推出了跨實例查詢服務。
二、什么是跨實例查詢服務
跨實例查詢服務為不同環境下的在線異構數據源,提供及時的關聯查詢服務。不論數據庫是MySQL、SQLServer、PostgreSQL還是Redis,不論數據庫實例部署在哪個阿里雲region,無需數據匯集,僅通過一條SQL就能實現這些數據庫實例之間的關聯查詢。
不僅如此,您的數據庫實例也可以部署在不同的資源環境中,除了RDS之外,我們也支持ECS上的自建數據庫、具有公網ip的自建數據庫、用戶本地IDC自建數據庫、甚至是部署在其他雲廠商的數據庫。
三、功能特性
3.1 在線數據及時查詢
目前大多數數據分析的解決方案需要將 OLTP 數據庫的數據導出至離線數據系統再進行分析,但這種方案很難滿足實時性的要求,同時在數據導出至離線系統時也存在數據丟失的風險。
DMS的跨實例查詢服務,無需用戶遷移任務,直接編寫一條SQL,就能實現多個在線數據庫的直接關聯分析。由於無需數據同步,降低了業務架構的復雜性,同時也大大節省用戶持有離線計算資源的預算和運維成本。
3.2 DBLink
熟悉Oracle的人應該知道,我們可以在當前登錄的Oracle上,建立一個DBLink指向另一個遠程的Oracle數據庫表。在跨實例查詢服務中,我們重新定義了DBLink的概念,它是一個指向用戶的任意數據庫實例的虛擬連接,是數據庫實例的別名。例如,對於MySQL來說,DBLink和ip/port一一對應。借助DBLink,即可實現對任意數據源的SQL訪問。
3.3 支持多種關系型數據庫
目前已支持MySQL、SQLServer、PostgreSQL等多種關系型數據庫。
3.4 支持SQL方式訪問NoSQL
除了關系型數據庫之外,跨實例查詢還支持以SQL方式訪問Redis等NoSQL數據庫。由於支持了SQL語法,也可以實現RDBMS和NoSQL之間關聯查詢。是的,你沒看錯,一條SQL就能實現MySQL和Redis之間的關聯查詢。
3.5支持跨地域以及混合雲查詢
企業發展到一定階段,用戶量、業務量不斷攀升,原來的單機房容量已經不能滿足業務發展的需求,再結合容災、高可用等因素,通常會選擇跨region部署,也叫單元化部署。同時,不少企業也需要將業務拓展到海外,通過本地就近部署,為國外用戶提供更好的體驗。類似這種水平拆分帶來的問題就是,如何對全局的業務數據進行統一的匯總關聯查詢。
借助DMS跨實例查詢服務,無論您的數據庫實例部署在阿里雲的哪個region,無需跨region的數據遷移,即可實現所有region數據的統一查詢。
除了阿里雲RDS,我們也支持用戶部署在阿里雲ECS上的各種數據庫。不僅如此,如果您的數據庫部署在本地IDC機房,甚至其他雲廠商,都可以通過跨實例查詢服務,實現這些混合雲場景的跨實例關聯查詢。
3.6 跨實例數據導入導出
insert into b select * from a;
眾所周知,這條SQL語句可以將表a的數據導出到表b中,但如果a表和b表不在同一個數據庫實例上,那這條sql就無能為力了。
跨實例查詢服務的出現,打破了實例與實例之間數據導入導出的邊界。它可以將數據從一個MySQL實例的表導出到另外一個MySQL實例的表中;也可以將SQLServer表和PostgreSQL表關聯查詢的結果,導出到MySQL實例的表中,就是這么靈活。
3.7 兼容標准SQL
通過標准的SQL語句,即可實現跨實例查詢。同時跨實例查詢服務高度兼容MySQL,支持MySQL協議,以及各種常用函數和語法。您可通過JDBC/ODBC驅動連接到跨實例查詢服務;也可以使用各種MySQL GUI工具來管理各種數據源;當然,您也可以在DMS跨實例查詢控制台上(https://dsql.console.aliyun.com)直接使用。
3.8 Serverless架構
跨實例查詢是無服務器化的在線數據庫關聯查詢服務。用戶無需預購計算資源、無需維護資源、沒有運維和升級成本,隨時隨地使用。
3.9 高性能低延遲
跨實例查詢服務底層基於強大的MPP計算引擎,持續不斷地對SQL查詢進行優化,包括pushdown、join算法、執行計划緩存、Meta緩存、本地調度、連接池等技術。目前單表查詢以及跨實例的多表關聯查詢,都能在毫秒級完成。
四、技術架構
用戶可以在應用程序中,直接使用MySQL JDBC驅動連接跨實例查詢服務,進行跨實例查詢。當然,我們也提供了控制台頁面(https://dsql.console.aliyun.com),直接輸入SQL即可執行。
五、應用場景
5.1 垂直拆分后的跨數據庫查詢
某電商公司原先將會員、訂單、商品等數據都存放在一個數據庫實例中,但業務發展迅猛,訪問量極速增長,導致數據庫容量及性能遭遇瓶頸,因此用戶決定對架構進行垂直拆分,將會員、商品、訂單數據垂直拆分至三個數據庫實例中。此時業務上需要展示某個品類商品的售賣訂單量,原本在同一數據庫里的查詢,要變成跨兩個數據庫實例的查詢。業務上要怎么進行關聯查詢?
用戶首先想到的方法是,對現有業務代碼進行重構,分別從兩個數據庫查詢數據,然后在業務代碼中進行join關聯。那么問題來了,如果采用這個解決方案,業務上那么多查詢改造起來,拆分難度極大,操作起來過於復雜。跨庫join操作又沒有非常高效的辦法,需要從各個業務庫迭代查詢,查詢效率也會有一定影響。
我們發現用戶遇到的其實就是典型的跨實例查詢問題。目前,阿里雲跨實例查詢服務已經支持跨多個數據庫實例的SQL查詢的能力,用戶利用一條SQL即可解決上述難題。不僅能夠滿足“跨庫Join”這一核心訴求,還能極大地簡化用戶的技術方案。
5.2 水平拆分后的跨數據庫查詢
某酒店在多個城市都有對應的門店,其數據庫在每個城市也會單獨部署一套,業務上有對多個城市全局數據查詢的訴求。同樣,現在越來越多的互聯網行業開始引入單元化架構,在每個城市會單獨部署機房和數據庫,進行多單元數據匯總查詢的需求也越來越強。
為了滿足雲上這些跨單元、跨region的數據庫查詢需求,跨實例查詢服務打通region之間的屏障,用戶通過一條SQL就能實現這些需求。
5.3 異構數據庫的關聯查詢
某公司考慮成本和未來可擴展性,正在將業務數據從SQLServer遷移到MySQL上。在這期間,必然存在某些業務子系統仍然在SQLServer上,另外一些業務子系統已經全部遷移到MySQL上,這時兩個子系統之間的聯合查詢,就可以借助阿里雲的跨實例查詢服務實現。不僅如此,在遷移過程中,還可以通過跨實例查詢服務,來校驗SQLServer和MySQL上的數據是否一致。
5.4 混合雲場景的關聯查詢
某游戲公司,由於各種原因,同時保有阿里雲、騰訊、UCloud、AWS等環境的數據庫實例,同時在自己自建的IDC也部署了部分數據庫。業務的數據如此分散,單是統計一下當前游戲在線用戶數,都要分別到各個環境去查詢一遍再做匯總。借助阿里雲跨實例查詢服務,一條SQL就能實現跨雲廠商和IDC之間的關聯查詢。
六、小結
阿里雲DMS(數據管理)跨實例查詢服務,不僅覆蓋了異構數據源關聯查詢的場景,還解決了跨region、跨雲的數據庫關聯查詢的難題。不僅如此,我們對查詢性能進行了大幅優化,使得大部分查詢能在毫秒級完成。用戶無需通過數據匯集,即可通過標准的SQL實現跨實例的交叉查詢。
原文地址:https://www.csdn.net/article/a/2019-01-14/15968748