MaxCompute 2.0 NewSQL演進(jìn)之路

摘要:10月14日,2017杭州云棲大會·阿里云大數(shù)據(jù)計算服務(wù)(MaxCompute)專場,阿里巴巴計算平臺架構(gòu)師林偉分享了主題《MaxCompute2.0的NewSQL演進(jìn)之路》,介紹阿里云大數(shù)據(jù)計算服務(wù)MaxCompute 2.0在NewSQL上所做的優(yōu)化和實踐工作。

10月14日,2017杭州云棲大會·阿里云大數(shù)據(jù)計算服務(wù)(MaxCompute)專場,阿里巴巴計算平臺架構(gòu)師林偉分享了主題《MaxCompute2.0 NewSQL演進(jìn)之路》,介紹阿里云大數(shù)據(jù)計算服務(wù)MaxCompute 2.0在NewSQL上所做的優(yōu)化和實踐工作。

DT時代,越來越多的企業(yè)應(yīng)用數(shù)據(jù)步入云端,NewSQL也成為業(yè)內(nèi)越來越熱的話題,它可以幫助用戶通過編程接口良好地訪問和存儲數(shù)據(jù)。本文將介紹阿里云MaxCompute應(yīng)用NewSQL的背景、關(guān)鍵技術(shù)解讀等內(nèi)容。

背景

提到NewSQL就會不可避免地談到SQL。上世紀(jì)80、90年代,大家會提到的數(shù)據(jù)處理、數(shù)據(jù)庫一般就是指DataBase應(yīng)用。DataBase是一個關(guān)系型數(shù)據(jù)庫,有很強(qiáng)的結(jié)構(gòu)和語義,任何人在寫查詢語言時都可以做快速交互式查詢。但是隨著互聯(lián)網(wǎng)的快速發(fā)展,大量數(shù)據(jù)的產(chǎn)生,傳統(tǒng)DataBase逐漸面臨著一系列的挑戰(zhàn)。

首先是橫向擴(kuò)展性較差;互聯(lián)網(wǎng)環(huán)境下,傳統(tǒng)DataBase對于結(jié)構(gòu)化、非結(jié)構(gòu)化數(shù)據(jù),語音、視頻數(shù)據(jù)的支持比較落后,造成不夠靈活;容錯能力弱,分布式環(huán)境下要求建立數(shù)據(jù)中心來負(fù)載大量數(shù)據(jù),這就需要強(qiáng)容錯的能力。因此,SQL的大數(shù)據(jù)能力難以滿足潮流的發(fā)展,也就帶來了NoSQL的誕生,用于處理非結(jié)構(gòu)化數(shù)據(jù)。

NoSQL是非關(guān)系型數(shù)據(jù)庫,弱語義,很靈活,并且支持非結(jié)構(gòu)、半結(jié)構(gòu)和結(jié)構(gòu)數(shù)據(jù),橫向擴(kuò)展性較強(qiáng),能夠很好地Scale。此外,NoSQL提供強(qiáng)大的UDF,在map和reduce處理數(shù)據(jù)時,UDF能夠定義key、value,而且接口可以很好地支持非關(guān)系型運算,靈活性很高。并且所有的計算節(jié)點都是獨立的,所以容錯能力也很強(qiáng)??梢钥闯鯪oSQL的大數(shù)據(jù)能力明顯強(qiáng)于SQL,也因此誕生了谷歌BigTable,MapReduce等大數(shù)據(jù)系統(tǒng)。

阿里云推出的NewSQL,就是想要結(jié)合SQL和NoSQL的優(yōu)勢。

NewSQL

NewSQL的原則是想要回歸關(guān)系型數(shù)據(jù)庫。做NoSQL時,程序員需要分別寫map、reduce、value等等是什么,因此難以闡述清晰自己所做的工作,只有給到所有的coding細(xì)節(jié)才能了解?;貧w關(guān)系型,就是希望工程師描述的不是怎么去做(即How),而是在做什么(即What),別人讀到NewSQL時就能明確工作內(nèi)容。

NewSQL需要依賴強(qiáng)大的系統(tǒng)優(yōu)化能力,通過強(qiáng)大的優(yōu)化器能夠整合多個功能,從而使得系統(tǒng)自適應(yīng)生產(chǎn)高效物理執(zhí)行計劃。在這個過程中,我們需要同時保留NoSQL的特性,包括非結(jié)構(gòu)化、強(qiáng)大的UDF集合、分布式支持等等。

我們的用戶通過NoSQL手寫高效的執(zhí)行計劃,具有以下問題:一方面,程序員不可能及時感受到數(shù)據(jù)和環(huán)境的變化,很容易造成數(shù)據(jù)傾斜的問題;另一方面,計算越來越復(fù)雜,上下游的壁壘下程序員不可能很快地分析出全局最優(yōu)的執(zhí)行計劃;同時,計算需要能夠分享知識,缺乏高層次強(qiáng)語義的語言則會阻礙這種分享;而且共享的資源環(huán)境下,單個程序員是缺乏系統(tǒng)全局觀的。所以我們需要回歸到NewSQL,讓程序員描述他需要做什么,而由系統(tǒng)來優(yōu)化得到高效的執(zhí)行計劃。

在圖中的三個場景下,NewSQL其實都做到了很好地自適應(yīng)。雖然希望程序員能夠很好地描述自己所做的工作,但是因為缺乏靈活性,還是需要通過UDF在高層次語義上獲取很好的平衡,使系統(tǒng)優(yōu)化做到高性能、高智能、自適應(yīng)的能力。

事實上,目前的整個行業(yè)都在朝著這個方向行進(jìn),比如微軟提供Dryad引擎的同時,也提供Scope做優(yōu)化工作;DataBricks在Spark之外也提供SparkSQL用于加快迭代;Hadoop更是經(jīng)歷了從MapReduce到Hive再到Hive2.0的升級;Google在MapReduce外也在力推具有SQL語義的Spanner。阿里云的MaxCompute1.0也在向MaxCompute2.0邁進(jìn),讓系統(tǒng)幫助優(yōu)化。

關(guān)鍵技術(shù)

為了實現(xiàn)SQL和NoSQL的平衡,一些關(guān)鍵技術(shù)需要了解。

支持非結(jié)構(gòu),半結(jié)構(gòu)和結(jié)構(gòu)化數(shù)據(jù)

互聯(lián)網(wǎng)環(huán)境下,用戶需要提供Serialize/Deserialize函數(shù)動態(tài)進(jìn)行非結(jié)構(gòu)到結(jié)構(gòu)化的轉(zhuǎn)換,從而提取出結(jié)構(gòu)化的數(shù)據(jù)進(jìn)行運算。由于傳統(tǒng)DB的局限性,還需要支持用戶自定義類型,豐富UDF功能,方便編程和語言的交互。用戶還需要自定義分區(qū),從而能夠有效連接上下游,實現(xiàn)輸入、輸出與其他互聯(lián)網(wǎng)應(yīng)用相連。

需要有強(qiáng)大的DAG執(zhí)行圖

這是為了突破MapReduce的束縛,從而進(jìn)行循環(huán)迭代展開為DAG。而且需要有非對稱圖表達(dá),從而支持復(fù)雜的物理執(zhí)行計劃。這樣優(yōu)化器才能產(chǎn)生高效Plan,使語言變得完整。

最重要的是完整的用戶自定義函數(shù)體系

完整的UDF集合能使得關(guān)系型退化為函數(shù)型語言,可以構(gòu)造任意的DAG執(zhí)行計劃,在語言上靈活互動,因此提供了:Serialize/Deserialize、多路Join函數(shù)、聚合處理函數(shù)、Processor完備分區(qū)函數(shù)(支持Hash/Range/Direct Hash)等等。

強(qiáng)大的優(yōu)化器

強(qiáng)大的優(yōu)化器可以提供存儲過程的支持,從單一語句到成千上萬的存儲過程。NoSQL是函數(shù)型編程,能構(gòu)建非常復(fù)雜的圖,傳統(tǒng)DB則是一條條語句提交上來,造成job分享效果較差。強(qiáng)大的優(yōu)化器能夠?qū)懗龈訌?fù)雜的查詢存儲過程,從而使得邏輯執(zhí)行計劃非常龐大,優(yōu)化空間更大,需要更先進(jìn)的優(yōu)化器,并且從RuleBased Opt慢慢演變成CostBased Opt。

此外,想要優(yōu)化器有別于單機(jī)場景,就需要考慮分布式。比如說Non-SQL場景下的眾多UDF擴(kuò)展,包括數(shù)據(jù)、用戶、運算上的擴(kuò)展,可以幫助用戶生成非常好的Plan。

下圖展示了一個有趣的例子,關(guān)于優(yōu)化器與用戶自定義函數(shù)(UDF)的結(jié)合效果。

左邊是沒有理解UDF的效果,這種情況下優(yōu)化性能較低,無法感知UDF的輸出特性,從而產(chǎn)生低效的物理執(zhí)行計劃。右邊則實現(xiàn)了UDF和優(yōu)化器的良好互動,能夠全局優(yōu)化,有效和用戶交互理解UDF的特性,使黑盒變成了灰盒。

實際例子

圖中的應(yīng)用大大減輕了分布式Cost,并且做到了靈活性和優(yōu)化性的平衡。其實UDF的一些特性是值得用戶去思考的:

a.Row-wise?單調(diào)函數(shù)?

b.某些column不變(pass through)?

c.保持分片?保持排序?

d.Selectivity,data distribution of output等等。

和單機(jī)SQL不同的是分布式場景的優(yōu)化。大量NoSQL的用戶自定義函數(shù)、分布式場景中各種動態(tài)環(huán)境(分配worker的拓?fù)浣Y(jié)構(gòu)、Failure Region的分布)等因素下,想要做到編譯時優(yōu)化和運行時優(yōu)化的平衡,就要求強(qiáng)大的引擎來進(jìn)行運行時優(yōu)化:選擇分區(qū)數(shù)目,邊界;選擇Join方式;高效的Datashuffle方式。

總結(jié)

NewSQL的原則是整合NoSQL和OldSQL的優(yōu)勢,幫助開發(fā)工作者提高開發(fā)效率,實現(xiàn)交互式運算。通過強(qiáng)大的系統(tǒng)優(yōu)化能力,希望成功地做到高可用、高可解釋、高性能、大規(guī)模以及高自適應(yīng),從而帶來整個MaxCompute生態(tài)的繁榮。


原文鏈接

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容