AWS EC2 RI(预留实例) 付费优化

AWS EC2 预留实例(Reserved Instance, 下文统一简称 RI) 简单来说就是虚拟机包年, 一次性缴纳一年的费用折扣非常诱人, 比按需启动(也就是按小时计费) 便宜非常多, 但如何知道该买多少个 RI 呢? 尤其公司开始增长, 数据开发人员经常会按需启动一些计算集群的情况下, 如何优化购买策略达到节省开支的目的?
找了一圈也没有成熟的方案(有知道的可以随时告诉我, 感激不尽), 利用一些时间自己写了一个 '基于使用历史优化 RI 购买' 的方案, 简单来说就是

让开发可劲儿造, 根据一段时间的使用历史, 后续去购买 RI

先说说 AWS 现状

  1. 每个实例按小时计费, 不足一小时按照一小时计费 (注意是每个实例, 比如 t2.micro 类型实例在一个小时内启动两个(启动一个, terminate 后再启动一个, 再 terminate 要算两个小时)
  1. 每个启动的 EC2 实例都有唯一的一个ID: instance id
  2. 虚拟机启动'慢', 基本上启动一个节点要1分钟+
  3. 所有的 EC2 信息可以通过 API 很容易拿到
  4. RI 针对的是对应的 AvailabilityZone 的相应类型, 比如在 cn-north-1a 购买的t2.micro RI 对 cn-north-1b 的 t2.micro 实例没有用

第一种思路: 官方账单

可以在账户中设置导出账单, 指定一个 S3 bucket , 每个月会以 csv 文件的方式导出详细账单. 推荐大家都开启这个功能. 但这个账单没有官方规范, 貌似一个月才出一次, 不能等到 on demand 付费了一个月才想起买RI 很不划算.

第二种思路: 自行记录是否买过 RI

单独写 Excel 也好, 或者在 EC2 上使用 tag 方式标记也好, 但这个终究是靠人力, 忘记标记/标记错误都是事儿. 如果使用tag 的方式, 如果这个 EC2 实例被 terminate 替换了(云计算的优势不就是玩儿坏了重来快么 >;<) 导致 tag 丢失等问题也是麻烦. 靠人力办事, 不推荐

第三种思路: 根据使用历史日志, 优化购买 RI

实现很简单, 跟 把大象放进冰箱 一样, 仅需3步:

  1. 每隔2分钟 dump 正在运行的 EC2 实例的日志, 扔进数据仓库.
  1. 每隔几天运行分析脚本, 生成带图的 Excel
  2. 瞅一眼 Excel, 看哪种类型的 EC2 实例需要买 RI 赶紧买

1. dump 日志

使用 aws ec2 describe-instances 很方便获取所有在运行的 EC2 实例信息, JSON 格式非常容易解析. 重要的字段有如下几个:

  • InstanceId, 全局唯一ID
  • State, 实例状态, 只有 running 的才会被计费, 需要过滤一下
  • AvailabilityZone, az 信息, 包含 aws region 信息.
  • LaunchTime, 启动时间
  • Tags, 实例上的标签, 后续可以根据 Tag 按部门/系统分析使用状况
  • dump_time, 本次 dump 日志的时间. 这个字段 JSON 中没有, 相当于给本次 dump 记录一个时间

解析后直接扔数据仓库. 刚刚不是说过 AWS EC2 启动慢, 所以每隔2分钟dump一次所有运行时的 EC2 日志, 一定不会错过任何启动的 EC2 节点. 其实推荐将整个 JSON 都存储下来, 后续可以有其他用处.
为何采用 dump 日志的方式, 比如 cloudtrail 也可以获取相关数据?

因为简单! 几行代码就搞定, 数据仓库是现成儿的. 扔进去就可以用 SQL 分析.

2. 分析报告

写一个脚本, 根据时间范围分析日志, 获取每小时每个类型的 EC2 实例运行个数, 以及 已经购买的 AWS RI 现状, 计算差值并画图.


help_info.png

比如这个 Query:

SELECT concat(substr(dump_time, 1, 13), ':00:00') AS instance_hour,
       az,
       instance_type,
       count(DISTINCT instance_id) AS cnt
FROM testdb.aws_instance_log
WHERE data_date BETWEEN '2016-02-11' AND '2016-02-15'
  AND json_extract_scalar(raw_json, '$.State.Name') = 'running'
GROUP BY concat(substr(dump_time, 1, 13), ':00:00'),
         instance_type,
         az
ORDER BY az,
         instance_type,
         instance_hour

是计算 2016-02-11 至 2016-02-15 日之间的实例使用状况. 然后根据结果生成 Excel 并画一个三条线的线图: 一条是运行的实例数量, 一条是已经购买的该类型的实例数量, 还有一条就是需要买的 RI

3. 购买 RI

别搞错 AvailabilityZone 就好了.

一点想法

由于 RI 是针对某个 AvailabilityZone 的某个类型的节点, 因此, 尽量使用少类型的 EC2 节点有时可以节省成本. 比如A系统需要 c3.4xlarge 类型节点10台, B 系统需要20台 c3.2xlarge, 如果有可能, 是不是可以都用一个类型的节点, 购买同样的 RI, 等到系统 resize了还可以空余 RI 给其他系统. 针对 AvailabilityZone, 如果不需要高可用, 尽量在同一个 AvailabilityZone, 比如计算密集型的系统.

总结

云计算这种形式的确带来了很大效率的提升, 但至于如何节省成本, 还是要看如何做容量规划, 省钱还是要靠小算盘.

容易扩容也意味着容易浪费

比如, 之前物理机/租机房时代, 公司上架服务器慢, 做数据开发临时跑大计算想扩容有钱都花不出去, 只能在现有集群上慢慢等, 慢慢优化; 现在用了 AWS, 随随便便加计算资源只要计算集群做得好, 非常容易, 如果不做限制, 大家都想快出结果因此 on demand 启动大量节点计算, 虽说节省了时间, 但由于随机性太大无法购买 RI 节省成本. 总体来说还是有可能浪费.

ROI 啊.

-- EOF --

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,186评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,858评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,620评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,888评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,009评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,149评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,204评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,956评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,385评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,698评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,863评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,544评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,185评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,899评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,141评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,684评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,750评论 2 351

推荐阅读更多精彩内容