2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

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

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

关注

评论

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

FTP这么“好用”和“便宜”,为什么企业还要替换掉?

镭速

FTP传输替代方案 ftp传输

VR虚拟现实技术在2023年的10个应用

3DCAT实时渲染

实时渲染云 VR虚拟现实

单点登录授权认证必知必会

青柚1943

OAuth2 SSO 单点登录 OIDC Ids4

【介绍篇】Supabase起源和演进过程

张文平

postgres Supabase firebase

如何快速从ETL到ELT?火山引擎ByteHouse做了这三件事

字节跳动数据平台

数据仓库 云原生 ETL ELT 企业号9月PK榜

低代码平台:顺应时代的选择

树上有只程序猿

低代码 应用开发 JNPF

WorkPlus打造企业内网专属通讯软件,构建高效沟通新时代

BeeWorks

Databend 开源周报第 111 期

Databend

WorkPlus Meet私有化部署视频会议,打造更安全的沟通体验

BeeWorks

【直播预约中】 腾讯大数据 x StarRocks|构建新一代实时湖仓

StarRocks

数据库 大数据 数据湖

ATRS Week 5

Geek_c25301

将个人PC转变为高效的云电脑:理论、实践与优化

天翼云开发者社区

云电脑

即时通讯私有化部署,为什么更符合企业对钉钉和企微的替代需求?

BeeWorks

从内核世界透视 mmap 内存映射的本质(原理篇)

bin的技术小屋

操作系统 Linux Kenel 内核 mmap内存映射 linux\

通过 Helm Chart 部署 Easysearch

极限实验室

Helm easysearch

征服数据宇宙,新华三存储护卫队早有准备?

白洞计划

存储

场景题:海量数据如何判重?

王磊

Java Java面试题

福布斯:2024 年 10 大 AI 趋势

豆哥

人工智能 福布斯 AI趋势 2024

.NET常见的4种加密算法

青柚1943

搞不懂设计模式还想阅读源码?你在做梦吗?

程序员万金游

学习 设计模式 #java 程序员 java `后端

深拷贝和浅拷贝介绍

芯动大师

c++

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