要:?阿里云在和很多企業(yè)交流的過程中發(fā)現(xiàn)他們在使用MaxCompute的時(shí)候往往會(huì)遇到一些成本相關(guān)的問題,而在與客戶不但交流溝通的過程中,阿里云在成本優(yōu)化方面也積累了大量的經(jīng)驗(yàn),因此也希望能夠?qū)⑦@些經(jīng)驗(yàn)沉淀下來分享給更多的企業(yè)和開發(fā)者,本文就將與大家分享幫助企業(yè)做好MaxCompute成本優(yōu)化的“四步走”戰(zhàn)略。
摘要:阿里云在和很多企業(yè)交流的過程中發(fā)現(xiàn)他們在使用MaxCompute的時(shí)候往往會(huì)遇到一些成本相關(guān)的問題,而在與客戶不但交流溝通的過程中,阿里云在成本優(yōu)化方面也積累了大量的經(jīng)驗(yàn),因此也希望能夠?qū)⑦@些經(jīng)驗(yàn)沉淀下來分享給更多的企業(yè)和開發(fā)者,本文就將與大家分享幫助企業(yè)做好MaxCompute成本優(yōu)化的“四步走”戰(zhàn)略。
以下內(nèi)容根據(jù)演講視頻以及PPT整理而成。
本次演講視頻分享,請戳這里!
本次演講PPT下載,請戳這里!
關(guān)于MaxCompute更多精彩文章,請移步云棲社區(qū)MaxCompute公眾號(hào)!
對于MaxCompute的成本優(yōu)化而言,它絕對不是一次性的任務(wù),而應(yīng)該是持續(xù)不斷的。其實(shí),可以將企業(yè)MaxCompute的成本優(yōu)化分為四個(gè)主要的方面:正確預(yù)估、健康度定制、成本追蹤以及成本優(yōu)化。首先,需要對于企業(yè)的服務(wù)規(guī)模進(jìn)行預(yù)估;其次,需要做好企業(yè)資產(chǎn)的健康度規(guī)范的制定,就像傳統(tǒng)企業(yè)在進(jìn)行開發(fā)時(shí)需要制定的開發(fā)規(guī)范一樣,為了保障成本不會(huì)產(chǎn)生更多的開銷,因此需要制定健康度規(guī)范;再次,除了企業(yè)資產(chǎn)健康度的制定之外,還需要進(jìn)行成本的追蹤,比如消耗的追蹤以及用量的追蹤,企業(yè)需要采用一些手段以及工具來發(fā)現(xiàn)異常的賬單或者異常的費(fèi)用;在本文的最后,也會(huì)與大家分享在真正的企業(yè)實(shí)戰(zhàn)中能夠使用的一些優(yōu)化技巧。
一、如何做出正確的預(yù)估?
MaxCompute的計(jì)費(fèi)策略
其實(shí)MaxCompute提供了兩種計(jì)費(fèi)方式,第一種是預(yù)付費(fèi),第二種是后付費(fèi)。預(yù)付費(fèi)的計(jì)算資源是包月或者包年的,想當(dāng)于每個(gè)CU 150元每個(gè)月,它的存儲(chǔ)和下載是按量后付費(fèi)的。而后付費(fèi)的方式則是按照存儲(chǔ)進(jìn)行階梯定價(jià)的,基礎(chǔ)價(jià)格是0.0192元/GB/天起步;在計(jì)算部分,對于SQL而言,需要通過IO輸入量乘以復(fù)雜度然0.3元/GB,對于MR而言,它的計(jì)費(fèi)則是按照CPU計(jì)算時(shí)計(jì)算的,每個(gè)計(jì)算時(shí)是0.46元。對于下載而言,則是按照公網(wǎng)下行0.8元/GB計(jì)算的,內(nèi)網(wǎng)下行流量則是不收費(fèi)的。
MaxCompute的服務(wù)選型
而阿里云的一些客戶經(jīng)常會(huì)問到他們到底是選擇包月預(yù)付費(fèi),還是應(yīng)該選擇按量后付費(fèi)的問題。那么,企業(yè)究竟應(yīng)該如何正確地做好服務(wù)選型呢?這其實(shí)也是非常關(guān)鍵的一件事情。
阿里云為用戶提供了兩種選型工具:TCO工具和成本預(yù)估實(shí)踐。對于TCO工具而言,在阿里云官網(wǎng)上MaxCompute產(chǎn)品的首頁是有一個(gè)價(jià)格計(jì)算器的。對于預(yù)付費(fèi)方式而言,用戶可通過輸入自己想要的數(shù)據(jù)規(guī)模以及想要的計(jì)算資源自動(dòng)地計(jì)算所需要的月成本。對于后付費(fèi)方式而言,阿里云則提供了CostSQL方法,用戶可以將自己的數(shù)據(jù)放到MaxCompute上面計(jì)算Cost,當(dāng)然了這里并不是真實(shí)的計(jì)算,而是進(jìn)行預(yù)估,這樣就可以大致計(jì)算出用戶所需的費(fèi)用。
此外,阿里云還提供了一種選型工具,就是成本預(yù)估實(shí)踐。在這里也為大家分享一些成本預(yù)估的技巧,比如一個(gè)案例就是某一個(gè)企業(yè)需要處理1TB數(shù)據(jù),到底這1TB數(shù)據(jù)應(yīng)該購買后付費(fèi)還是預(yù)付費(fèi)。在當(dāng)時(shí),阿里云給用戶提出了兩個(gè)建議,一種是密集型計(jì)算,另外一種叫做密集型存儲(chǔ),區(qū)別就是前者對于CPU資源的要求比較高。阿里云曾經(jīng)自己做過相關(guān)的測試,對于預(yù)付費(fèi)密集型計(jì)算而言,相當(dāng)于使用160CU資源跑了1TB數(shù)據(jù),大概能夠達(dá)到分鐘級別的相應(yīng)速度,這樣一個(gè)月的資源相當(dāng)于使用了2.4萬元的開銷。如果企業(yè)對于計(jì)算的響應(yīng)時(shí)間要求不高,那么阿里云還是推薦用戶使用預(yù)付費(fèi)密集型存儲(chǔ),大概會(huì)使用到50CU左右,一個(gè)月的開銷大約在7500元左右,但是其的響應(yīng)時(shí)間是小時(shí)級別的。如果用戶選擇后付費(fèi),按照基礎(chǔ)的復(fù)雜度也就是1來計(jì)算,對于1TB的數(shù)據(jù)的開銷大約是300元每天,那么一個(gè)月就應(yīng)該是大約9000多元,當(dāng)然這是單次計(jì)算,因?yàn)轭A(yù)付費(fèi)是包年包月的,而后付費(fèi)則是按照次數(shù)計(jì)費(fèi)的,如果多次進(jìn)行1TB數(shù)據(jù)的計(jì)算,那么其開銷也會(huì)成倍增加。以上這些可以供企業(yè)進(jìn)行參考。其實(shí),阿里云建議對于剛開始上云的企業(yè)而言,可以先開通后付費(fèi),然后將數(shù)據(jù)放到后付費(fèi)里面去做POC測試,看看自己的任務(wù)大概需要消耗多少Worker,通過Worker數(shù)就能推算出CU數(shù)量,這樣就能大概估算出最終需要購買資源的數(shù)量,這也是一個(gè)經(jīng)驗(yàn)技巧。
此外,一些Hadoop用戶也希望做上云遷移,那么他們到底需要購買多少資源呢?舉例而言,某個(gè)Hadoop集群可能有1個(gè)管控節(jié)點(diǎn)以及5臺(tái)計(jì)算節(jié)點(diǎn),每臺(tái)機(jī)器32核,也就相當(dāng)于是32個(gè)CPU,那么5臺(tái)計(jì)算節(jié)點(diǎn)就是160個(gè)CPU,這樣計(jì)算下來就相當(dāng)于是每個(gè)月2.4萬的這樣的目錄價(jià),也就是標(biāo)準(zhǔn)的官方報(bào)價(jià),也就是沒有計(jì)算任何折扣或者優(yōu)惠的價(jià)格,而實(shí)際上對于MaxCompute而言,在阿里云上定期會(huì)有一些折扣活動(dòng)。
另外一點(diǎn),就是當(dāng)用戶選擇了MaxCompute之后,無需考慮管控節(jié)點(diǎn),這樣一來就節(jié)省了管控節(jié)點(diǎn)的費(fèi)用。還有MaxCompute比Hive性能快80%,且免運(yùn)維,又節(jié)省了至少一倍的成本。此外,一旦企業(yè)選擇了預(yù)付費(fèi)的服務(wù),發(fā)現(xiàn)購買了50CU,但是不夠使用,比如因?yàn)闃I(yè)務(wù)突然增長導(dǎo)致數(shù)據(jù)量也突然變大了,而此時(shí)企業(yè)可以非常方便地選擇MaxCompute提供的數(shù)加服務(wù),用戶可以非常容易地進(jìn)行升配或者降配的工作,此外還可以進(jìn)行付費(fèi)方式的轉(zhuǎn)換,可以從預(yù)付費(fèi)轉(zhuǎn)成后付費(fèi),也可以從后付費(fèi)轉(zhuǎn)換成預(yù)付費(fèi),這些都是非常方便的,能夠幫助用戶靈活地選擇和轉(zhuǎn)變付費(fèi)方式。
二、健康度制定
在本文的第一節(jié)中,為大家分享了企業(yè)如何做好上云的預(yù)估。在上云之后,企業(yè)要做的就需要制定相應(yīng)的規(guī)范了,但是這樣的規(guī)范并不能與傳統(tǒng)的開發(fā)規(guī)范混為一談。在這一節(jié)里面,主要與大家分享成本企業(yè)資產(chǎn)的健康度規(guī)范,當(dāng)有了這套規(guī)范之后,企業(yè)中的開發(fā)小組就能夠更好地約束ETL工程師以及數(shù)據(jù)分析師等的開銷,這樣只有在團(tuán)隊(duì)中每個(gè)人身上都培養(yǎng)起節(jié)約成本的文化,企業(yè)的資產(chǎn)才能做好優(yōu)化。對于資產(chǎn)健康度而言,主要分為兩部分:計(jì)算和存儲(chǔ),MaxCompute的主要資源消耗也就是產(chǎn)生在計(jì)算和存儲(chǔ)兩部分上。
計(jì)算健康度
這里為企業(yè)計(jì)算健康度提供了一些參考,當(dāng)然了具體如何計(jì)算還是需要根據(jù)企業(yè)具體的規(guī)模、投入資源以及自身情況制定。對于計(jì)算健康度而言,可以將其作為百分制計(jì)算。如果出現(xiàn)了數(shù)據(jù)傾斜、全表暴力掃描以及相似計(jì)算等不良的SQL可以對于健康度進(jìn)行扣分,而這些扣分項(xiàng)是最終要定位到責(zé)任人的,這樣團(tuán)隊(duì)成員才會(huì)不斷地優(yōu)化自己的SQL以及開發(fā)習(xí)慣,這樣一來整體的SQL計(jì)算效率會(huì)提高,成本也會(huì)相應(yīng)地下降。
存儲(chǔ)健康度
對于存儲(chǔ)健康度而言,同樣可以采用百分制,企業(yè)可以對于不經(jīng)常使用到數(shù)據(jù)表,比如一些廢棄表、空表以及未管理表等進(jìn)行約束或者規(guī)范。
三、成本追蹤
在分享完企業(yè)資產(chǎn)健康度規(guī)范的制定之后,接下來為大家分享如何追蹤成本的消耗。因?yàn)楹芏嗥髽I(yè)在使用MaxCompute有時(shí)候會(huì)發(fā)現(xiàn)一些異常賬單,因此這一部分也將與大家分享一些企業(yè)自查的方法,其實(shí)自查方法也是比較簡單的,其實(shí)企業(yè)不用通過阿里云的幫助也能夠自己完成。
成本管理工具
阿里云為企業(yè)提供了三個(gè)成本管理工具:賬單明細(xì),大家可以在阿里云的費(fèi)用中心看到;使用記錄,也就是阿里內(nèi)部叫做OMS的東西,它會(huì)記錄每條SQL的使用記錄,復(fù)雜度、計(jì)量時(shí)間以及一天24小時(shí)的存儲(chǔ)情況和下行流量等明細(xì)記錄;命令行工具,用戶可以通過命令行工具還原用戶的操作,可以還原出用戶當(dāng)時(shí)使用的SQL到底是怎么樣的,如何產(chǎn)生了所謂的“貴SQL”。
1) 賬單明細(xì)
對于賬單明細(xì)而言,預(yù)付費(fèi)大概的出賬時(shí)間是在次日的12點(diǎn)左右,后付費(fèi)的出賬時(shí)間是次日的9點(diǎn)左右,所以如果大家關(guān)心自己的賬單就可以等到第二天相應(yīng)的時(shí)間段到阿里云的消費(fèi)中心看自己的消費(fèi)明細(xì)。
2) 使用記錄
當(dāng)用戶在自己的賬單里面發(fā)現(xiàn)某一個(gè)Project的計(jì)費(fèi)可能突然在某一天達(dá)到了幾千元,可能是平常賬單的多倍,這樣的異常就需要關(guān)注,因此就需要去探查它的明細(xì),這時(shí)候就需要去阿里云內(nèi)部的使用記錄里面查看。如果是后付費(fèi)的用戶則可以導(dǎo)出后付費(fèi)的使用記錄,如下圖所示的就是一張阿里云消費(fèi)明細(xì)的使用記錄,它是一張Excel表格的形式,這里面有每個(gè)SQL的InstanceID,也就是用戶Job任務(wù)的ID,通過這個(gè)ID可以借助一些還原工具來反查InstanceID對應(yīng)的SQL到底是什么。大家可以看到,在下圖中標(biāo)紅的是異常情況非常明顯的SQL量,雖然絕對數(shù)字僅有2元,但是相對而言比平常的數(shù)據(jù)高了很多,這也就是異常的賬單。那么如何看使用記錄呢?其實(shí)大家可以重點(diǎn)看幾項(xiàng),ComputationSQL數(shù)據(jù)分類下數(shù)據(jù)的讀取量以及SQL的復(fù)雜度是比較關(guān)鍵的信息,用SQL的讀取量轉(zhuǎn)換成GB乘以復(fù)雜度,再乘以0.3就是出賬的金額。其實(shí)通過這個(gè)公式反推一下也能夠很容易地獲得消費(fèi)明細(xì)。
對于存儲(chǔ)費(fèi)用而言,相當(dāng)于1天有24次,按照小時(shí)推送計(jì)量信息。計(jì)算存儲(chǔ)價(jià)格時(shí)需要將字節(jié)數(shù)相加并做一個(gè)24小時(shí)的平均值,取出來之后再按照階梯定價(jià)的公式進(jìn)行計(jì)算最終得到存儲(chǔ)價(jià)格。在下圖中標(biāo)紅的部分指的是結(jié)束時(shí)間,之所以標(biāo)記這個(gè)區(qū)域是因?yàn)樘斓挠?jì)量信息是以每一條任務(wù)的結(jié)束時(shí)間為準(zhǔn),也就是如果某條任務(wù)的結(jié)束時(shí)間是第二天凌晨,那么這條任務(wù)的計(jì)量時(shí)間就會(huì)計(jì)入第二天,不會(huì)計(jì)入第一天,這也是大家在做計(jì)量處理的時(shí)候需要注意的細(xì)節(jié)。
對于MR部分,首先有一個(gè)數(shù)據(jù)分類是MapReduce,其次對于MR作業(yè)的費(fèi)用計(jì)算有這樣的一個(gè)Core*Second這樣的一個(gè)類,因?yàn)槠渚_到秒級,所以需要轉(zhuǎn)換成小時(shí)級別,因此需要除以3600并乘以標(biāo)準(zhǔn)計(jì)價(jià)0.46,這樣就能夠得到MR使用記錄的開銷。
對于下載費(fèi)用而言,其實(shí)它的計(jì)算比較簡單。內(nèi)網(wǎng)也就是經(jīng)典網(wǎng)絡(luò)的下行流量是不收費(fèi)的,上行也是不收費(fèi)的。只有走公網(wǎng)的時(shí)候,下行流量才會(huì)計(jì)費(fèi),在數(shù)據(jù)分類中有一個(gè)DownloadEx,這就對應(yīng)了下行的數(shù)據(jù)量,將其轉(zhuǎn)化成GB并乘以0.8元/GB,這樣就可以得到下載明細(xì)了。
3) 命令行
當(dāng)發(fā)現(xiàn)所謂的“貴SQL”的時(shí)候,應(yīng)該如何還原它呢?因?yàn)楫?dāng)我們看到instid以及jobid并不能具有太多的感知和感覺,因此需要一些工具來介入進(jìn)行SQL還原。這里有幾個(gè)常用的方法,第一個(gè)就是當(dāng)拿到instid的時(shí)候直接使用wait命令來獲取logview,也就是獲取SQL的詳細(xì)日志,并將logview打印出來看一下當(dāng)時(shí)究竟進(jìn)行了什么樣的SQL處理。還有一種方法就是“desc instance instid”,這種方法更為直接,可以直接將SQL顯示在控制臺(tái)里面,這兩種方法都可以幫助用戶更好地還原SQL信息。而第一種獲取logview需要注意目前存在一個(gè)關(guān)于時(shí)間周期的問題,可能目前只能獲取大約1周7天之內(nèi)的logview信息,更早的信息或許是無法獲得的。
四、成本優(yōu)化
分享完成本追溯或者說是開銷的查看之后,接下來和大家分享在公共云上針對于企業(yè)所遇到的一些“貴SQL”或者“貴存儲(chǔ)”問題的優(yōu)化技巧。
計(jì)算作業(yè)
對于計(jì)算作業(yè)而言,遇到最多的問題可能就是全表掃描,大部分企業(yè)公有云的“貴SQL”都是由全表掃描引起的。還有一個(gè)比較典型的問題就是新手因?yàn)轭l繁調(diào)度引起“貴SQL”,因?yàn)檎{(diào)度頻繁就可能會(huì)產(chǎn)生任務(wù)的堆積,在后付費(fèi)的情況下會(huì)造成排隊(duì)現(xiàn)象,如果任務(wù)多又出現(xiàn)了排隊(duì),那么異常賬單會(huì)出現(xiàn)在第二天,所以可能令人感覺當(dāng)天沒有問題,然而第二天就發(fā)現(xiàn)問題很大。
1)?? ?控制全表掃描
在控制全表掃描部分的優(yōu)化策略將重點(diǎn)論述幾個(gè)關(guān)鍵點(diǎn)。第一點(diǎn)就是養(yǎng)成加分區(qū)列的習(xí)慣,這樣可以幫助我們降低數(shù)據(jù)規(guī)模。預(yù)付費(fèi)的模式可能不需要太多考慮IO問題和計(jì)算資源以及成本問題,但是預(yù)付費(fèi)同樣也會(huì)遇到另外一個(gè)問題,就是如果開發(fā)習(xí)慣不夠好,那么就會(huì)引起性能的問題,這就可能會(huì)導(dǎo)致預(yù)付費(fèi)大排隊(duì),其他的資源都在等待,同樣會(huì)影響到企業(yè)的開發(fā)效率。第二點(diǎn)就是在進(jìn)行Join的時(shí)候,一定要先做分區(qū)裁剪在做Join,不然的話就可能會(huì)先做全表掃描。最后還有一種方法來控制全表掃描,就是阿里云最近推出的對于全表掃描的開關(guān),其可以做到Session級別也可以做到Project級別,阿里云更加推薦使用Project級別的開關(guān),運(yùn)維的同學(xué)可以將這個(gè)開關(guān)打開來禁止全表掃描,如此就能有效地幫助企業(yè)控制成本。
2)?? ?避免頻繁調(diào)度
大家經(jīng)常會(huì)遇到調(diào)度周期修改得比較頻繁的情況,因?yàn)镸axCompute是批量計(jì)算的服務(wù),雖然MaxCompute一直在向?qū)崟r(shí)計(jì)算的方向上不斷演進(jìn),但是其距離實(shí)時(shí)的計(jì)算服務(wù)還是存在一定距離的。因此間隔時(shí)間變短,計(jì)算頻率的增加,再加上SQL的不良習(xí)慣或者較差的健康度就會(huì)導(dǎo)致計(jì)算費(fèi)用飆升,也就會(huì)產(chǎn)生異常的貴賬單。所以在企業(yè)做頻繁調(diào)度之前一定要通過CostSQL等方式預(yù)估一下SQL的開銷到底有多大,當(dāng)大家心里真正有底才能上到生產(chǎn)環(huán)境運(yùn)行,不然會(huì)造成較大的開銷。
存儲(chǔ)
對于存儲(chǔ)而言,這里有三個(gè)主要的關(guān)鍵點(diǎn)。第一個(gè)關(guān)鍵點(diǎn)就是要合理地進(jìn)行數(shù)據(jù)分區(qū);其次,要合理地設(shè)置表的生命周期;最后要定期地刪除廢表。
1)?? ?合理設(shè)置數(shù)據(jù)分區(qū)
對于MaxCompute而言,首先要設(shè)置數(shù)據(jù)分區(qū),讓數(shù)據(jù)更好地分組。其實(shí)每個(gè)分區(qū)都可以認(rèn)為是一個(gè)目錄,那么就可以按照目錄進(jìn)行數(shù)據(jù)分組就好了。一般而言,推薦使用二級分區(qū)。因?yàn)樽畲蟮膯伪硪簿椭С?萬個(gè)分區(qū),分區(qū)過多也會(huì)影響分區(qū)數(shù)。所以,對于企業(yè)而言,首先需要學(xué)會(huì)做分區(qū),其次一般而言做二級分區(qū)就可以了??梢酝ㄟ^日期,比如天和小時(shí),或者地域和城市實(shí)現(xiàn)二級分區(qū),這樣基本上就可以滿足業(yè)務(wù)需求。
2)?? ?設(shè)置合理的生命周期
很多時(shí)候,大家會(huì)發(fā)現(xiàn)在自己的數(shù)倉里面,很多的表都是臨時(shí)表。對于臨時(shí)表而言,如果最初不加生命周期,那么管理起來就會(huì)很困難,所以建議對于臨時(shí)表加上生命周期,比如一個(gè)月。當(dāng)過了設(shè)定的生命周期之后,系統(tǒng)就會(huì)自動(dòng)地將臨時(shí)表刪除掉,同時(shí)也實(shí)現(xiàn)了企業(yè)存儲(chǔ)空間的節(jié)省以及費(fèi)用的下降。
3)?? ?刪除訪問跨度大的廢表
最后一點(diǎn)就是定期地刪除訪問跨度大的廢表,所謂訪問跨度大就是長期不會(huì)訪問的表,對于這些表需要作出定期的清理,因?yàn)檫@些表的意義并不大,因此一定要做好資產(chǎn)的管理和表的管理。
以上就是關(guān)于企業(yè)MaxCompute成本優(yōu)化的實(shí)踐的分享,更多精彩的分享也會(huì)在云棲社區(qū)不斷更新,希望大家持續(xù)關(guān)注。
本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。
評論