简介: 本文次要介绍如何进行MaxCompute存储资源和计算资源的评估及布局治理。

一、MaxCompute资源布局背景介绍

MaxCompute资源次要有两类:存储资源、计算资源(蕴含cpu和内存)。存储资源用于存储MaxCompute的库表数据,计算资源用于运行sql、mr等工作。最佳的MaxCompute资源布局计划可能达到以下几个目标:
• 数据存储资源足够,既可能存储以后的所有存量库表数据,也可能存储将来一段时间的增量数据;
• 计算资源短缺,然而不能节约。计算资源量可能满足所有数据计算工作,且尽可能减少资源节约状况。这样消耗的资源费用起码;
• 被解决的数据量微小、消耗计算资源较多的大型工作,可能会将quota group资源组耗尽,造成其余工作无奈获取到计算资源而阻塞。MaxCompute资源布局计划必须可能尽量避免这种状况;
• 不同优先级的计算工作可能尽量互不烦扰,无限保障高优先级的工作获取到足够计算资源;
• 可能满足时段的差异化资源需要,满足对资源隔离(生产/开发/自助剖析)不同工作负载的能力,防止互相烦扰,同时更大化进步资源使用率。
MaxCompute资源布局的最终目标就是可能满足上述几点需要,企业客户耗费最低资源费用的状况下,满足数据存储需要,以及数据处理工作对计算资源的需要。
本文内容次要基于阿里私有云MaxCompute环境。私有云和专有云环境的MaxCompute资源布局有比拟大的差别,比方:在私有云环境,存储资源和计算资源是应用整个阿里云区域的资源池,简直不必放心底层到底有多少台服务器进行撑持,能够近乎认为私有云底层的资源池是有限的;然而在专有云环境,整个专有云都是企业客户独享的资源,必须依据存储资源和计算资源量布局服务器数量&&服务器规格。本文次要探讨私有云MaxCompute的资源布局。

二、MaxCompute存储资源布局

2.1 计存比

在介绍存储计划抉择之前,先说一个罕用的概念:“计存比”。计存比就是计算CU数量和理论存储数量TB的比值。比方资源分配:50CU计算资源,存储数据量是10TB。那么,50CU/10TB=5,计存比=5。

2.2 存储资源布局倡议

对于存储资源,MaxCompute提供两种计费形式:
• 按量付费:MaxCompute以小时级别采集每个我的项目空间下以后的存储,并以 project 我的项目空间为根本单位,计算我的项目空间当天的存储平均值。而后再乘以单价(元/GB/天),最初的失去每天的存储费用。

• 套餐资源:MaxCompute包年包月套餐蕴含预留的计算资源和存储资源,每种套餐固定计算资源CU量和存储资源。套餐中的存储资源是指每天固定的存储资源,超过的局部另外按量计费。套餐资源目前只反对固定的几个套餐,见下图所示:

阿里云提供的第二种计划,三种套餐的计存比是固定的,而且计存比都在1左右。这种固定资源套餐的计存比偏低,适宜存储量大、计算工作较少的企业客户。固定资源套餐的计算资源CU量是固定的,无奈应答计算资源需求量猛增的状况。比方企业平时的数据批量解决工作能够失常运行,在双11、618等大促流动期间的数据批量解决工作就会呈现重大阻塞。
对于存储资源布局,笔者倡议:
• 当预估企业客户将来一段时间的数据存储总量比拟大(100TB以上)、计算工作少(计存比小于1.5),抉择阿里云的固定套餐资源;
• 当客户须要更加灵便的存储资源空间,同时计算资源CU量不受存储空间限度,倡议抉择按量付费形式。应用多少存储空间,耗费多少存储费用。至于计算资源CU布局,依照企业客户的理论需要,独自进行布局。

三、MaxCompute计算资源布局

3.1 MaxCompute计算资源简介

对于计算资源布局,笔者首先倡议:在我的项目测试阶段,全副都采纳按量付费形式。因为开发测试阶段,耗费的计算资源CU数量不多,采纳按量付费形式更加便宜。对于MaxCompute计算资源按量付费的计费规定,读者能够具体参考官网文档:https://help.aliyun.com/document_detail/112752.html
我的项目开发实现,正式进入到上线阶段,倡议购买包年包月的计算资源CU配额,因为是固定的CU配额,不会在阿里云公共计算资源池去抢占计算资源,能够顺利地为企业客户预留足够的CU资源。计费形式如下所示:

本章节次要介绍我的项目上线之后,如何购买适合的包年包月固定CU数量。对于计算资源布局,本文介绍在我的项目实际中罕用的两种计划:
办法1:
依照以往教训先确定计存比,而后预估数据容量,最初失去计算计算资源CU量;
办法2:
抉择在我的项目正式上线前、或者在我的项目正式上线运行一小段时间之后,评估计算资源CU耗费的CPU总时长,而后再依据不同工作独自耗费的CPU时长、工作的优先级、企业客户要求每天所有工作必须在哪个时间段运行实现,综合思考这几个因素,最初失去计算资源CU量的最小最大值,用数学表达式示意就是:

本文分两个章节别离介绍这两种罕用的计算资源预估办法。

3.2依照计存比办法预估计算资源

第一步:评估存储容量
依照3年我的项目周期计算:存储容量 = 以后数据存量 + 每月预估数据增量*月数。以后数据存量很容易失去,在数据上云实现之后就能够失去以后数据存量。每月预估数据增量须要在数据上云之后两三个月,依据增量总值除以月数,失去每月预估增量平均值。当然,如果还要思考将来数据中台承载更多业务、每月数据增量会变大等因素,能够将以后计算失去的每月预估数据增量值乘以倍数。
倡议每半年预估一次存储总容量,而后每半年调整一次计算资源CU量。
第二步:预预计存比
依照我的项目开发测试阶段、以及上线运行一两个月的状况,能够大略预预计存比。依据理论状况,计存比个别配置2-10。如果客户每天运行的数据批量解决工作很多,且sql程序计算复杂度高,计存比能够抉择10;如果客户每天运行的数据批量解决工作比拟少,且sql程序计算复杂度不高,计算比能够抉择2;如果客户每天运行的数据批量解决工作适中,sql程序计算复杂度也适中,计存比能够抉择2-10之间的适合值。
倡议每半年评估一次计存比,而后每半年调整一次计算资源CU量。
第三步:预估计算资源CU量
依照第一步预估的每半年存储资源总量,联合每半年评估的计存比值,存储资源总量 *计存比 = 计算资源CU总量。 预估失去计算资源CU总量,进而每半年利用该企业主账号调整一次MaxCompute计算资源CU总量。
依照计存比预估企业我的项目须要耗费的计算资源CU总量,有很多须要预估的变量,包含数据存储总量、计存比,很可能预估不精确。因而,该办法要求我的项目的技术负责人领有较多的我的项目施行教训,可能在每一步预估都尽可能精确。

3.3依照我的项目理论耗费CU量进行资源划分

抉择在我的项目正式上线前、或者在我的项目正式上线运行一小段时间之后,评估计算资源CU耗费的CPU总时长,而后再依据不同工作独自耗费的CPU时长、工作的优先级、企业客户要求每天所有工作必须在哪个时间段运行实现,综合思考这几个因素,最初失去计算资源耗费费用起码的最佳CU数量。

3.3.1查看计算资源耗费状况

在进行资源布局之前,须要首先搞清楚过来一段时间MaxCompute计算资源的耗费状况。读者能够参考https://help.aliyun.com/document_detail/135432.html
具体介绍如何开明和查看MaxCompute的information_schema信息。MaxCompute元数据表有很多,本文只须要利用到一张表:TASKS_HISTORY。这张元数据表记录了所有MaxCompute 计算工作的资源耗费状况。读者能够参考
https://help.aliyun.com/document_detail/135433.html#title-r2c-tak-zfi
具体介绍元数据表TASKS_HISTORY的字段信息,其中最重要的字段信息是:cost_cpu 和 cost_mem,别离示意:

本文次要借助CPU消耗量(也就是上图的cost_cpu字段对应的每个工作耗费的cpu数量)进行计算资源CU数量的布局。须要留神的是,cost_cpu字段的含意:MaxCompute计算工作作业的CPU消耗量。100示意1 cores,比方官网的例子:10 core运行5s,cost_cpu为10100*5=5000)。那么cost_cpu字段示意的是“cpu核数消耗量 100 工作运行工夫秒”。因为cost_cpu依照秒统计,对于理论我的项目评估太过于精密,咱们通常将cost_cpu 除以 100、而后再除以3600,失去cores h (cpu核数 小时)。这样不便评估理论我的项目在规定时间段内运行完所有工作须要quota group资源组的起码计算资源CU数量。
如下如所示某个MaxCompute project 的MaxCompute计算工作的资源耗费状况:

3.3.2 布局计算资源CU数量

通过3.3.1章节的内容,咱们能够查看到MaxCompute project某一天运行的所有计算工作耗费的CPU核数*小时。
计算资源CU数量布局的细则:
Step1:
首先,计算失去均匀每天运行所有工作耗费的cost_cpu总和(须要除以100,能力失去真正的cpu核数 秒,而后再除以 3600,失去耗费的 “cpu核数 小时”)。举个例子:MaxCompute project均匀每天须要运行1000个工作,这些工作耗费的cost_cpu别离是 W1、W2 …… W1000。那么须要将W1 + W2+ …… + W1000 失去每天运行所有工作耗费的cost_cpu总和Wz。
留神:数据中台个别会划分6个MaxCompute project,别离是:
• ods_dev:贴源层开发测试project;
• ods_prod:贴源层生产project;
• cdm_dev:公共层开发测试project;
• cdm_prod:公共层生产project;
• ads_dev:应用层开发测试project;
• ads_prod:应用层生产project;
须要将这6个MaxCompute project的所有数据计算工作的cost_cpu相加失去cost_cpu总和Wz。
当然,大部分读者应用MaxCompute进行数据处理,并非须要建设数据中台。任何须要应用MaxCompute进行数据处理的利用场景,都能够依照理论划分的MaxCompute project,将这些MaxCompute project涵盖的所有数据处理工作耗费的cost_cpu相加失去总和Wz。
Step2:
依照上述介绍的阿里云官网详情介绍,cost_cpu须要除以100才是真正耗费的CPU核数。同时,cost_cpu依照秒进行度量,咱们个别会依照小时进行度量。因而,须要将cost_cpu总和Wz除以100、再除以3600,最初失去均匀每天运行所有工作耗费 “cpu核数 *小时”,本文假如这个值为W。
Step3:
征询客户数据批量解决工作须要在每天的哪些时间段运行实现。举个例子:客户要求在深夜零点之后、凌晨6点之前必须将所有数据批量解决工作运行实现。那么每天可能运行的总时长都是6个小时。本文假如所有工作必须在N个小时运行实现。
Step4:
利用上述失去的每天所有工作[cpu核数 *小时 / 工作运行时长N个小时],就能够失去该客户的MaxCompute project须要调配的计算资源CU数量的最小值:W/N。
W/N的前提是数据处理工作的cost_cpu很稳固,而且在这N个小时内,所有工作都随时在运行,不存在任何闲暇的工夫。然而,理论我的项目可能会因为某些起因导致数据计算工作运行工夫缩短(比方参加计算的数据量减少),相当于W会变大;同时,因为DataWorks/Dataphin调度工作还会产生很多延迟时间、工作获取CU资源也会耽搁很多工夫,这部分延迟时间会加大工作之间运行的工夫距离,真正用于运行工作的工夫会小于N。
W/N的分母理论变大、分子理论变小,进而变相地要求减少计算资源,以便让工作获取更多资源进而运行地更加疾速。因而个别状况下,会在上述失去的W/N后果根底上增加一倍。
依照上述4个步骤,能够预估计算失去企业能够须要购买的CU数量。

3.3.3举例布局计算资源CU数量

某企业施行数据中台我的项目,划分8个MaxCompute project。除了3.3.2章节介绍的6个MaxCompute project之外,还独自布局了两个专门做数据荡涤的MaxCompute project。当然,正如前文所述,读者须要依照理论布局的若干个MaxCompute project进行计算。
Step1 和 Step2:
依照3.3.1章节介绍的办法统计过来15天,均匀每天8个MaxCompute project耗费的“cpu核数 小时”的总量为:202 CPU核数 小时。
Step3:
因为客户的业务零碎闲暇工夫在早晨1点到早上6点,而且每天早上7点之前须要出每天数据批量工作的运行后果。在6点到7点之间,次要产出报表,因而只有5个小时能够运行批量工作。
Step4:
失去MaxCompute计算资源CU数量:202 CPU核数 小时 / 5小时 = 40.2 cores核数,也就是至多须要41 CU。因而倡议客户购买计算资源CU量为 412 = 82 CU数量。
依据预估计算结果,咱们为客户举荐购买的包年包月固定CU量为82个。先开明MaxCompute 计算资源quota group 资源组的包年包月固定CU资源:

而后配置总CU量为82个。

四、浅谈MaxCompute group quota 资源划分办法

笔者在第3章节具体介绍如何依据最近一段时间的CU耗费状况,预估失去MaxCompute 计算资源CU数量。购买的MaxCompute quota group资源属于“默认预付费Quota”,相似于开源hadoop yarn的root资源队列。在理论我的项目开发过程中,还须要将“默认预付费Quota”再细分为若干个“子quota group资源组”。当然,个别状况下倡议1个MaxCompute project 划分1个子quota group资源组。如何将“默认预付费Quota”划分为若干个子quota group资源组?这是本章节须要具体介绍的内容。

4.1 fuxi伏羲资源调度零碎原理简介

为了便于读者理fuxi调度零碎对于资源组的资源分配和资源抢占机制,本文以开源hadoop yarn资源队列进行类比。MaxCompute的“默认预付费Quota”相似于yarn的root资源队列,这部分计算资源属于“总计算资源组”,须要将总资源组进行细分。
假如咱们购买的“默认预付费Quota”蕴含Dt个CU资源,而后“默认预付费Quota”被划分了n个子资源组D1、D2 …… Dn 。这n个资源组必须设置两个重要参数:资源组的“预留CU最小配额”minD1、minD2……minDn,以及“预留CU最大配额” maxD1、maxD2……maxDn。这n个资源组必须满足以下条件:
•** minD1 + minD2 + …… + minDn = Dt
• 对于任意的子资源组的maxDi,maxDi <= Dt**
咱们划分子资源组必须满足上述两个条件。其中,每个MaxCompute project的min资源量示意该子资源组最低预留的CU数量,无论是否有工作提交,这个子资源组就会占用这么多CU量;每个MaxCompute project的max资源量示意该子资源组可能获取到的最大CU数量,哪怕其余资源组全副都没有工作运行,这个子资源组最多也只能占用max的CU量。
如下图所示,170个CU资源量的“默认预付费Quota”划分了两个子资源组:

从上图咱们看到,划分的两个子资源组yong_quota_group 和 fixed_quota_group设置的最小CU配额、最大CU配额,满足上述两个条件。

4.2 MaxCompute计算资源抢占机制

依照4.1介绍的内容,若干个子资源组的max最大CU配额都能够设置为“默认预付费Quota”,那么一旦所有资源组对应的MaxCompute project都疯狂地运行工作,那么必然存在资源抢占的问题。依照默认规定,MaxCompute资源组的资源抢占依照“fair scheduling”偏心调度机制,先提交的工作优先获取CU资源。那么,如果某个MaxCompute project提交超大型工作,必然将会把CU资源耗费殆尽。此时,其余资源组对应的MaxCompute project提交的工作将会因为无奈获取到CU资源而被阻塞。
如何更加完满地划分quota group资源组,并且为每个资源组调配最正当的 min资源配额、max资源配额? 如何结合实际我的项目需要,合理安排工作运行的先后顺序、以及工作运行调度的依赖关系?这是划分子quota group资源组须要思考的重点因素。

4.3 quota group资源组划分

在第3章节具体介绍如何预估计算企业客户须要购买的包年包月预留CU量,也就是 “默认预付费Quota”,比方3.3.3章节的理论案例外面介绍的170个CU。下一步就是创立子quota group资源组,并为每个quota group调配 min、max资源量。笔者联合多年hadoop yarn资源分配教训,以及应用MaxCompute的一些教训,总结了一些理论的教训。
第1条办法:
每个MaxCompute project 对应1个独立的quota group子资源组;
第2条办法:
每个quota group子资源组的min 资源量不小于 “默认预付费Quota”的5%,倡议也不大于“默认预付费Quota”的20%。具体起因:如果将子资源组的min资源量设置太大,比方超过20%,那么各个资源组的min资源量之和就会靠近或者超过“默认预付费Quota”,那么划分子资源组将会失去意义,最终造成资源大量节约。
第3条办法:
每个quota group子资源组的max 资源量不小于“默认预付费Quota”的40%,当然最大能够设置到“默认预付费Quota”。如果子资源组的max 资源量设太小,在集群运行工作闲暇的时候,资源会造成极大节约。
除了上述三条根本办法之外,还有几个比拟实用的办法:
第4条办法:
对于企业客户划分的多个MaxCompute project,须要统计每个project 的cost_cpu消耗量“cpu核数 *小时”,并依照消耗量进行排序。消耗量最大的MaxCompute project对应的子资源组的max资源量能够设置为“默认预付费Quota”的80%以上,其余project对应的子资源组依照排序,设置的max资源量以此缩小,直到最初的子资源组的max资源量不小于“默认预付费Quota”的40%。
第5条办法:思考任务调度与依赖关系
对于很多企业客户,应用DataWorks/Dataphin须要做任务调度。任务调度就必然有父子工作关系。比方笔者在本文列举的理论案例,对于数据中台我的项目,划分了8个MaxCompute project,别离是:数据荡涤的两个project、ods贴源层的两个project、cdm公共层的两个project、ads应用层的两个project。每个project调配一个独立的quota group子资源组。数据分层有严格的先后顺序:数据荡涤的工作是ods层工作的父工作;ods层工作是cdm层工作的父工作;cdm层工作是ads层工作的父工作,他们之间的任务调度关系如下所示:

对于这类常见的不同MaxCompute project的工作之间有严格的调度依赖关系,不能简略的依照上述的办法设置资源组的min资源量和max资源量。因为上一个档次有几百个工作须要运行、下一个档次也有几百个工作须要运行,而且这些工作之间是混合运行的。比方:某个工作流的几十个ods层工作运行实现,那么接下来将会运行对应的几十个cdm层工作;与此同时,数据荡涤层和ods层还会运行新的工作;cdm层和ads层也会运行所有上游都运行实现的工作。这些工作之间混合在一起运行,为资源组划分资源量增加了很多变数。此时须要依据理论我的项目教训,为这些资源组调配min资源量和max资源量。
比方笔者这边的我的项目状况如下:数据荡涤层因为波及很多业务零碎原始数据表的join操作,十分耗费CU资源;ods层常常是导入荡涤之后的数据即可,不须要耗费太多资源;cdm层标准建模,工作运行办法比拟固定,因为咱们在数据荡涤层曾经将数据做规范化解决,因而cdm层耗费的CU资源也很少;最初,将cdm的派生指标交融进ads层,须要做很多简单的join操作,因而耗费的CU资源十分多。并且,从早晨1点到凌晨7点之间,这四个档次对应的我的项目运行耗费的资源量出现“错峰”状况。下图是咱们在进行测试环节统计的状况:

能够显著看进去,四个档次运行工作的数量出现“错峰”状况,每个档次呈现的工作高峰会以此延后一段时间,该档次MaxCompute project耗费的资源量也是出现错峰。鉴于上述场景剖析,咱们思考在第4条办法的根底上,将不同档次“错峰”顶峰运行的因素也思考在内。尽可能让耗费资源多的我的项目调配的max资源量更大,然而因为“错峰”运行因素,耗费资源少的我的项目调配的max资源量也不能太小,尽可能调配大一些,让资源失去正当利用。笔者为该我的项目设计4个quota 资源组:
• 数据荡涤层project对应的quota 资源组:min资源量为“默认预付费Quota”的10%,max资源量为“默认预付费Quota”的70%;
• ods贴源层project对应的quota 资源组:min资源量为“默认预付费Quota”的10%,max资源量为“默认预付费Quota”的50%;
• cdm公共层project对应的quota 资源组:min资源量为“默认预付费Quota”的10%,max资源量为“默认预付费Quota”的50%;
• ads应用层project对应的quota 资源组:min资源量为“默认预付费Quota”的10%,max资源量为“默认预付费Quota”的80%。

五、总结

当然,理论如何为MaxCompute project划分资源组?每个资源组的min/max资源量占据“默认预付费Quota”的百分比多少?须要综合思考不同MaxCompute project外部的数据处理工作的优先级、工作之间依赖关系、工作错峰运行状况,还须要特地思考某些超大型数据计算工作是否有必要与其余一般工作进行资源组隔离。

原文链接
本文为阿里云原创内容,未经容许不得转载。