2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

如何整合 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:30957
用户头像

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

关注

评论

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

物联网为什么需要5G?

华为云开发者联盟

5G 物联网

捡到宝啦!阿里内部人手一本的Springboot进阶手册,先学为敬

Java架构师迁哥

架构师训练营-第十一周作业

腾志文(清样)

大数据2学习总结

周冬辉

云栖大会倒计时8天,新一代CDN的技术突破和应用实践专场有什么看点?

阿里云Edge Plus

CDN CDN加速

Linux 基础操作

yuanhang

linux命令

架构师0期Week13总结

Nan Jiang

JavaScript中的原型到底该如何理解?

Walker

Java 大前端 面向对象编程 原型

常用数据分析指标

纯纯

区块链赋能数字经济,为知识和版权确权定价

CECBC

区块链 知识产权 数字经济

搜索引擎如何推荐网页

dongge

微信群总是有人发广告?看我用Python写一个自动化机器人消灭他!

刘早起😶

Python

JavaScript 简介

InfoQ_34a83d636158

大数据解答(二)

dony.zhang

数据分析

架构师13周练习

小蚂蚁

从零开始搭建完整的电影全栈系统(二)——简单的WEB展示网站的搭建

刘强西

Yii2 yii

【DevCloud · 敏捷智库】暴走在发布前夜的开发,你怕不怕?

华为云开发者联盟

版本控制 系统集成 发布

够开放吗?来,和一群开发者搞事情!

易观大数据

为什么说区块链是制造信任的机器?

CECBC

区块链 不可篡改

java安全编码指南之:表达式规则

简爱W

Java java架构师

架构师训练营-第十二周作业

腾志文(清样)

CommonMistakes

卓丁

35岁以上的程序员们,后来都干什么去了?

华为云开发者联盟

程序员 职业规划 架构师

淘宝服务端高并发分布式架构演进之路

简爱W

Java java架构师

架构师课程第十三周总结

dongge

架构师训练营第十三周作业

叮叮董董

打破Scrum的五个误区(译)

Bruce Talk

Scrum 敏捷开发 Agile

Securecrt 使用

yuanhang

securecrt

到底什么是分布式系统?你需要了解这些

华为云开发者联盟

分布式 部署

北京或先行落地央行数字货币 人民币3.0时代将来临

CECBC

数字货币 银行 人民币

第十三周作业

Linuxer

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