复杂 SQL 查询跑不动?DRDS 只读实例来解决!
摘要:?在實(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求。
背景
在實(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ù)雜查詢處理能力。
千萬(wàn)級(jí)數(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)整:
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改寫的額外開銷。
產(chǎn)品體驗(yàn)靈活自主
DRDS 只讀實(shí)例自動(dòng)同步 DRDS 主實(shí)例的賬號(hào)權(quán)限信息,原生VPC支持,內(nèi)外網(wǎng)可同時(shí)開啟,根據(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ù)開發(fā)同學(xué)不再需要配置、維護(hù)數(shù)量繁多的數(shù)據(jù)同步鏈路,不用擔(dān)心因數(shù)據(jù)不同步而造成的結(jié)果時(shí)效性差或不準(zhǔn)確等問(wèn)題,一定程度上減輕了開發(fā)同學(xué)的工作負(fù)擔(dān)。
對(duì)于已經(jīng)在使用 DRDS 的用戶來(lái)說(shuō),DRDS 只讀實(shí)例可以解決如下兩類已知問(wèn)題:
小結(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)苛要求。
原文鏈接?
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的复杂 SQL 查询跑不动?DRDS 只读实例来解决!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 阿里云大数据MaxCompute计算资源
- 下一篇: 为了让开发者写MaxCompute SQ