本篇内容
分享人: 哈白 阿里云智能 技术专家
视频地址:https://yqh.aliyun.com/live/detail/21707
本篇主要通过3个部分介绍如何控制MaxCompute 的资源使用和消费。
- MaxCompute的计费模式
- 消费预警
- 消费控制
一、MaxCompute的计费模式
MaxCompute分为三种资源,分别是计算、存储和下载流量,其中计算占费用的主要部分,其次是下载流量,最后是存储。MaxCompute为计算和下载流量的计费都提供了预警和控制的能力,对于这几种资源MaxCompute也都提供了三种计费模式。
1)包年包月
这种方式需要预先购买一定的资源,使用时就在这部分资源内进行使用,如果对资源的需求过多,就可能会出现排队等资源的问题。
2)按量计费
这种计费方式,不需要预先购买一定的资源,只需在完成作业后根据使用的资源量来进行计算费用。
3)同时使用包年包月和按量计费
这是一种是比较新的方式,也就是在包年包月的基础上开通一个项目的按量计费能力。
二、消费预警
为什么要进行消费预警和控制?
对于包年包月的套餐模式经常会遇到一些问题,比如,资源使用过满、资源被某一个特别大的作业占满、提交的作业太多,其他人把自己的Quota组占满了,这个时候就需要及时知道发生的状况并做处理,否则就会无法执行。
对于按量付费计费模式也是如此。比如,某些用户提交了全表扫描、一些定时跑的任务输入数据表的数据量突然增大、某些用户突然提交了大量的作业,有可能是操作失误,也有可能是提交作业的逻辑程序有bug,在按量付费的情况下,会造成更加严重的问题。
所以在面对这些情况的时候,必须有一种机制帮助用户提前预警消费资源使用。并且这种按量的付费,还能帮助用户去控制消费的额度。
从消费预警来讲起,MaxCompute是通过云监控来实现消费预警的。
上图是一个云监控的页面,在上面可以配置一些报警的阈值,还有一些资源使用,资源占用的阈值。包年包月主要是对资源使用量进行报警。
还可以对按量付费进行创建报警规则(如上图)。这个时候单位就可以选择人民币了。
包年包月还有用户级的,方法也是一样,都是对于一个用户下所有的Quota组进行报警。
另外还可以对下载流量进行预警。
在产品部分选择MaxCompute通用,而不是包年包月或按量计费。再选择资源范围和地域,规则按照图中的配置,报警的阈值单位是兆,也就是当下载量超过一定MB的时候,就会按照配置的联系人去通知进行报警。只有公网的下载会收费,vpc等内部的网络下载都不会收费。
最后还有一个,对产品整体进行消费预警。比如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可能会消费多少,如果超过了这个消费的值就会直接报错。
图中的右上图是一个例子。
阈值单位不是人民币,是SQL读取量(GB)x SQL的复杂度,直接把价格放进去会影响准确度。当执行一条SQL的时候,在没有用任何资源的时候,系统评估花费输入数据量可能是0.12037908GB,复杂度是1.0,这就超过了预设的值,无法执行这条SQL。
另外还能设置项目级,和session级不同,通过setproject这个命令把第三行中的flag设置成一个值,这一次设置就是永久生效的。退出客户端,或者DateWorks上的定时任务,或是其他用户在其他设备上重启这个客户端,都会看到这样的一个阈值,他们提交作业的时候同样也会受到这个阈值的限制。
当然,有单条SQL的控制是不够的,所以平台还提供了累计的消费控制。目前实现的是按日累计的消费控制,可以通过在项目级设置。
上图是一个例子,目前用户可以改的是SQL:后面的数值,这个单位是人民币,比如说可以设置0.5元。这时执行一句SQL并不会受到控制,因为花费没有超过,再次执行一个SQL时,累计的消费就超过0.5了。一天之内所有的SQL会累计起来,直到消费超过了设置的累计预值就不能再提交SQL了。系统会预估当前消费,和累计的消费求和,来判断预估的消费加累计的消费是否超过设的上限。这种方式就是一个实时的控制,但是实时性并不是很强,可能会产生5~10秒的延迟。它的单位是扫描的数据量(GB)乘以复杂度再乘以0.3,其中0.3是预设上去的一个单价,是可以修改的。
最后说明一点,可能有些用户会使用limit这个关键字去控制自己的消费。其实这样的控制方法是错误的,因为很多情况下limit其实都不能控制费用,比如图中的两种情况。
如果想费用控制,使用前文提到的方法为好,不要使用Limit。
以上就是对MaxCompute消费预警和控制方法的基本介绍。
更多关于大数据计算产品技术交流,可扫码加入 “MaxCompute开发者社区” 钉钉群进行咨询。