復(fù)雜 SQL 查詢跑不動(dòng)?DRDS 只讀實(shí)例來(lái)解決!
背景
在實(shí)際業(yè)務(wù)生產(chǎn)環(huán)境中,業(yè)務(wù)應(yīng)用系統(tǒng)在使用 OLTP 數(shù)據(jù)庫(kù)將數(shù)據(jù)進(jìn)行存儲(chǔ)后,均會(huì)存在如后臺(tái)運(yùn)營(yíng)類系統(tǒng)進(jìn)行統(tǒng)計(jì)報(bào)表分析等場(chǎng)景的復(fù)雜 SQL 查詢?cè)V求。
為滿足此類復(fù)雜 SQL 查詢快速響應(yīng)的需求,DRDS 團(tuán)隊(duì)基于第三代分布式SQL引擎,進(jìn)一步引入自研 MPP 多機(jī)并行計(jì)算引擎(Fireworks)及對(duì)應(yīng)的優(yōu)化策略,極大地補(bǔ)強(qiáng)了 DRDS 的復(fù)雜查詢處理能力。
***數(shù)據(jù)下的分布式多表Join、聚合、排序、子查詢操作秒級(jí)返回結(jié)果,可極大的提升響應(yīng)速度。自身利用同一份數(shù)據(jù)(RDS只讀)進(jìn)行處理,無(wú)需數(shù)據(jù)同步至其他數(shù)據(jù)源,降低業(yè)務(wù)架構(gòu)整體鏈路復(fù)雜度,節(jié)省業(yè)務(wù)運(yùn)維及預(yù)算成本。
主要特性
自研 MPP 多機(jī)并行計(jì)算引擎 Fireworks
DRDS 只讀實(shí)例搭載了一個(gè)具備完整多機(jī)并行處理能力的 SQL 執(zhí)行引擎(Fireworks)。它與 DRDS 主實(shí)例上搭載的 SQL 執(zhí)行引擎有顯著差異。
DRDS 主實(shí)例的執(zhí)行引擎采用單機(jī)架構(gòu),采取盡可能將計(jì)算下推至底層各物理分庫(kù)執(zhí)行的策略,依靠物理分庫(kù)的計(jì)算能力實(shí)現(xiàn)了邏輯SQL的分布式計(jì)算。
而 DRDS 只讀實(shí)例上搭載的 Fireworks 引擎是一個(gè)由多個(gè)計(jì)算節(jié)點(diǎn)組成的集群,將一個(gè) SQL 查詢轉(zhuǎn)換為一個(gè)分布式計(jì)算任務(wù),突破下掛 物理庫(kù)計(jì)算能力的限制,大幅提升針對(duì)復(fù)雜邏輯SQL的計(jì)算速度,對(duì) Join、Aggregate 和 Sort 計(jì)算有顯著加速效果。
Fireworks 會(huì)將 Join、Aggregate 和 Sort 這類計(jì)算任務(wù)通過(guò) Shuffle 的方式打散并分發(fā)到計(jì)算集群的多個(gè)計(jì)算節(jié)點(diǎn)上,通過(guò)多計(jì)算節(jié)點(diǎn)并行計(jì)算達(dá)到計(jì)算加速的目的。
針對(duì)多機(jī)并行執(zhí)行模式定制打造的優(yōu)化器
原 DRDS 主實(shí)例優(yōu)化器主要側(cè)重 OLTP 場(chǎng)景,核心理念是盡量將一切計(jì)算下推至下掛的物理庫(kù)執(zhí)行。其目的是充分利用物理庫(kù)的計(jì)算資源,同時(shí)可以避免產(chǎn)生大量的數(shù)據(jù)流動(dòng),從而得到較快的響應(yīng)速度。
而當(dāng)面對(duì)涉及較大數(shù)據(jù)量級(jí)下的復(fù)查查詢場(chǎng)景時(shí),整體性能會(huì)受到下掛物理庫(kù)的限制,同時(shí)也會(huì)對(duì)物理庫(kù)產(chǎn)生較大的壓力從而影響穩(wěn)定性,總體來(lái)看其 OLAP 能力有很多局限性。
在引入了 MPP 多機(jī)并行計(jì)算引擎 Fireworks 之后,DRDS 本身在計(jì)算能力上得到了極大地提升,優(yōu)化器的整體優(yōu)化策略也有所調(diào)整:
- 盡量將復(fù)雜計(jì)算(如 Join 、Aggregation 、Sort )上提至自身執(zhí)行引擎計(jì)算,通過(guò) Fireworks 計(jì)算集群實(shí)現(xiàn)計(jì)算加速與可擴(kuò)展性;
- 將輕量級(jí)的計(jì)算(如 Project 、Filter )繼續(xù)下推至至物理庫(kù)從而減少數(shù)據(jù)拉取的成本。
DRDS 分布式 SQL 優(yōu)化器通過(guò)對(duì)執(zhí)行計(jì)劃最細(xì)粒度的優(yōu)化可以產(chǎn)生出對(duì)多機(jī)并行執(zhí)行引擎友好的執(zhí)行計(jì)劃,獲得更好執(zhí)行效率。
同時(shí)提供精細(xì)化算子下推策略,將對(duì) RDS 較小壓力的算子下推至物理庫(kù)取得更高的計(jì)算性價(jià)比,同時(shí)保護(hù) RDS 免受代價(jià)較大算子的影響,從而保證在線流量的穩(wěn)定性。
基于在線數(shù)據(jù)直接分析
以新零售業(yè)務(wù)為代表的新興互聯(lián)網(wǎng)業(yè)務(wù)不斷涌現(xiàn),這類業(yè)務(wù)除了有實(shí)時(shí)的 OLTP 需求,還伴隨著一些有一定復(fù)雜度的準(zhǔn)實(shí)時(shí) OLAP 的需求用以支持實(shí)時(shí)決策等需求。
而目前大多數(shù)的數(shù)據(jù)分析場(chǎng)景的解決方案均需要將 OLTP 數(shù)據(jù)庫(kù)的生產(chǎn)數(shù)據(jù)導(dǎo)出至其他數(shù)據(jù)源進(jìn)行再次離線分析,這種傳統(tǒng)方案很難滿足準(zhǔn)實(shí)時(shí)的需求,同時(shí)在數(shù)據(jù)導(dǎo)出至離線系統(tǒng)時(shí)也存在數(shù)據(jù)丟失的風(fēng)險(xiǎn)。
DRDS 只讀實(shí)例無(wú)需進(jìn)行冗長(zhǎng)繁瑣的數(shù)據(jù)同步任務(wù),基于 RDS 只讀實(shí)例或 RDS 主實(shí)例直接進(jìn)行復(fù)雜數(shù)據(jù)處理,降低業(yè)務(wù)架構(gòu)整體鏈路復(fù)雜度,節(jié)省業(yè)務(wù)運(yùn)維及預(yù)算成本。
DRDS 只讀實(shí)例在避免數(shù)據(jù)同步的同時(shí),可保證數(shù)據(jù)處理時(shí)效性,***可做到 READ COMMITED 的實(shí)時(shí)性 (基于 RDS 主實(shí)例)。
邊界清晰的 SQL 兼容性
DRDS 只讀實(shí)例全面兼容 DRDS 主實(shí)例的 SQL 查詢語(yǔ)法,與 DRDS 5.3 版本的 SQL 兼容性和 SQL 支持邊界高度保持一致。
與同類產(chǎn)品相比具備兼容性高以及支持邊界清晰的特點(diǎn)。可以提供與 DRDS 主實(shí)例幾乎一致的體驗(yàn)。
DRDS 主實(shí)例上無(wú)法執(zhí)行或執(zhí)行較慢的復(fù)雜 SQL 可以直接遷移到只讀實(shí)例來(lái)執(zhí)行,免去SQL改寫(xiě)的額外開(kāi)銷。
產(chǎn)品體驗(yàn)靈活自主
DRDS 只讀實(shí)例自動(dòng)同步 DRDS 主實(shí)例的賬號(hào)權(quán)限信息,原生VPC支持,內(nèi)外網(wǎng)可同時(shí)開(kāi)啟,根據(jù)業(yè)務(wù)情況靈活變配,數(shù)據(jù)處理能力線性提升。
技術(shù)架構(gòu)總覽
DRDS 只讀實(shí)例整體架構(gòu)與 DRDS 主實(shí)例基本保持一致,僅在查詢層有所變化,增加了 MPP 執(zhí)行引擎和對(duì)應(yīng)優(yōu)化器,如下如所示:
DRDS協(xié)議層負(fù)責(zé)處理網(wǎng)絡(luò)交互與 MySQL 協(xié)議的解析,收到查詢請(qǐng)求后會(huì)將 SQL 轉(zhuǎn)交至查詢層處理。查詢層負(fù)責(zé)解析 SQL 并由執(zhí)行器產(chǎn)生經(jīng)過(guò)優(yōu)化的執(zhí)行計(jì)劃,然后交由執(zhí)行引擎到存儲(chǔ)層進(jìn)行查詢以及計(jì)算。
如果需要使用 Fireworks 引擎計(jì)算,在得到執(zhí)行計(jì)劃之后查詢層還會(huì)將該執(zhí)行計(jì)劃進(jìn)一步轉(zhuǎn)換為分布式執(zhí)行計(jì)劃并將其作為分布式任務(wù)提交給 Fireworks Cluster。由遠(yuǎn)端的 Fireworks 集群完成到存儲(chǔ)層進(jìn)行數(shù)據(jù)查詢以及后續(xù)計(jì)算的工作。
簡(jiǎn)單來(lái)說(shuō),DRDS 只讀實(shí)例可以認(rèn)為是在原 DRDS 基礎(chǔ)上增加了一條具備多機(jī)并行處理能力的執(zhí)行鏈路。
適用場(chǎng)景
總體來(lái)說(shuō) DRDS 只讀實(shí)例適用于處理低并發(fā)高延遲的大數(shù)據(jù)量級(jí)下的復(fù)雜查詢。如數(shù)據(jù)分析及報(bào)表類場(chǎng)景,該類場(chǎng)景的典型特征為含有大量的關(guān)聯(lián)、聚合及排序操作且參與計(jì)算的數(shù)據(jù)規(guī)模較大。
目前 DRDS 只讀實(shí)例在阿里集團(tuán)內(nèi)部已經(jīng)落地了多個(gè)業(yè)務(wù),其中***代表性的當(dāng)屬盒馬、商業(yè)大腦等新零售場(chǎng)景。圍繞人、貨、場(chǎng)、倉(cāng)多個(gè)維度進(jìn)行關(guān)聯(lián)分析,對(duì)分散在不同邏輯庫(kù)的幾張甚至十幾張邏輯表進(jìn)行關(guān)聯(lián)然后再聚合、排序以滿足庫(kù)存對(duì)賬、決策支持等業(yè)務(wù)上的需求。
DRDS 只讀實(shí)例的出現(xiàn)使業(yè)務(wù)開(kāi)發(fā)同學(xué)不再需要配置、維護(hù)數(shù)量繁多的數(shù)據(jù)同步鏈路,不用擔(dān)心因數(shù)據(jù)不同步而造成的結(jié)果時(shí)效性差或不準(zhǔn)確等問(wèn)題,一定程度上減輕了開(kāi)發(fā)同學(xué)的工作負(fù)擔(dān)。
對(duì)于已經(jīng)在使用 DRDS 的用戶來(lái)說(shuō),DRDS 只讀實(shí)例可以解決如下兩類已知問(wèn)題:
在使用 DRDS 過(guò)程中可能會(huì)發(fā)現(xiàn)某一些涉及Join、聚合、排序的復(fù)雜 SQL因?yàn)椴荒芡耆峦贫枰贒RDS執(zhí)行引擎中進(jìn)行二次計(jì)算,而這種計(jì)算因?yàn)槭艿絾螜C(jī)執(zhí)行引擎在內(nèi)存方面的限制而無(wú)法執(zhí)行。
SQL 的復(fù)雜計(jì)算部分可以下推但是涉及到的數(shù)據(jù)規(guī)模較大造成物理庫(kù)壓力增高影響 OLTP 業(yè)務(wù)或者響應(yīng)時(shí)間過(guò)慢達(dá)不到要求。
小結(jié)
長(zhǎng)期以來(lái) DRDS 受到單機(jī)架構(gòu)執(zhí)行引擎的限制一直無(wú)法對(duì)基于大數(shù)據(jù)規(guī)模的復(fù)雜查詢提供很好的支持,也無(wú)法通過(guò)擴(kuò)展物理資源來(lái)實(shí)現(xiàn)對(duì)自身本地計(jì)算能力的線性擴(kuò)展。
DRDS只讀實(shí)例的推出徹底地彌補(bǔ)了 DRDS 在 OLAP 場(chǎng)景下的短板,使得 DRDS 在提供強(qiáng)大 OLTP 能力的同時(shí)提供可擴(kuò)展的 OLAP 能力,為同時(shí)具有 OLTP 需求與中等規(guī)模數(shù)據(jù)分析需求的用戶提供了一站式整體解決方案,為用戶帶來(lái)便利。
后續(xù)半年時(shí)間內(nèi) DRDS 只讀實(shí)例將發(fā)布跨邏輯庫(kù)的關(guān)聯(lián)查詢功能,并通過(guò)更多的技術(shù)手段,不斷增強(qiáng)只讀實(shí)例核心能力,在并發(fā)度、響應(yīng)時(shí)間、數(shù)據(jù)量、交互式查詢等方面將擁有更好的表現(xiàn),滿足企業(yè)級(jí)應(yīng)用對(duì)數(shù)據(jù)庫(kù)的嚴(yán)苛要求。