9 月 13 日,2025 Inclusion・外滩大会「开源嘉年华」正在限量报名中! 了解详情
写点什么

如何整合 RI 续购日期

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

    阅读完需:约 8 分钟

如何整合RI续购日期

需求背景

看过以前四篇文章的介绍,作为一个云平台的管理人员,我想你应该非常熟悉如何做年度的 EC2 实例优化了,那么下面你一定会根据优化结果开始准备购买下一年的 RI 了。但是在很多企业中,由于的历史原因,并不是所有的 RI 都是在同一天购买的,也就是说,RI 的到期日分布在不同的月份和不同的日子,这样一批一批的购买是不是很繁琐呢?你也许会脑洞大开的想,我能不能选择日期临近的 RI 合并一起购买呢?这样就可以通过逐步减少购买 RI 的批次从而逐步增加每个批次的数量,合并以后可以省去很多麻烦。


但是选择在哪一天集中购买会更加经济呢?仔细想想,并不是每天的成本都是一样的。我们举个例子,你有 30 个 EC2 instance,最早过期日和最晚过期相差 2 个月,一共有 6 个批次。那么究竟选择哪一天集中购买最划算呢?

方案概述

要计算出哪一天购买最划算,我们需要分析一下我们所做决定的成本构成:


假设我们选择在第 X 天购买,对于任何一个 EC2, 在整个批次的 RI 购买周期内(从最早 RI 到期日至最晚 RI 到期日)有以下三部分成本:


  1. 原有机型 RI 的成本,


假设原有的 RI 在第 Y 天到期,如果在第 X 天购买新的 RI,则浪费了:


(X-Y)* 原有机型 RI 每日成本


如果 X-Y<=0, 则这部分成本为 0


2.新机型 RI 的成本


(RI 购买周期-X)*新机型 RI 每日成本


如果(RI 购买周期-X)<=0,则这部分成本为 0


3.On-Demand 成本


假设原有机型 RI 在第 Y 天到期,而我们在第 X 天购买了新机型的 RI,则从第 Y 天到第 X 天会以 On-Demand 的价格收取原有机型的费用


(Y-X)*原有机型 On-Demand 每日价格


如果 Y-X<=0, 则这部分成本为 0


我们要做的就是将每台 EC2 的这三部分成本加起来,选择一个合适的日子,使这三部分的成本之和最小。


我们使用第三篇文章介绍的优化方法生产的优化结果文件作为输入,输入的 Excel 的每条记录需要包含如下信息:


ri_expired_datetarget_pricesource_pricesource_ondemand


ri_experied_date:源系统 EC2 RI 的到期日(日期类型)


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


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


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


示例输入文件的格式如下:



上面的结果显示总计有 52 台服务器,原来分了 7 个批次购买 RI,最早到期日是 5 月 21 日,最晚到期日是 6 月 12 日。我们要计算的是如果这 52 台服务器今年一起购买 RI,那么在哪一天购买最划算?


下面这个 Python 程序(ri_plan.py)就是根据上述方案阐述的思路编写的,可以很好地解决这个问题。


import pandas as pd
from datetime import *
from datetime import date
from datetime import datetime

table = pd.read_excel("blog5_output.xlsx")
start_day = min(table['ri_expired_date']).date()
end_day = max(table['ri_expired_date']).date()
duration = (end_day - start_day).days
total_item = table.shape[0]
cost = []
for x in range(0, duration + 1):
sub_total = 0
for i in range(0, total_item):
current_item_date = (table.loc[[i]].ri_expired_date)[i].date()
# old price duration
op_day = ((current_item_date - start_day).days) - x
# on demand price duration
od_day = x - ((current_item_date - start_day).days)
# new price duration
np_day = (duration - x)
if op_day < 0:
op_day = 0
if od_day < 0:
od_day = 0
sub_total += ((table.loc[[i]].source_price)[i] / 365 * op_day + (table.loc[[i]].target_price)[i] / 365 * np_day + (table.loc[[i]].source_ondemand) * od_day * 24)[i]
cost.append(sub_total)
optimize_cost = min(cost)

print("{} {}".format(' Date', ' Cost'))
for i in range(0, len(cost)):
if cost[i] == optimize_cost:
recommand_date = start_day + timedelta(days=i)
current_date = start_day + timedelta(days=i)
current_date = datetime.combine(current_date, datetime.min.time())
print("{} {:.2f}".format(current_date.strftime('%Y-%m-%d'), cost[i]))
print ('\nRecommanded date to buy RI is {}'.format(recommand_date))
复制代码


运行后的结果如下:


$ python ri_plan.py    Date       Cost2019-05-21   135170.432019-05-22   129999.902019-05-23   124917.962019-05-24   119982.302019-05-25   115046.642019-05-26   110110.982019-05-27   105175.322019-05-28   100239.652019-05-29   102823.482019-05-30   105407.302019-05-31   107991.122019-06-01   110574.952019-06-02   113158.772019-06-03   115742.592019-06-04   118326.422019-06-05   127722.572019-06-06   137703.242019-06-07   147683.912019-06-08   157664.582019-06-09   167645.262019-06-10   177625.932019-06-11   187606.602019-06-12   197587.27 Recommended date to buy RI is 2019-05-28 
复制代码


从上述运行结果可以看出,5 月 28 日购买 RI 是最好的选择。


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


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-combine-ri-date-seriesfive/


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

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

关注

评论

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

Modbus协议在串行链路上的实现

不脱发的程序猿

通信协议 物联网常用协议 4月日更 Modbus 串行通信

SpringCloud(Netfix)-技术专题-服务注册与发现

码界西柚

SpringCloud

「 留言参与 」—— InfoQ 写作平台【 1 周年盛典 】

InfoQ写作社区官方

1 周年盛典 热门活动

Modus串行链路系统电气特性:2线-Modus、4线-Modus、RS232-Modus和RS485-Modus的特性

不脱发的程序猿

通信协议 4月日更 Modus 串行链路 RS232、RS485

透气胶浆、无手感透气胶浆

C13713145387

透气胶浆 仿拔印浆 无手感透气浆

多年后,我终于看清了比特币的本质

陈东泽 EuryChen

比特币 区块链

基于深度神经网络的噪声标签学习

华为云开发者联盟

神经网络 损失函数 深度神经网络 噪声 噪音数据

《采访彩食鲜 CTO 乔新亮:如何从一名程序员晋阶为CTO》(采访提纲)

石云升

28天写作 4月日更 调查采访能力考核

最全 MongoDB 基础教程

若尘

数据库 mongodb mongo

LeetCode题解:剑指 Offer 49. 丑数,三指针,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

【LeetCode】实现 Trie (前缀树)Java题解

Albert

算法 LeetCode 4月日更

KubeVela 1.0 :开启可编程式应用平台的未来

阿里巴巴云原生

容器 云原生 k8s 消息中间件 Go 语言

避免人工智能存在“歧视”,要从这8大方法入手

澳鹏Appen

人工智能 机器学习 大数据 人脸识别

应对海量时序数据,华为云GaussDB(for Influx)有妙招

华为云开发者联盟

云原生 数字化转型 时序数据 华为云GaussDB

云原生势不可挡,华为云GaussDB加速企业数字化转型

华为云开发者联盟

华为云 GaussDB

阿里巴巴云原生 etcd 服务集群管控优化实践

阿里巴巴云原生

容器 运维 云原生 k8s 存储

对混沌工程的五个常见误解

混沌工程实践

混沌工程 故障注入 误区 生产事故 监管合规

SpringCloud(Netflix)-技术专题-自定义配置Ribbon

码界西柚

SpringCloud Ribbon

智慧城市:大数据运营中心 IOC —— Web GIS 地图应用

一只数据鲸鱼

WebGIS ioc 数据可视化 智慧城市 数据运营

重读《重构2》- 提炼变量

顿晓

重构 4月日更

PHP自动加载原理

Sakura

4月日更

联邦学习,为何而生?

博文视点Broadview

全球案例 | NTT:Atlassian 帮助我们重塑危机中的可能性

Atlassian

敏捷 团队协作 数字化转型 Atlassian Jira

第一篇测试

童童

架构训练营

Linux grep 命令

一个大红包

4月日更

BOE(京东方)2020年报发布: 营收1355.53亿元 净利润大幅增长162.46%

投资的狠人,往往是这样的

陈东泽 EuryChen

比特币 区块链 投资 李笑来 debank

CloudQuery v1.3.6发布,更加完善的数据操作支持

BinTools图尔兹

数据库 sql 数据安全 数据管理工具

1小时破千万点击量!阿里巴巴首发:Java核心框架指导手册

Java架构追梦

Java 阿里巴巴 架构 面试 核心框架

防晒衣专用水性油墨说明书

C13713145387

防晒衣专用水性油墨 防水尼龙水性油墨

华为云PB级数据库GaussDB(for Redis)揭秘第七期:高斯Redis与强一致

华为云开发者联盟

redis 华为云 GaussDB(for Redis) 强一致 PB级数据库

如何整合RI续购日期_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章