1. 程式人生 > >只需四步,幫助企業做好MaxCompute成本優化

只需四步,幫助企業做好MaxCompute成本優化

二級 存在 esc follow 用戶 細節 沈澱 明顯 接下來

摘要: 阿裏雲在和很多企業交流的過程中發現他們在使用MaxCompute的時候往往會遇到一些成本相關的問題,而在與客戶不但交流溝通的過程中,阿裏雲在成本優化方面也積累了大量的經驗,因此也希望能夠將這些經驗沈澱下來分享給更多的企業和開發者,本文就將與大家分享幫助企業做好MaxCompute成本優化的“四步走”戰略。

摘要:阿裏雲在和很多企業交流的過程中發現他們在使用MaxCompute的時候往往會遇到一些成本相關的問題,而在與客戶不但交流溝通的過程中,阿裏雲在成本優化方面也積累了大量的經驗,因此也希望能夠將這些經驗沈澱下來分享給更多的企業和開發者,本文就將與大家分享幫助企業做好MaxCompute成本優化的“四步走”戰略。

對於MaxCompute的成本優化而言,它絕對不是一次性的任務,而應該是持續不斷的。其實,可以將企業MaxCompute的成本優化分為四個主要的方面:正確預估、健康度定制、成本追蹤以及成本優化。首先,需要對於企業的服務規模進行預估;其次,需要做好企業資產的健康度規範的制定,就像傳統企業在進行開發時需要制定的開發規範一樣,為了保障成本不會產生更多的開銷,因此需要制定健康度規範;再次,除了企業資產健康度的制定之外,還需要進行成本的追蹤,比如消耗的追蹤以及用量的追蹤,企業需要采用一些手段以及工具來發現異常的賬單或者異常的費用;在本文的最後,也會與大家分享在真正的企業實戰中能夠使用的一些優化技巧。

一、如何做出正確的預估?


MaxCompute的計費策略
其實MaxCompute提供了兩種計費方式,第一種是預付費,第二種是後付費。預付費的計算資源是包月或者包年的,想當於每個CU 150元每個月,它的存儲和下載是按量後付費的。而後付費的方式則是按照存儲進行階梯定價的,基礎價格是0.0192元/GB/天起步;在計算部分,對於SQL而言,需要通過IO輸入量乘以復雜度然0.3元/GB,對於MR而言,它的計費則是按照CPU計算時計算的,每個計算時是0.46元。對於下載而言,則是按照公網下行0.8元/GB計算的,內網下行流量則是不收費的。

技術分享圖片

MaxCompute的服務選型
而阿裏雲的一些客戶經常會問到他們到底是選擇包月預付費,還是應該選擇按量後付費的問題。那麽,企業究竟應該如何正確地做好服務選型呢?這其實也是非常關鍵的一件事情。

技術分享圖片

阿裏雲為用戶提供了兩種選型工具:TCO工具和成本預估實踐。對於TCO工具而言,在阿裏雲官網上MaxCompute產品的首頁是有一個價格計算器的。對於預付費方式而言,用戶可通過輸入自己想要的數據規模以及想要的計算資源自動地計算所需要的月成本。對於後付費方式而言,阿裏雲則提供了CostSQL方法,用戶可以將自己的數據放到MaxCompute上面計算Cost,當然了這裏並不是真實的計算,而是進行預估,這樣就可以大致計算出用戶所需的費用。

技術分享圖片

此外,阿裏雲還提供了一種選型工具,就是成本預估實踐。在這裏也為大家分享一些成本預估的技巧,比如一個案例就是某一個企業需要處理1TB數據,到底這1TB數據應該購買後付費還是預付費。在當時,阿裏雲給用戶提出了兩個建議,一種是密集型計算,另外一種叫做密集型存儲,區別就是前者對於CPU資源的要求比較高。阿裏雲曾經自己做過相關的測試,對於預付費密集型計算而言,相當於使用160CU資源跑了1TB數據,大概能夠達到分鐘級別的相應速度,這樣一個月的資源相當於使用了2.4萬元的開銷。如果企業對於計算的響應時間要求不高,那麽阿裏雲還是推薦用戶使用預付費密集型存儲,大概會使用到50CU左右,一個月的開銷大約在7500元左右,但是其的響應時間是小時級別的。如果用戶選擇後付費,按照基礎的復雜度也就是1來計算,對於1TB的數據的開銷大約是300元每天,那麽一個月就應該是大約9000多元,當然這是單次計算,因為預付費是包年包月的,而後付費則是按照次數計費的,如果多次進行1TB數據的計算,那麽其開銷也會成倍增加。以上這些可以供企業進行參考。其實,阿裏雲建議對於剛開始上雲的企業而言,可以先開通後付費,然後將數據放到後付費裏面去做POC測試,看看自己的任務大概需要消耗多少Worker,通過Worker數就能推算出CU數量,這樣就能大概估算出最終需要購買資源的數量,這也是一個經驗技巧。

技術分享圖片

此外,一些Hadoop用戶也希望做上雲遷移,那麽他們到底需要購買多少資源呢?舉例而言,某個Hadoop集群可能有1個管控節點以及5臺計算節點,每臺機器32核,也就相當於是32個CPU,那麽5臺計算節點就是160個CPU,這樣計算下來就相當於是每個月2.4萬的這樣的目錄價,也就是標準的官方報價,也就是沒有計算任何折扣或者優惠的價格,而實際上對於MaxCompute而言,在阿裏雲上定期會有一些折扣活動。技術分享圖片

另外一點,就是當用戶選擇了MaxCompute之後,無需考慮管控節點,這樣一來就節省了管控節點的費用。還有MaxCompute比Hive性能快80%,且免運維,又節省了至少一倍的成本。此外,一旦企業選擇了預付費的服務,發現購買了50CU,但是不夠使用,比如因為業務突然增長導致數據量也突然變大了,而此時企業可以非常方便地選擇MaxCompute提供的數加服務,用戶可以非常容易地進行升配或者降配的工作,此外還可以進行付費方式的轉換,可以從預付費轉成後付費,也可以從後付費轉換成預付費,這些都是非常方便的,能夠幫助用戶靈活地選擇和轉變付費方式。
技術分享圖片

二、健康度制定
在本文的第一節中,為大家分享了企業如何做好上雲的預估。在上雲之後,企業要做的就需要制定相應的規範了,但是這樣的規範並不能與傳統的開發規範混為一談。在這一節裏面,主要與大家分享成本企業資產的健康度規範,當有了這套規範之後,企業中的開發小組就能夠更好地約束ETL工程師以及數據分析師等的開銷,這樣只有在團隊中每個人身上都培養起節約成本的文化,企業的資產才能做好優化。對於資產健康度而言,主要分為兩部分:計算和存儲,MaxCompute的主要資源消耗也就是產生在計算和存儲兩部分上。
技術分享圖片

計算健康度
這裏為企業計算健康度提供了一些參考,當然了具體如何計算還是需要根據企業具體的規模、投入資源以及自身情況制定。對於計算健康度而言,可以將其作為百分制計算。如果出現了數據傾斜、全表暴力掃描以及相似計算等不良的SQL可以對於健康度進行扣分,而這些扣分項是最終要定位到責任人的,這樣團隊成員才會不斷地優化自己的SQL以及開發習慣,這樣一來整體的SQL計算效率會提高,成本也會相應地下降。
技術分享圖片

存儲健康度
對於存儲健康度而言,同樣可以采用百分制,企業可以對於不經常使用到數據表,比如一些廢棄表、空表以及未管理表等進行約束或者規範。
技術分享圖片

三、成本追蹤
在分享完企業資產健康度規範的制定之後,接下來為大家分享如何追蹤成本的消耗。因為很多企業在使用MaxCompute有時候會發現一些異常賬單,因此這一部分也將與大家分享一些企業自查的方法,其實自查方法也是比較簡單的,其實企業不用通過阿裏雲的幫助也能夠自己完成。

成本管理工具
阿裏雲為企業提供了三個成本管理工具:賬單明細,大家可以在阿裏雲的費用中心看到;使用記錄,也就是阿裏內部叫做OMS的東西,它會記錄每條SQL的使用記錄,復雜度、計量時間以及一天24小時的存儲情況和下行流量等明細記錄;命令行工具,用戶可以通過命令行工具還原用戶的操作,可以還原出用戶當時使用的SQL到底是怎麽樣的,如何產生了所謂的“貴SQL”。

1) 賬單明細
對於賬單明細而言,預付費大概的出賬時間是在次日的12點左右,後付費的出賬時間是次日的9點左右,所以如果大家關心自己的賬單就可以等到第二天相應的時間段到阿裏雲的消費中心看自己的消費明細。
技術分享圖片

2) 使用記錄
當用戶在自己的賬單裏面發現某一個Project的計費可能突然在某一天達到了幾千元,可能是平常賬單的多倍,這樣的異常就需要關註,因此就需要去探查它的明細,這時候就需要去阿裏雲內部的使用記錄裏面查看。如果是後付費的用戶則可以導出後付費的使用記錄,如下圖所示的就是一張阿裏雲消費明細的使用記錄,它是一張Excel表格的形式,這裏面有每個SQL的InstanceID,也就是用戶Job任務的ID,通過這個ID可以借助一些還原工具來反查InstanceID對應的SQL到底是什麽。大家可以看到,在下圖中標紅的是異常情況非常明顯的SQL量,雖然絕對數字僅有2元,但是相對而言比平常的數據高了很多,這也就是異常的賬單。那麽如何看使用記錄呢?其實大家可以重點看幾項,ComputationSQL數據分類下數據的讀取量以及SQL的復雜度是比較關鍵的信息,用SQL的讀取量轉換成GB乘以復雜度,再乘以0.3就是出賬的金額。其實通過這個公式反推一下也能夠很容易地獲得消費明細。
技術分享圖片

對於存儲費用而言,相當於1天有24次,按照小時推送計量信息。計算存儲價格時需要將字節數相加並做一個24小時的平均值,取出來之後再按照階梯定價的公式進行計算最終得到存儲價格。在下圖中標紅的部分指的是結束時間,之所以標記這個區域是因為天的計量信息是以每一條任務的結束時間為準,也就是如果某條任務的結束時間是第二天淩晨,那麽這條任務的計量時間就會計入第二天,不會計入第一天,這也是大家在做計量處理的時候需要註意的細節。
技術分享圖片

對於MR部分,首先有一個數據分類是MapReduce,其次對於MR作業的費用計算有這樣的一個Core*Second這樣的一個類,因為其精確到秒級,所以需要轉換成小時級別,因此需要除以3600並乘以標準計價0.46,這樣就能夠得到MR使用記錄的開銷。
技術分享圖片

對於下載費用而言,其實它的計算比較簡單。內網也就是經典網絡的下行流量是不收費的,上行也是不收費的。只有走公網的時候,下行流量才會計費,在數據分類中有一個DownloadEx,這就對應了下行的數據量,將其轉化成GB並乘以0.8元/GB,這樣就可以得到下載明細了。
技術分享圖片

3) 命令行
當發現所謂的“貴SQL”的時候,應該如何還原它呢?因為當我們看到instid以及jobid並不能具有太多的感知和感覺,因此需要一些工具來介入進行SQL還原。這裏有幾個常用的方法,第一個就是當拿到instid的時候直接使用wait命令來獲取logview,也就是獲取SQL的詳細日誌,並將logview打印出來看一下當時究竟進行了什麽樣的SQL處理。還有一種方法就是“desc instance instid”,這種方法更為直接,可以直接將SQL顯示在控制臺裏面,這兩種方法都可以幫助用戶更好地還原SQL信息。而第一種獲取logview需要註意目前存在一個關於時間周期的問題,可能目前只能獲取大約1周7天之內的logview信息,更早的信息或許是無法獲得的。

四、成本優化
分享完成本追溯或者說是開銷的查看之後,接下來和大家分享在公共雲上針對於企業所遇到的一些“貴SQL”或者“貴存儲”問題的優化技巧。

計算作業
對於計算作業而言,遇到最多的問題可能就是全表掃描,大部分企業公有雲的“貴SQL”都是由全表掃描引起的。還有一個比較典型的問題就是新手因為頻繁調度引起“貴SQL”,因為調度頻繁就可能會產生任務的堆積,在後付費的情況下會造成排隊現象,如果任務多又出現了排隊,那麽異常賬單會出現在第二天,所以可能令人感覺當天沒有問題,然而第二天就發現問題很大。

1) 控制全表掃描
在控制全表掃描部分的優化策略將重點論述幾個關鍵點。第一點就是養成加分區列的習慣,這樣可以幫助我們降低數據規模。預付費的模式可能不需要太多考慮IO問題和計算資源以及成本問題,但是預付費同樣也會遇到另外一個問題,就是如果開發習慣不夠好,那麽就會引起性能的問題,這就可能會導致預付費大排隊,其他的資源都在等待,同樣會影響到企業的開發效率。第二點就是在進行Join的時候,一定要先做分區裁剪在做Join,不然的話就可能會先做全表掃描。最後還有一種方法來控制全表掃描,就是阿裏雲最近推出的對於全表掃描的開關,其可以做到Session級別也可以做到Project級別,阿裏雲更加推薦使用Project級別的開關,運維的同學可以將這個開關打開來禁止全表掃描,如此就能有效地幫助企業控制成本。
技術分享圖片

2) 避免頻繁調度
大家經常會遇到調度周期修改得比較頻繁的情況,因為MaxCompute是批量計算的服務,雖然MaxCompute一直在向實時計算的方向上不斷演進,但是其距離實時的計算服務還是存在一定距離的。因此間隔時間變短,計算頻率的增加,再加上SQL的不良習慣或者較差的健康度就會導致計算費用飆升,也就會產生異常的貴賬單。所以在企業做頻繁調度之前一定要通過CostSQL等方式預估一下SQL的開銷到底有多大,當大家心裏真正有底才能上到生產環境運行,不然會造成較大的開銷。
技術分享圖片

存儲
對於存儲而言,這裏有三個主要的關鍵點。第一個關鍵點就是要合理地進行數據分區;其次,要合理地設置表的生命周期;最後要定期地刪除廢表。

1) 合理設置數據分區
對於MaxCompute而言,首先要設置數據分區,讓數據更好地分組。其實每個分區都可以認為是一個目錄,那麽就可以按照目錄進行數據分組就好了。一般而言,推薦使用二級分區。因為最大的單表也就支持6萬個分區,分區過多也會影響分區數。所以,對於企業而言,首先需要學會做分區,其次一般而言做二級分區就可以了。可以通過日期,比如天和小時,或者地域和城市實現二級分區,這樣基本上就可以滿足業務需求。
技術分享圖片

2) 設置合理的生命周期
很多時候,大家會發現在自己的數倉裏面,很多的表都是臨時表。對於臨時表而言,如果最初不加生命周期,那麽管理起來就會很困難,所以建議對於臨時表加上生命周期,比如一個月。當過了設定的生命周期之後,系統就會自動地將臨時表刪除掉,同時也實現了企業存儲空間的節省以及費用的下降。
技術分享圖片

3) 刪除訪問跨度大的廢表
最後一點就是定期地刪除訪問跨度大的廢表,所謂訪問跨度大就是長期不會訪問的表,對於這些表需要作出定期的清理,因為這些表的意義並不大,因此一定要做好資產的管理和表的管理。
技術分享圖片

以上就是關於企業MaxCompute成本優化的實踐的分享,更多精彩的分享也會在雲棲社區不斷更新,希望大家持續關註。
技術分享圖片
原文鏈接請添加鏈接描述

本文為雲棲社區原創內容,未經允許不得轉載。

只需四步,幫助企業做好MaxCompute成本優化