亚马逊AWS官方博客
如何自动化的选择和优化EC2系列(二)在迁移项目中,如何自动选择最经济的EC2
需求背景
我们在上一篇文章中讲了如何利用AWS Price List API生成EC2价格表,现在,我们就讲讲如何利用这个价格表自动化的选择最经济的EC2类型。
方案概述
在做大规模迁移时,我们首先要做的是收集线下数据中心X86服务器的信息,最基本的例如CPU核数,CPU峰值利用率,内存大小(GB),内存峰值利用率,操作系统类型。我们想根据这些基本信息估算一下在云上应该选择何种机型,以及一年的费用大约是多少。大多数客户在上云后都会购买一年标准RI实例以节省费用,所以我们就以一年全部预付费标准RI的价格作为选择机型的依据。选择机型的逻辑是:满足内存和CPU需求的最便宜的机型。
当然,由于我们买的是一年标准RI实例,在一年之内不可改变机型配置,所以也应该考虑预留一年的业务增长量。因此,在以上收集的基本信息的基础上,我们还要加上两条:我们期望的CPU利用率和内存利用率。举例来说,如果您目前的某个服务器的CPU和内存利用率是90%和80%, 您预计在一年内业务会有20% 的增长(我们姑且认为业务增长与资源需求成正比),当前的CPU是4核,内存是16GB。如果你希望当业务增长20%后,服务器的CPU和内存的利用率维持现状,即90%和80%, 选择的EC2机型应该在运行现有负载时的期望CPU利用率是90%/1.2=75%, 期望的内存利用率是80%/1.2=67%。
还有一点需要考虑的就是应用系统的特性,是以计算能力为主的还是以内存大小为主。AWS EC2 最小的CPU:内存配比是1:2,最大的是1:8。
- 如果是以计算为主的,我们在选择服务器的时候只考虑满足CPU的计算能力,我们会挑选满足计算能力的最经济的EC2,这时的CPU:内存配置至少是1:2 (当然,如果价格合适,我们也会选择CPU:内存是1:4的机型。但是,前提条件是,CPU:内存=1:2的服务器已经可以满足内存需要)。
- 如果是以内存为主的,我们在选择服务器的时候只考虑满足内存的大小,我们会挑选满足内存需求的最经济的EC2,这时的CPU:内存配置至少是1:4 (当然,如果价格合适,我们也会选择CPU:内存是1:8的机型。但是,前提条件是,CPU:内存=1:4的服务器已经可以满足CPU需要)。
- 当然,你也可以要求同时满足内存和CPU的要求,那么这时的选择逻辑就是同时满足内存和CPU要求的最便宜的EC2机型。
综上所述,做机型选择的输入项有以下几条:
vcpu |
cpu_rate | target_cpu_rate | memory |
memory_rate | target_mem_rate | prefer | source_os |
vcpu:源系统CPU核数(必选)
cpu_rate: 源系统CPU峰值利用率(可选),缺省为100 (100%)
target_cpu_rate: 期望的CPU利用率(可选),缺省为0.9(即90%)
memory:源系统内存大小(GB)(必选)
memory_rate: 源系统内存峰值利用率(可选),缺省为100 (100%)
target_mem_rate:期望的内存利用率(可选),缺省为0.9(即90%)
prefer:计算优化(c)、内存优化(m)或者同时考虑CPU和内存(c+m)(可选)缺省为c+m
source_os: 源系统操作系统类型(可选),缺省为Linux。如果是BYOL类型的,此处选择Linux
可选项为:Linux,RHEL,SUSE,Windows
为了实现机型选择自动化,我们构造了一个新的Python Library – select_ri.py。 select_ri.py里面定义了一个RI类,还有两个方法:
- select_ec2_by_type
- select_ec2_by_config
注意:我们在上一篇文章中生成的价格文件cn_ec2_standard_price.xlsx 需要与select_ri.py放在同一个目录下
这里我们先介绍第二个,第一个会在下一篇文章中介绍。
select_ec2_by_config的功能是根据上面定义的输入项(Excel格式记录),选择合适的EC2机型,输出如下信息:
target_type | target_vcpu | target_memory | target_price | target_ondemand |
target_type:目标EC2的类型
target_vcpu:目标EC2的CPU核数
target_memory:目标EC2的内存大小
target_price:目标EC2的一年标准RI实例价格
target_ondemand:目标EC2的On-Demand实例价格
输入参数:
input_row: Excel的行记录
location=’China (Beijing)’:缺省是Beijing Region,还可以选择China (Ningxia)
ec2_os=’Linux’:缺省是Linux
tenancy=’Shared’:缺省是Shared,还可以选择Dedicated,
preInstalledSw=’NA’:针对于Windows, 还可以选择SQL Ent,SQL Std,SQL Web
licenseModel=’No License required’:针对Windows,还可以选择Bring your own license
如果在选择的机型上有要求,你也可以通过设置环境变量指定不选择哪些机型,例如:
在目标机型中不选择3系列(c3,m3,r3)和t(t2)系列的服务器。
在select_ri.py里面通过如下语句取得Exclude信息:
选择机型的逻辑是这样的:
这里的t_vcpu的计算是这样的:
(上面的cpu_base就是输入项中的vcpu(CPU核数))
t_memory的计算是这样的:
如果你没有收集到足够的信息,只是想初步评估一下迁移到云上的成本,那也没问题,最简单的输入信息如下:
你可以得到如下输出:
你也许很好奇,为什么目标服务器(r5系列)都比实际要求的大呢,为什么不选择更小的4系列服务器呢?
那么我们就看看如果选择4系列服务器,成本是多少。 你可以通过定义环境变量来实现。
os.environ[‘EXCLUDE_EC2_TYPE’] = “5”
仔细看看这两个输出文件中蓝色箭头所示的位置,这下你应该明白了吧,我们的程序真的是选择最经济的EC2机型!
本文中的完整程序可从这里下载:
https://github.com/shaneliuyx/awscnprice/tree/master/examples
————
如何自动化的选择和优化EC2系列(一)利用AWS Price List API生成中国区的EC2 价格表
如何自动化的选择和优化EC2系列(二)在迁移项目中,如何自动选择最经济的EC2(本博文)
如何自动化的选择和优化EC2系列(三)如何进行EC2优化,进一步优化成本
如何自动化的选择和优化EC2系列(四)如何为SAP应用选择合适的EC2