天天看點

MaxCompute消費預警與控制

本篇内容

分享人: 哈白 阿裡雲智能 技術專家

視訊位址:

https://yqh.aliyun.com/live/detail/21707 本篇主要通過3個部分介紹如何控制MaxCompute 的資源使用和消費。

  • MaxCompute的計費模式
  •  消費預警
  • 消費控制

一、MaxCompute的計費模式

MaxCompute分為三種資源,分别是計算、存儲和下載下傳流量,其中計算占費用的主要部分,其次是下載下傳流量,最後是存儲。MaxCompute為計算和下載下傳流量的計費都提供了預警和控制的能力,對于這幾種資源MaxCompute也都提供了三種計費模式。

MaxCompute消費預警與控制

1)包年包月

這種方式需要預先購買一定的資源,使用時就在這部分資源内進行使用,如果對資源的需求過多,就可能會出現排隊等資源的問題。

2)按量計費

這種計費方式,不需要預先購買一定的資源,隻需在完成作業後根據使用的資源量來進行計算費用。

3)同時使用包年包月和按量計費

這是一種是比較新的方式,也就是在包年包月的基礎上開通一個項目的按量計費能力。

二、消費預警

為什麼要進行消費預警和控制?

對于包年包月的套餐模式經常會遇到一些問題,比如,資源使用過滿、資源被某一個特别大的作業占滿、送出的作業太多,其他人把自己的Quota組占滿了,這個時候就需要及時知道發生的狀況并做處理,否則就會無法執行。

對于按量付費計費模式也是如此。比如,某些使用者送出了全表掃描、一些定時跑的任務輸入資料表的資料量突然增大、某些使用者突然送出了大量的作業,有可能是操作失誤,也有可能是送出作業的邏輯程式有bug,在按量付費的情況下,會造成更加嚴重的問題。

是以在面對這些情況的時候,必須有一種機制幫助使用者提前預警消費資源使用。并且這種按量的付費,還能幫助使用者去控制消費的額度。

從消費預警來講起,MaxCompute是通過雲監控來實作消費預警的。

MaxCompute消費預警與控制

上圖是一個雲監控的頁面,在上面可以配置一些報警的門檻值,還有一些資源使用,資源占用的門檻值。包年包月主要是對資源使用量進行報警。

MaxCompute消費預警與控制

還可以對按量付費進行建立報警規則(如上圖)。這個時候機關就可以選擇人民币了。

MaxCompute消費預警與控制

包年包月還有使用者級的,方法也是一樣,都是對于一個使用者下所有的Quota組進行報警。

MaxCompute消費預警與控制

另外還可以對下載下傳流量進行預警。

在産品部分選擇MaxCompute通用,而不是包年包月或按量計費。再選擇資源範圍和地域,規則按照圖中的配置,報警的門檻值機關是兆,也就是當下載下傳量超過一定MB的時候,就會按照配置的聯系人去通知進行報警。隻有公網的下載下傳會收費,vpc等内部的網絡下載下傳都不會收費。

MaxCompute消費預警與控制

最後還有一個,對産品整體進行消費預警。比如MaxCompute的服務,各種各樣的消費加在一起進行預警,總共的門檻值不能超過一定量。這個不是通過雲監控完成的,是阿裡雲支援的。

除此之外,還可以利用MaxCompute提供的一系列分析服務進行自己分析消費和自定義告警。

比如說有下面幾個問題:如何分析一個詳單資料?如何找到topN的消費使用者?如何找到topN的耗時任務?如何定時推送分析報告?如何統計個人賬号的資源使用情況?

舉其中一個例子,比如可以通過information schema這種機制來找到topN的消費使用者,或者是找到topN的耗時任務,在阿裡雲的官網文檔上可以找到。後面可以通過釘釘機器人推送到釘群的方法來實作對分析報告或者是報警的推送。

相關文章參考:

MaxCompute賬号費用及任務耗時TOPN統計:

https://developer.aliyun.com/article/778447

MaxCompute消費監控最佳實踐:

https://developer.aliyun.com/article/781312

三、消費控制

如果報警沒有被看到,或者消費增長的速度特别的快,就需要一種更嚴格的機制——消費控制。當消費超過設定或者期望的數量時,就會直接拒絕使用者再送出作業。消費控制主要是針對按量付費來說的,因為按量付費資源使用過多就會直接涉及到更多的消費。

MaxCompute目前提供了對于SQL的消費按量控制,需要使用odps的用戶端。下載下傳用戶端之後先把環境準備好,配置上project owner或者super admin的ak, 也可以由project owner或者super admin登入DataWorks上的臨時查詢來設定。

首先,對于單條SQL,執行之前設定一個預期的消費門檻值,送出SQL的時候系統會自動地分析這條SQL可能會消費多少,如果超過了這個消費的值就會直接報錯。

MaxCompute消費預警與控制

圖中的右上圖是一個例子。

門檻值機關不是人民币,是SQL讀取量(GB)x SQL的複雜度,直接把價格放進去會影響準确度。當執行一條SQL的時候,在沒有用任何資源的時候,系統評估花費輸入資料量可能是0.12037908GB,複雜度是1.0,這就超過了預設的值,無法執行這條SQL。

另外還能設定項目級,和session級不同,通過setproject這個指令把第三行中的flag設定成一個值,這一次設定就是永久生效的。退出用戶端,或者DateWorks上的定時任務,或是其他使用者在其他裝置上重新開機這個用戶端,都會看到這樣的一個門檻值,他們送出作業的時候同樣也會受到這個門檻值的限制。

當然,有單條SQL的控制是不夠的,是以平台還提供了累計的消費控制。目前實作的是按日累計的消費控制,可以通過在項目級設定。

MaxCompute消費預警與控制

上圖是一個例子,目前使用者可以改的是SQL:後面的數值,這個機關是人民币,比如說可以設定0.5元。這時執行一句SQL并不會受到控制,因為花費沒有超過,再次執行一個SQL時,累計的消費就超過0.5了。一天之内所有的SQL會累計起來,直到消費超過了設定的累計預值就不能再送出SQL了。系統會預估目前消費,和累計的消費求和,來判斷預估的消費加累計的消費是否超過設的上限。這種方式就是一個實時的控制,但是實時性并不是很強,可能會産生5~10秒的延遲。它的機關是掃描的資料量(GB)乘以複雜度再乘以0.3,其中0.3是預設上去的一個單價,是可以修改的。

最後說明一點,可能有些使用者會使用limit這個關鍵字去控制自己的消費。其實這樣的控制方法是錯誤的,因為很多情況下limit其實都不能控制費用,比如圖中的兩種情況。

MaxCompute消費預警與控制

如果想費用控制,使用前文提到的方法為好,不要使用Limit。

以上就是對MaxCompute消費預警和控制方法的基本介紹。

更多關于大資料計算産品技術交流,可掃碼加入 “MaxCompute開發者社群” 釘釘群進行咨詢。

MaxCompute消費預警與控制