MaxCompute,基於Serverless的高可用大數據服務
摘要:2019年1月18日,由阿裏巴巴MaxCompute開發者社區和阿裏雲棲社區聯合主辦的“阿裏雲棲開發者沙龍大數據技術專場”走近北京聯合大學,本次技術沙龍上,阿裏巴巴高級技術專家吳永明為大家分享了MaxCompute,基於Serverless的高可用大數據服務,以及MaxCompute低計算成本背後的秘密。
以下內容根據演講視頻以及PPT整理而成。
一、什麽是MaxCompute
Big Data in Alibaba
首先為大家介紹阿裏巴巴大數據技術的一些相關背景。正如下圖所示,阿裏巴巴其實在很早的時候就開始布局大數據技術,甚至可以說阿裏雲的成立就是為了幫助阿裏巴巴解決大數據相關的技術問題。如今,阿裏巴巴幾乎所有的BU都在使用大數據技術。而在阿裏巴巴內部,大數據技術不僅應用範圍非常廣,同時也非常深入。此外,整個集團的大數據體系最終都會匯集到一起。
Overview of Computing Platform
阿裏雲計算平臺事業部的職責就是將阿裏巴巴的大數據體系匯集到一起,並且負責整個集團的存儲、計算相關的研發工作。如下圖所示的就是阿裏巴巴大數據平臺的簡單架構圖,最底層的是統一存儲平臺盤古,其負責存儲大數據。存儲時靜態的,而為了挖掘數據的價值就需要依靠計算能力實現,因此阿裏巴巴大數據平臺也提供了各種計算資源,比如CPU、GPU、FPGA以及ASIC等。為了更好地利用上述這些計算資源,需要將他們統一地進行抽象,並有效地進行管理,而在阿裏雲內部,統一的資源管理系統稱為伏羲。基於資源管理和調度系統,阿裏雲還開發了各種各樣的計算引擎,比如通用計算引擎MaxCompute、流計算Blink、機器學習PAI以及圖計算平臺Flash等。在這些計算引擎之上,平臺還提供了各種各樣的開發環境,並基於這些開發環境實現了各種業務。
本文中將為大家重點介紹通用計算引擎MaxCompute。MaxCompute是一個通用分布式大數據處理平臺,其一方面可以存儲海量數據,另一方面還可以基於數據進行通用計算。
首先看兩個數字,目前,阿裏巴巴內部99%的數據存儲和95%的計算任務都由MaxCompute承載。其實,MaxCompute就是阿裏巴巴的數據中臺,集團的各個BU所產生的數據最終都會匯總到MaxCompute上面,使得集團的數據資產得以不斷增加。其次,再看幾個指標。MaxCompute在BigBench測試中的表現是一般開源系統的2.5倍。在阿裏巴巴集團內部,MaxCompute集群的機器數量達到了幾萬臺,每天所承載的作業量更是達到了百萬級別。目前,MaxCompute集群所存儲的數據量也非常大在很久之前就已經達到了EB級別,這在全球範圍內都處於領先水平。此外,MaxCompute不僅對集團內部提供服務,也開放給了外部企業使用,目前所提供的行業解決方案已經達到了50多套。如今,MaxCompute的存儲量和計算量每年都在以極高的速度增長,而借助阿裏雲的能力,使得MaxCompute不僅能夠在國內進行部署,還能夠部署到海外的很多國家和地區。
MaxCompute系統架構
MaxCompute的系統架構與業界的大數據計算引擎架構比較類似。如下圖所示,用戶能夠通過一些客戶端進行接入,通過接入層就可以將數據傳輸到MaxCompute裏面。而在中間存在一個管理層,可以管理各種各樣的用戶作業,同時也會承載各種各樣的功能,比如大數據裏面最基本的SQL編譯、優化和運行等功能。此外,MaxCompute提供了分布式元數據服務,因為如果沒有元數據管理,那麽就無法知道數據存儲的究竟是什麽。在MaxCompute架構的最下面一層就是實際的存儲和計算發生的地方。
二、MaxCompute Serverless與背後的奧秘
如今Serverless這一概念非常火爆,而當站在MaxCompute開發者的角度,Serverless的火爆既令人高興,也令人郁悶。值得高興的是:MaxCompute技術團隊早在Serverless概念提出之前的很多年就開始研發類似功能了,並且設計理念也完全符合Serverless,這可以說明MaxCompute在Serverless方面的布局較早,並且技術具有一定的先進性。但令人郁悶的是:雖然MaxCompute團隊很早就被提出了Serverless的相關概念,也認可這種技術路線的價值,但是卻沒有能夠及早地將這樣的能力包裝起來。
在Serverless概念提出之前,大家進行大數據實踐的時候基本都是按照下圖的步驟,首先購買服務器,搭建集群,有了硬件之後就可以在上面安裝大數據處理軟件“全家桶”,之後導入數據,編寫業務所需要的查詢並做計算,最終獲取結果。當然了,上述的每個步驟都離不開運維相關工作。如果自行搭建大數據系統,那麽運維工作將會貫穿始終的,而對於運維同學而言,也需要時時刻刻待命,以防系統出現問題。
但是,如果回顧上述的步驟,真正能夠產生業務價值就是第四步的編寫查詢和進行實際的計算,但是其他的步驟會消耗很多的資源和人力,而這對於偏向於業務型的公司而言,都是額外的負擔。而如今,Serverless就提供了幫助企業消除這些額外負擔的機會。
以MaxCompute Serverless為例,只需要經過四個步驟就可以實現所需的業務價值。第一步開通賬戶並創建項目,這個項目既是數據存儲載體,也是計算的載體;第二步上傳數據;第三步編寫查詢語句並進行計算;第四步就可以獲取計算結果。在整個過程中,無需任何運維工作,因此開發團隊可以將精力集中在最為核心並且能夠產生業務價值的地方,這也就是Serverless的優勢所在。其實,這也代表了新技術對日常工作所帶來的變化,新的技術使得大家能夠更加專註於能夠產生核心價值的部分,而無需關心額外的或者輔助性的工作。
和其他的開源軟件或者大數據公司直接為客戶提供一個大數據軟件包的做法不同,MaxCompute所提供的是大數據服務,而且所提供的服務能夠實現365(天)X 24(小時)的高可靠,既提供了大數據計算的能力,也同時提供了數據存儲的能力,並且使得用戶可以真正實現大數據技術的開箱即用。
在實現大數據平臺Serverless服務的過程中需要面對很多挑戰,在本文中將會主要聚焦以下三個問題:
- 大數據服務如何持續叠代和升級
- 大數據服務的趨勢:自動化、智能化
- 數據安全
持續改進和發布中的挑戰和方案
如果想要實現一套大數據系統,那麽持續改進和發布的話題是絕對無法脫離。這是因為用戶總會提出各種各樣的新需求,而為了滿足這些需求就需要不斷地升級和改進大數據平臺,而在改進的同時,還需要面對每天平臺之上運行的百萬級作業,並保證7*24小時的服務不間斷。那麽,如何實現平臺升級過程的平穩安全,並且使得用戶對於新功能發布無感知,此外還需要保證新版本的穩定性,沒有Bug和性能回退問題,以及在出現問題之後能夠快速止損等,這些都是需要考慮的問題。此外,在持續改進和發布的過程中,還需要考慮測試和數據安全性之間的矛盾。總而言之,在大數據平臺之上實現持續改進和發布,就如同在飛行的飛機上面更換引擎。
面對上述的問題和挑戰,阿裏雲MaxCompute團隊做了大量的工作。目前,在大數據領域,MapReduce對於用戶不夠友好已經成為了業界的共識,類SQL的大數據引擎已經成為了主流。而對於類SQL的處理而言,最關鍵的就是三個步驟:編譯、優化和執行。因此,MaxCompute也抓住了問題的關鍵,針對編譯和優化開發了Playback工具,針對執行則開發了Flighting工具。除了上述比較偏向於測試驗證階段所使用的兩種工具之外,在真正上線的時候,MaxCompute還提供了灰度上線等工具。
Playback工具
Playback誕生的背景就是MaxCompute需要快速地提高編譯器和優化器的表達能力和性能優化水平。而在對編譯器和優化器進行了重大改動之後,如何保證編譯器和優化器沒有問題就成為了一個挑戰。最為原始的做法就是通過將一些已有的SQL放到編譯器和優化器上執行,並通過執行結果的人工分析來發現編譯器和優化器的改進中存在的問題。但是通過人工方式進行分析,可能需要一百年才能完成,這顯然是無法容忍的。因此,MaxCompute團隊希望借助大數據計算平臺的運算能力來自我驗證新的編譯優化器。
其原理就是利用MaxCompute本身強大且靈活的能力,把所有真實的用戶查詢收集起來並放到MaxCompute系統裏面,將用戶查詢以大規模、分布式的方式運行起來,並通過新版的編譯優化器來完成這些作業的編譯和優化。而由於MaxCompute采用了業內通行的模式,因此能夠很容易地將作業插件插入到任務之中,進而對編譯優化任務進行校驗,如果存在問題也能夠很容易地暴露出來。
總結而言,Playback一方面利用MaxCompute靈活且強大的計算能力來分析海量用戶任務,另外一方面還借助對於UDF的支持和良好的隔離方案來進行編譯優化和驗證。這就使得對於新版本編譯優化器的驗證變得非常容易,對於之前想要實現但是卻無能為力的任務,如今借助於大數據平臺的強大能力得以實現。
Flighting工具
Flighting是針對於運行時的工具。其實,對於改進的優化器進行測試優化的常規做法就是搭建一個測試集群進行測試,這是最常規並且最自然的做法,但是也會造成極大的資源浪費,因為測試集群的成本非常大。由於測試環境與真實環境的任務復負載情況不同,因此,測試集群也無法真實地模擬出實際場景。此外,為了在測試環境中進行驗證,需要測試人員來創造出一些數據,但是這些被創造出來的數據可能過於簡單。否則就需要從真實場景中拿一些數據,但是這樣做不僅需要經過用戶的同意,還需要進行數據脫敏,這也是一件極其麻煩的事情。不僅可能產生數據泄露的風險,而且最終數據和真實數據也會存在一定的差異,很多情況無法驗證出新功能所存在的問題。
而MaxCompute的運行時驗證工具Flighting所使用的就是線上真實的集群和環境。借助於資源隔離的能力,使得MaxCompute集群中99%的計算資源交給用戶來運行作業,而剩下的1%的資源交給Flighting工具進行執行器的新功能驗證測試。這樣的做法非常高效,不僅不需要拖取數據,還可以在生產環境中直接運行,可以容易地暴露出真實執行器所存在的問題。
灰度上線
MaxCompute平臺具有灰度上線的能力,可以將任務按照重要性進行分級,進行細粒度發布,並且支持瞬時回滾,這樣就可以將風險降到最低。
MaxCompute平臺的持續開發驗證叠代流程
如下圖所示的是MaxCompute平臺的持續開發驗證叠代流程,其結合了針對編譯優化器的Playback工具、針對運行器的Flighting工具以及灰度上線的能力。在這樣的流程中, 第二個周期並不需要等待第一個周期完成再開始,這樣就使得整個研發流程更加高效。目前,MaxCompute的持續開發和交付過程在編譯優化、執行以及灰度等都具有較強的技術優勢,在整個行業內也具有較強的技術競爭力,這就使得MaxCompute能夠更好地向前演進,為客戶帶來更多更好的功能,同時也保證了MaxCompute平臺在升級的過程中不會影響用戶的正常使用。
自動化、智能化
隨著人工智能和大數據技術的不斷發展,如今對於服務而言,不僅需要實現高可用,還需要實現自動化。針對於這樣的思想,可以從兩個角度來看,即服務本身的角度和用戶運維的角度。針對於服務本身,首先需要實現自動化,更進一步可以實現人工智能化。
任何服務都會出現各種各樣的問題,存在各種各樣的Bug,在出現問題的時候,傳統解決方案中需要依靠人力來解決。而服務自動化和智能化的終極目標就是在系統出現問題的時候,不需要人工來修復,而完全通過系統的自愈能力來發現並解決問題。而服務自動化和智能化的目標需要一步步實現,從用戶運維的角度來看,就是從原本用戶自身負責的運維工作,轉交給完成大數據任務的雲上大數據平臺,比如阿裏雲MaxCompute,這時候就相當於將客戶的運維工作轉移給了MaxCompute團隊。而第三步就是MaxCompute團隊也希望從大數據平臺繁瑣的運維任務中解脫出來,實現服務的自動化和智能化運維,進一步釋放MaxCompute團隊的精力,將全部的精力投入到更加有價值的工作上。而實現大數據服務自動化和智能化的目的在於提高服務可靠性,解放生產力,通過做更有價值的事情來回饋用戶。基本思想就是定時地收集和監控服務的各項指標,針對異常指標及時作出應對措施。
除了大數據服務的自動化和智能化之外,對於用戶查詢而言,自動識別出可優化的查詢並提供優化建議也非常關鍵。大家所寫的SQL查詢未必是最高效的,可能存在一些更加有效的方式或者更好的技術,因此需要自動識別出用戶查詢中可優化的部分,並給出相應的優化建議。對於這部分而言,也是業內的發展方向,目前MaxCompute團隊也正在進行相應的研究工作。
三、MaxCompute低成本的奧秘
低成本使得MaxCompute更加具有競爭力,而在低成本的背後,是MaxCompute發揮出技術紅利使得成本確確實實地降低下來。為了使得大數據任務的成本更低,MaxCompute主要在計算、存儲和調度這三個方面進行改進和提高。
- 在計算方面,MaxCompute優化了自身的計算引擎,能夠提高性能,降低作業占用資源的數量,這兩種做法都可以使得平臺能夠承載更多計算任務,每個任務要麽能夠減少計算時間,要麽可以減少作業大小,最終降低計算任務所占用的資源,這樣就能夠使得更多的資源得以空出來,承載更多的計算任務。
- 在存儲方面,也有各種各樣的優化方式。比如優化壓縮算法,使用比較先進的列式存儲,對於數據存儲進行分級,對於冷數據進行歸檔,對於沒有價值的數據進行及時回收等。
- 在調度方面,為了降低成本進行優化方式主要包括集群內調度和跨集群全局調度。
對於集群內部調度而言,所需要解決的問題非常多。一方面,每時每刻都有很多的作業實例在等待調度,另外一方面還有很多資源等著運行作業。
集群內調度
那麽如何將兩者結合起來就顯得非常關鍵,也非常考驗調度能力。目前,MaxCompute大數據平臺的調度決策頻率達到了4000+/s,這裏所作出的調度決策是將一定大小的作業放入到相應的資源中去,盡可能做到既能滿足作業所需資源,又不能浪費資源。
在性能方面,需要支持增量式調度,使得資源能夠得到很好地利用;此外,還提供了彈性配額能力,使得多用戶在運行計算任務的時候可以實現削峰填谷。因為在真正使用大數據平臺的時候,大家不可能同時提交任務,在絕大多數情況下往往會錯峰提交任務,因此就會出現資源使用的峰和谷,而通過彈性配額能力可以盡量實現削峰填谷,使得資源能夠充分利用。對於任務的最優化調度而言,則需要考慮延遲與吞吐之間的平衡。在負載均衡方面,需要規避一些熱點。此外,MaxCompute的調度決策系統還支持任務優先級和搶占,能夠實現實時性和公平性。
此外,針對於復雜任務調度而言,還進一步劃分了服務和作業的調度。這裏所謂的任務就是一次性作業,而對於服務而言,在啟動之後則會在一段時間之內一直不間斷地處理數據作業。其實,服務和作業的調度存在著很大的差異,服務調度要求較高的可靠性,不能被打斷,因為一旦被打斷,重新恢復起來的成本將會非常高;而作業對於間斷的容忍程度則要高一些,即使被打斷,後續也可以拉起來繼續運行。
二級配額組
對於單集群內的調度而言,重點介紹一下在一般的大數據平臺中比較少見的二級配額組概念。在介紹二級配額組之前,首先介紹關於配額組的相關內容。簡單而言,將物理集群的各種資源做成資源池之後,將一些資源整合到一個組裏面就稱之為配額組。在大數據平臺上,作業就運行在配額組裏面,而同一個配額組中的作業將會共享該配額組中的所有資源。而常見的一級配額組策略,存在著很多的問題。舉例而言,如果一級配額組具有1000個CPU內核,而有100個用戶在共同使用該配額組,某一時刻某一用戶提交了一個非常大的作業,於是占滿了整個配額組的1000個CPU內核,進而導致其他用戶的作業全部需要等待。
為了解決上述情況中所出現的問題,就需要使用二級配額組。二級配額組在一級配額組的基礎之上進行了進一步細分,設定了每個用戶所能夠使用的資源上限。每個一級配額組可以分為多個二級配額組,這樣做的目的就是為了更好地利用資源。在二級配額組中,資源可以實現共享,但是即便某個用戶需要使用的資源很多,也無法超過該二級配額組資源上限,因此可以比較好地保證用戶體驗。
與一般的大數據系統不同,MaxCompute除了能夠實現單集群內部調度之外,還可以實現多集群之間跨集群的全局調度,這也是MaxCompute強大能力的體現。單個集群可能會受制於各種因素而無法實現擴容,因此需要實現集群級別的水平擴展。
對於業務量巨大的應用而言,為了保證當單個集群發生宕機的時候業務依舊能夠正常運行,所以需要讓業務在多個集群上運行,來保證保證業務的高可用。這時候就需要全局的跨集群調度能力,當一個作業進來之後,需要分析該作業可以向哪些集群上進行調度,以及目前哪些集群可供使用並且比較空閑。而此時還會涉及數據多版本的問題,因為同一份數據存儲在不同的集群之中,就會帶來數據不一致的問題。此外,對於同一份數據的不同版本,也需要考慮應該具體的計算和數據復制策略,而阿裏雲MaxCompute也是經過了大量經驗的積累才使得上述策略更加完善。
四、數據安全
對於一個企業而言,使用大數據計算平臺時最為關心的就是數據安全問題。從阿裏巴巴的經驗來看,在數據安全方面,用戶最為擔憂的主要有三點,第一點:將數據放在平臺之上,其他人能否看到;第二點:將數據放到平臺或者服務之上,提供服務的人是否會看到數據。第三點:將數據托管到大數據平臺之上,如果平臺出現了問題,那麽數據怎麽辦。
對於用戶的這些憂慮,MaxCompute都能比較完善地進行處理,用戶基本上無需擔心數據的安全性。首先,MaxCompute平臺具有完善的鑒權和授權機制,數據是屬於用戶的,而不是平臺的,雖然平臺幫助用戶進行存儲和計算,但是卻不具有數據所有權,無論是對數據進行訪問還是計算都需要鑒權和授權。無論是其他用戶還是平臺方,在沒有授權的情況下,都無法看到數據。此外,授權的維度也比較多樣,包括表級別、列級別和作業級別。而因為MaxCompute是雲上大數據平臺,天然地具備多租戶的特點,因此需要實現各個租戶之間的數據和計算隔離。對於數據而言,MaxCompute平臺實現了物理隔離,從根本上消除了數據的安全性問題。此外,平臺還提供了嚴格的權限控制策略,用戶無法查看其他用戶的數據。此外,MaxCompute還提供了E2E全鏈路存儲加密,這對於金融機構顯得尤為重要;還提供了CRC校驗,保證了數據正確性,而且這部分能力已經在阿裏巴巴內部使用了多年,已經非常完善;最後MaxCompute平臺還為用戶提供了數據脫敏等功能,方便用戶使用。
原文鏈接
更多技術幹貨 請關註阿裏雲雲棲社區微信號 :yunqiinsight
MaxCompute,基於Serverless的高可用大數據服務