如何进行 EC2 优化,进一步优化成本

阅读数:118 2019 年 9 月 29 日 16:32

如何进行EC2优化,进一步优化成本

需求背景

我们在上一篇文章中分享了如何为新迁移上云的服务器选择合适的机型,在这篇文章中,我们将继续我们的 EC2 优化之路。当您将工作负载迁移到云上稳定运行了一段时间后,就可以开始考虑调整 EC2 机型以节省成本或者更好的满足业务发展的需要了。

您可能会问,为什么上云后这么麻烦?我以前在数据中心运行工作负载时一般几年才考虑做一次容量规划,根本不用每年做规划,这么麻烦能给我带来什么好处呢?俗话说,一分耕耘一分收获,当然是有好处的:

  • 首先,云的优势就是即买即用,按照用量付费。这就是说你不用为支撑一年以后的业务发展而购买多余的资源,而只需要估算一年的业务增长量(基于一年固定 RI 的情况)即可。
  • 其次,AWS 每年都会推出新的服务器类型,一般来说新的服务器会比旧的型号有更好的性价比,而且,也会有一些旧型号的服务器停止业务支持。每年进行一次容量规划可以借此机会淘汰一些旧机型,采用一些新机型,而且还会节省成本。
  • 第三,估算毕竟是估算,总有误差的。而不同业务的发展也是不均衡的,有的快一些,有的慢一些。每年做一次容量规划可以根据一年的性能指标重新调整一下资源的分配方式,将有限的资金用在最恰当的地方。
    所有说,优化并不一定总是降配省钱,也包含适当的扩容。

方案概述

我们的目的很明确,根据现有的资源分配情况和利用率,选择满足条件的最经济的 EC2 资源。在开始程序设计之前,我们先看看在云上运行了将近一年,我们手里有什么数据。很明显,我们有每个服务器的机型信息,我们应该还会有服务器的性能数据(通过 CloudWatch 以及安装 CloudWatch Agent),包括 CPU 的峰值利用率和内存的峰值利用率。如果你收到 AWS Support 团队给你发出的机型退役邮件,你还会有即将淘汰的机型信息。如果你近期和业务部门沟通过,你还会拿到未来一年的业务发展计划数据,据此,你可以粗略估算一下预期的 CPU 和内存利用率,具体逻辑和方法可以参加上一篇文章中的介绍。

现在我们开始介绍 select_ri.py 里面 RI 类的第二个方法 select_ec2_by_type。我们的输入项还是 Excel 表格形式,每条记录的格式如下:

type cpu_rate target_cpu_rate memory_rate target_mem_rate prefer source_os

type:源系统 EC2 型号(必选)

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

select_ec2_by_type 的功能是根据上面定义的输入项(Excel 格式记录),选择合适的 EC2 机型,输出如下信息:

target_type target_vcpu target_memory target_price source_vcpu source_memory source_price savings source_ondemand target_ondemand

target_type:目标 EC2 的类型

target_vcpu:目标 EC2 的 CPU 核数

target_memory:目标 EC2 的内存大小

target_price:目标 EC2 的一年标准 RI 实例价格

source_ondemand:源 EC2 的 On-Demand 实例价格

source _vcpu:源 EC2 的 CPU 核数

source _memory:源 EC2 的内存大小

source _price:源 EC2 的一年标准 RI 实例价格

source _ondemand:源 EC2 的 On-Demand 实例价格(每小时)

savings:“源 EC2 的一年标准 RI 实例价格”与“目标 EC2 的一年标准 RI 实例价格”的差值

输入参数:

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

select_ec2_by_type 方法内部的逻辑是这样的:

复制代码
第一步,取得现有 EC2 的信息,包括 CPU 核数、内存大小、一年标准 RI 实例价格、On-Demand 实例价格
q = "select DISTINCT vcpu, memory, all_upfront_price_1yr
from price_table
where (type == '{}') and (tenancy == '{}') and (location == '{}') and (os == '{}') and (all_upfront_price_1yr > 0) and {} and (license_model=='{}')".format(
input_row['type'][0], tenancy, location, ec2_os, preInstalledSw_option, licenseModel)
try:
base = sqldf(q, locals())
except:
base = pd.DataFrame()
base.columns = ['vcpu', 'memory', 'all_upfront_price_1yr']

第二步,根据现有的信息,选择合适的机型 (满足 CPU 和内存要求,且价格低于原有的类型)

复制代码
q = "SELECT type,vcpu, memory,min(all_upfront_price_1yr)
FROM price_table
WHERE (vcpu >= {}) and (memory>={}) and (tenancy == '{}') and (location == '{}') and (os == '{}') and (all_upfront_price_1yr <= {}) and (all_upfront_price_1yr > 0) and (license_model == '{}') and {} {};".format(float(t_vcpu), float(t_memory), tenancy, location, ec2_os, float(base.all_upfront_price_1yr), licenseModel, self.exclude, preInstalledSw_option)
try:
target = sqldf(q, locals())
except:
target = pd.DataFrame()
target.columns = ['type', 'vcpu','memory', 'min(all_upfront_price_1yr)']

第三步,如果目前满足要求的机型都比之前的机型贵,则选择最便宜的那款

复制代码
if pd.isnull(target['type'])[0]:
target = self.select_ec2_by_config(input_row)

您也许注意到了,这里调用了上一篇文章中介绍的方法:self.select_ec2_by_config。因为这个逻辑就是选择满足条件的最便宜的机型。一般来说,调用这个方法的触发条件一般都是因为老的机型已经退役了或者目前的机型需要进行升级配置。

下面就给大家展示一下测试的效果,输入文件:

如何进行EC2优化,进一步优化成本
输出文件:
如何进行EC2优化,进一步优化成本

我们可以看到,因为使用的缺省的 prefer 值,所以目标 CPU 和内存的利用率都是 90%,2 台目前 CPU 峰值利用率高于 90% 的服务器都做了升级,总的来说成本节省了 29.3%,优化的效果还是挺明显的。

本文中的完整程序可从这里下载:

https://github.com/shaneliuyx/awscnprice/tree/master/examples

————

如何自动化的选择和优化 EC2 系列(一)利用 AWS Price List API 生成中国区的 EC2 价格表

如何自动化的选择和优化 EC2 系列(二)在迁移项目中,如何自动选择最经济的 EC2

如何自动化的选择和优化 EC2 系列(三)如何进行 EC2 优化,进一步优化成本(本博文)

如何自动化的选择和优化 EC2 系列(四)如何为 SAP 应用选择合适的 EC2

如何自动化的选择和优化 EC2 系列(五)如何整合 RI 续购日期

作者介绍:

刘育新
AWS ProServe 团队高级顾问,长期从事企业客户入云解决方案的制定和项目的实施工作。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/how-to-use-ec2-optimise-cost-seriesthree/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布