如何提高架构的稳定性、可扩展性和易用性等能力?点击看大咖分享 了解详情
写点什么

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

  • 2019 年 9 月 29 日
  • 本文字数:2909 字

    阅读完需:约 10 分钟

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

需求背景

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


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


  • 首先,云的优势就是即买即用,按照用量付费。这就是说你不用为支撑一年以后的业务发展而购买多余的资源,而只需要估算一年的业务增长量(基于一年固定 RI 的情况)即可。

  • 其次,AWS 每年都会推出新的服务器类型,一般来说新的服务器会比旧的型号有更好的性价比,而且,也会有一些旧型号的服务器停止业务支持。每年进行一次容量规划可以借此机会淘汰一些旧机型,采用一些新机型,而且还会节省成本。

  • 第三,估算毕竟是估算,总有误差的。而不同业务的发展也是不均衡的,有的快一些,有的慢一些。每年做一次容量规划可以根据一年的性能指标重新调整一下资源的分配方式,将有限的资金用在最恰当的地方。

  • 所有说,优化并不一定总是降配省钱,也包含适当的扩容。


方案概述

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


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


typecpu_ratetarget_cpu_ratememory_ratetarget_mem_rateprefersource_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_typetarget_vcputarget_memorytarget_pricesource_vcpusource_memorysource_pricesavingssource_ondemandtarget_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。因为这个逻辑就是选择满足条件的最便宜的机型。一般来说,调用这个方法的触发条件一般都是因为老的机型已经退役了或者目前的机型需要进行升级配置。


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



输出文件:



我们可以看到,因为使用的缺省的 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/


2019 年 9 月 29 日 16:32504
用户头像

发布了 1496 篇内容, 共 52.7 次阅读, 收获喜欢 58 次。

关注

评论

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

JDK的第三个LTS版本JDK17来了

程序那些事

程序那些事 11月日更 jdk17 java17

校招 C++ 大概学习到什么程度?

博文视点Broadview

墨天轮国产数据库沙龙 | 胡彦军:华为GaussDB迁移工具解密

墨天轮

数据库 华为云 GaussDB 国产数据库

云小课 | DSC:快速识别敏感数据并脱敏

华为云开发者联盟

华为云 识别 数据脱敏 数据安全中心 敏感数据

ABAP Netweaver和git的快捷方式

Jerry Wang

SAP Netweaver CloudFoundry 11月日更

三分钟永久激活WebStorm、PHPStorm、PyCharm、IntelliJ IDEA等JetBrains系列IDE

echeverra

pycharm webstorm IntelliJ IDEA PHPStorm

2022第十五届北京国际智慧城市、物联网、大数据博览会

InfoQ_caf7dbb9aa8a

一定要过等保吗?过了等保是不是非常安全?

行云管家

网络安全 等保 堡垒机 等级保护

识别AI换脸!百度这项技术夺冠了!

百度开发者中心

AI

架构实战营模块八作业

Geek_d18264

架构实战营

100G云服务器诞生记

科技热闻

手写自定义迭代器,秒懂迭代器底层原理

Tom弹架构

Java 架构 设计模式

Selenium修改HTTP请求头三种方式

FunTester

测试 HTTP selenium FunTester UI自动化

Linux应该怎么学?《Linux一学就会》教你如何学习Linux

侠盗安全

Linux linux运维 云计算架构师

浅谈网络性能之端到端业务质量分析

鲸品堂

运营商

Apache Pulsar 荣获中国开源云联盟「2021 优秀开源项目」

Apache Pulsar

大数据 云原生 开源项目 Apache Pulsar 消息系统 Apache Pulsar 社区

模块三作业

Geek_1d37ea

架构训练营

Moment.js 转换 UTC 格式的 2 个小问题

HoneyMoose

【Promise 源码学习】第八篇 - 完善 Promise 并通过 promise-aplus-tests 测试

Brave

源码 Promise 11月日更

Vue进阶(幺捌贰):父子组件元素获取、方法互相调用

No Silver Bullet

Vue 组件通信 11月日更

【重磅官宣】UDC2022:解码Z世代、力造科技潮生活

科技热闻

TypeScript 针对 JavaScript 做了什么

HoneyMoose

OPPO 图数据库平台建设及业务落地

Nebula Graph

图数据库 知识图谱 图数据库实战 分布式图数据库

智联招聘的Web模块扩展落地方案

智联大前端

组件化 SSR

在SAP云平台的CloudFoundry环境下消费ABAP On-Premise OData服务

Jerry Wang

SAP abap CloudFoundry 11月日更

云管理软件哪家好?有哪些功能?咨询电话多少?

行云管家

云计算 云服务 云平台 云资源 云管理

敏捷开发框架

PingCode

Scrum 敏捷开发 PingCode

一文帮你掌握TDengine的降采样查询+跨时区统计

TDengine

数据库 tdengine 后端

企业采购管理的这些痛点,如何解决?

低代码小观

企业管理 管理系统 管理工具 采购管理 企业采购管理

“芯”有灵“蜥” 走进 Intel MeetUp

“芯”有灵“蜥” 走进 Intel MeetUp

如何进行EC2优化,进一步优化成本_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章