写点什么

在迁移项目中,如何自动选择最经济的 EC2

  • 2019-09-29
  • 本文字数:3296 字

    阅读完需:约 11 分钟

在迁移项目中,如何自动选择最经济的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_rat | ememory | 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 类,还有两个方法:


1.select_ec2_by_type


2.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
复制代码


如果在选择的机型上有要求,你也可以通过设置环境变量指定不选择哪些机型,例如:


os.environ['EXCLUDE_EC2_TYPE'] = "3,t"
复制代码


在目标机型中不选择 3 系列(c3,m3,r3)和 t(t2)系列的服务器。


在 select_ri.py 里面通过如下语句取得 Exclude 信息:


try:
exclude_list = os.getenv('EXCLUDE_EC2_TYPE').split(",")
except:
exclude_list = []
self.exclude = ""if exclude_list != []:
for exclude_type in exclude_list:
self.exclude = self.exclude + f'(type NOT LIKE \'%{exclude_type}%\') and '
复制代码


选择机型的逻辑是这样的:


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 > 0) and {}{} and (license_model=='{}');".format(
t_vcpu, t_memory, tenancy, location, ec2_os, self.exclude, preInstalledSw_option, licenseModel)
复制代码


这里的 t_vcpu 的计算是这样的:


if (prefer.lower() == 'c') | (prefer.lower() == 'c+m') | (prefer.lower() == 'm+c'):
try:
return float(cpu_base) * float(cpu_rate) / 100 / target_cpu_rate
except TypeError:
return float(cpu_base)
else:
return 0(上面的cpu_base就是输入项中的vcpu(CPU核数))
复制代码


t_memory 的计算是这样的:


if (prefer.lower() == 'm') | (prefer.lower() == 'c+m') | (prefer.lower() == 'm+c'):
try:
return float(mem_base) * float(mem_rate) / 100 / target_mem_rate
except TypeError:
return float(mem_base)
else:
return 0
复制代码


为了验证一下效果,我们准备了如下 Excel 表格作为输入项:



输出结果如下:



使用的测试程序如下:


from select_ri import *
import pandas as pd

input = pd.read_excel("blog2_input.xlsx")
output = pd.DataFrame()

ri = RI()
for i in range(0, input.shape[0]):
row = pd.DataFrame(input.loc[[i]])
row = row.reset_index(drop=True)
result = ri.select_ec2_by_config(input_row=row)
output = output.append(result, ignore_index=True, sort=False)
output = pd.concat([input, output], axis=1, join_axes=[input.index])
print (output)
output.to_excel('blog2_output.xlsx', index=False)
复制代码


如果你没有收集到足够的信息,只是想初步评估一下迁移到云上的成本,那也没问题,最简单的输入信息如下:



你可以得到如下输出:



你也许很好奇,为什么目标服务器(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


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


作者介绍:


刘育新


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


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/how-to-choose-ec2-use-the-most-economic-one/


2019-09-29 16:31808
用户头像

发布了 1870 篇内容, 共 134.0 次阅读, 收获喜欢 81 次。

关注

评论

发布
暂无评论
发现更多内容

华为云GaussDB构建智能数据底座,助推中国数字经济发展

轶天下事

为什么MySQL单表不能超过2000万行?

轶天下事

无惧百万级并发,GaussDB(for Cassandra)让华为Push推送服务更快触达

轶天下事

华为云GaussDB入选“2022年数字技术融合创新应用解决方案”

平平无奇爱好科技

PostgreSQL插件那么多,怎样管理最高效?

平平无奇爱好科技

营销研发三年烧11.25亿负债200%,聚水潭的亏损反而是SaaS的“正面”鼓励

B Impact

强化学习从基础到进阶--案例与实践[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

【深入浅出Docker原理及实战】「Docker安装说明」零基础+全方位带你学习探索Docker容器开发实战指南(Ubuntu、Debian)

码界西柚

Docker 容器 容器化部署

华为云GaussDB以技术创新引领金融行业分布式转型

平平无奇爱好科技

技术驱动,数据赋能,华为云GaussDB给世界一个更优选择

平平无奇爱好科技

强化学习从基础到进阶--案例与实践[7.1]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解项目实战

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

产教融合,华为云GaussDB助推高校国产数据库课程建设

轶天下事

企业如何数字化转型?企业数字化转型面临哪些挑战?

优秀

企业数字化转型

行业DBA走进华为,共建数据库生态

平平无奇爱好科技

黄瑾:做强坚实数据库底座,GaussDB与产业携手共进

平平无奇爱好科技

车载手势识别技术的原理及其应用

数据堂

智能工厂中人工智能应用场景及技术分析

工赋开发者社区

智能工厂 | 上海三菱电梯有限公司电梯智能工厂

工赋开发者社区

NineData入驻华为云“联营联运”商品,为企业数据提供安全保障

平平无奇爱好科技

华为云GaussDB践行数字化,护航证券保险高质量发展

平平无奇爱好科技

再获殊荣!华为云GaussDB喜提“科技进步一等奖”

平平无奇爱好科技

强渡大渡河!华为云GaussDB成功支撑华为MetaERP系统全面替换

平平无奇爱好科技

C++的重载运算符和重载函数

芯动大师

强化学习从基础到进阶-常见问题和面试必知必答[7]:深度确定性策略梯度DDPG算法、双延迟深度确定性策略梯度TD3算法详解

汀丶人工智能

人工智能 深度学习 强化学习 6 月 优质更文活动 DDPG算法

招行&华为云,科技进步一等奖!

轶天下事

重磅新品全球公测!华为云数据库又有大动作

平平无奇爱好科技

车载手势识别技术的挑战和未来发展

数据堂

这年头怕数据泄露?全密态数据库:无所谓,我会出手

平平无奇爱好科技

精彩纷呈!LLUG 2023 北京场活动回顾来啦 | 视频回放已上线

OpenAnolis小助手

开源 龙蜥社区 LLUG Linux中国 沙龙回顾

莲子数据与阿里云开源PolarDB合作助力制造业数字化转型

阿里云数据库开源

polarDB PolarDB-X PolarDB-PG

新应用爆发,开启5G的鱼龙之变

脑极体

5G

在迁移项目中,如何自动选择最经济的EC2_其他_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章