暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

你真的了解 AWS 实例“经济学”吗?

求索云途 2019-10-07
1189

不少客户聊天,都会很淡定的说,报个价吧,就这个配置,云计算真的就是这么简单粗暴吗?我期望也可以是,但最新的 9月份 AWS 深圳技术大会上,宣布的 AWS 实例类型高达 200多种,什么鬼,这么复杂?不得不说,哪怕最较真的客户对这么多的实例类型也感到非常头疼。

假期里心血来潮,一边查找着 AWS 价格 API,一边学着机器学习里面的Pandas 库,脑子里构思了下,价格 API 有了,意味着价格数据可以拿到,Pandas 库可以进一步帮忙做数据分析,有了想法脑子根本停不下来,不做不知道,虚机的各种价格计算出乎意料的复杂,AWS 实例经济学名副其实的是我们工作中最熟悉的陌生人。

小测试:你对AWS实例了解多少?

以下几个问题,读者可以试试默默回答下,然后再对照接下来的具体分析数据,看看是否跟你的理解有出入:

  • Amazon EC2 实例分为几大类?分别是什么?

  • 同样的 EC2 实例类型在不同的AWS 区域里面单价是否一样?

  • Amazon EC2 实例的大小有多少类别?

  • AWS 不同区域的 EC2 实例类型数量都是一样的吗?

  • Amazon EC2 包年购买可以支持多少年承诺使用时间?

  • Amazon EC2 包年购买支持哪几种付款模式?

  • Amazon EC2 包年购买的实例类型是否可以在约定时间内换成其它类型?

  • Amazon EC2 除了共享实例还有专用实例和专用主机,你知道都是什么含义吗?

  • 你知道 Amazon EC2 CPU不仅仅有 Intel 的 X86 芯片还有 AMD 和自研的ARM 芯片吗?

  • 你知道 Amazon EC2 的价格还跟操作系统相关吗?

  • 你知道除了包年和按需购买,还有一个大家又爱又恨的竞价方式吗?

        没想到一口气写了这么多问题,期望大家没吓得不敢继续阅读了,云计算从 2006 年诞生以来已经发展了 13 年之久,好的地方是,随着技术和规模效应,AWS 的资源如 EC2 的价格一直在降价,同时由于需求的周期变化,会有大量算力冗余,也诞生了新的算力市场-竞价实例市场,接下来我们一起来动手利用 AWS 公开的 API 获取数据进行进一步分析。

准备实验数据

我们这次关注的焦点是实例的价格,所以,数据本身是需要所有区域的所有实例类型的价格信息,必须点赞的是,AWS 提供价格 API 公开供大家查询,有两种方式(1)直接通过 Pricing API 动态查询服务终端节点 https://api.pricing.us-east-1.amazonaws.com(2)直接下载 JSON 或 CSV 格式的所有服务的报价信息数据文件。

我基于动态查询 API 实现了一个定制查询并保存所有:

(1)  免费 Linux/Unix 操作系统

(2)  无任何预装商业套件(有的包含类似 SQLServer 这样的额外收费套件)

(3)  共享主机

(4)  非预留容量

的 EC2 实例价格数据,报价 API 返回的结果主体结构如下:

要筛选出我们所期望的 EC2 实例类型价格,基本的逻辑如下,基于这个Python 脚本,我们可以拿到想要的价格数据,具体实现可以参考我们的脚本https://raw.githubusercontent.com/soldierxue/blog/master/ec2price/ec2price.py

通过该脚本,我们可以将所有免费 Linux 操作系统,共享主机的 EC2 实例价格保存成 JSON 格式的数据文件,基于这样的 EC2 价格数据,我们进一步利用 Pandas 来探寻我们前面的提出的各种问题的答案。

EC2实例到底有多少种类型,在各区域分布如何?

首先我们统一理解下,怎么才算是一种 EC2实例类型?我们分两种统计方法(1)第一个统计方式,通用实例 m4 或计算优化 c5,就算两种不同 EC2 家族类别(2)第二种统计方式,更加细化到实例大小层面,比如 m4.xlarge m4.2xlarge 算两种不同类型。那我们就来看看在这两种统计方法下,EC2 的实例类型数量和各区域分布是怎么样的。

     从上图可以看出,如果按统计方法2,细分到实例大小的实例类型,比如m5.xlarge/m5.2xlarge,全球除了 AWS 北京和宁夏区域之外,一共 21个区域,实例类型超过或等于 200 的一共有 4个区域,美国两个,欧洲一个,亚洲一个;180200之间的有7个区域,有 5个区域的实例类型不足100个;最多的区域拥有总计 218种实例类型 

按照统计方法1来计算(见下图),比如 i3, m5d, c3, r5 等算不同类别的话,AWS 目前拥有 44个类别 EC2 家族,其区域分布和统计方法1 结果类似。对于实例大小的划分总共有 19个大小级别,但并不意味着每个实例家族比如 m5 等包含所有的大小分类,仅仅统计出所有的大小级别包括

{'medium', '9xlarge', 'metal', '18xlarge', '10xlarge', 'nano', '6xlarge', 'large', '8xlarge', 'small', '3xlarge', '4xlarge', '12xlarge', '2xlarge', 'xlarge', 'micro', '32xlarge', '16xlarge', '24xlarge'}

还有客户会问,如果选定一个EC2机型,我们想看看哪些区域有怎么办?经过 Pandas 的数值化处理,将 EC2 类型在不在某一个区域量化成 0和1,1 代表有,0 代表没有,这样我们再作一张分布图如下:

横轴代表不同的EC2实例家族,纵轴代表区域分布,不同颜色代表不同区域,每个EC2实例家族对应的柱子越高,说明该实例家族在全球区域分布就越广。

不同的实例类型全球不同区域的性价比如何?

实例的类型和分布我们搞清楚了,那么接下来我们要来研究下性价比了。首先,我们利用原始价格数据,算出按需和包年预留的小时单价,这里面比我想象的要复杂的是,包年价格由三方面因素决定小时单价(1)包1年还是3年(2)有没有转换实例类型的自由(3)全预付、部分预付还是零预付,三者组合出来的包年预留单价有 12种

首先我们好奇的是,如果把 AWS 全球区域(不包含北京和宁夏区域)看成一个整体,那每一种实例类型的按需购买的最优单价,最大单价,平均单价,单价中位数,最高和最低单价的差值是多少?类似包年预留的最优和最大单价是多少?Pandas 里面按照实例类型分组进行计算,得出如下的统计表:

为了更清楚查询某种机型的全球区域价格统计情况,可以筛选出如下样例结果,也就是说 c5.xlarge 而言,全球按需最低小时单价是 0.17美金,最高区域的单价比最低价高出 0.092美金;包年类似分析大家可以自己动手查看。

类似,全球区域一个全局视角还包括一个场景,即指定大小的 vCPU 和内存组合,最具性价比的EC2实例类型是什么?在哪个区域?如下图所示,为了更具有代表性,我们去除了美国的两个政府区域,如下图,我们可以了解到,所有的 AWS 可用的 vCPU 和内存大小的组合,以及每种组合的最低单价EC2 机型及所在区域。

很多时候,区域的选择受业务发展和最终用户体验的约束,所以,客户常用的视角是在某个区域,了解EC2实例的性价比;那通常,客户最常用的几个组合如下:

  1. vCPU和内存 组合,查找最优价格实例类型

  2. AWS 衡量 CPU 性能有个更标准的值是 ECU 值,因此,把 vCPU 数量换成 ECU,就变成了 ECU和内存 组合,最优价格的实例类型

  3. 纯粹从内存的角度,分析最具性价比的实例类型

如上图所示,按照区域统计分析,所有的 vCPU和内存组合,ECU 和内存大小及每种组合的最优价格EC2实例类型。同理,有些客户的工作负载只跟内存敏感,那也可以基于特定的内存值,分析出最优价格机型,如下图所示:

都说vCPU不靠谱,有标准衡量CPU性能的单位吗?

上文我们提到,AWS 对于 EC2 实例的 CPU 性能有个更加标准化的单位是ECU,官方定义“适用于实例的 EC2 计算单位数量,有助您比较不同实例类型的 CPU 容量。一个 EC2 计算单位可提供相当于一个 1.0-1.2 GHz 2007 Opteron 或2007 Xeon 处理器的 CPU 容量。”那我就在想,是否是可以利用每个 EC2 实例的单价算出每个 ECU 的单价,从而用来比较各实例或各区域的 EC2 实例的计算成本差异?

        后来发现这个想法有点理想,一个 EC2 实例哪怕是共享主机实例,基本的成本由 CPU,GPU内存还有时间(代数)等因素共同决定,简单用 EC2 单价除以ECU 数量,是没法精确数学描述该问题。各位看官就姑且看看,如果有更好的标准化建模方法也可以后台留言给我。我做的一个稍微的优化是区分 GPU 实例类型和非 GPU 实例类型,分别计算 ECU 的单价,并比较不同区域的差异。

    该图是 GPU 实例的单价除以各自的 ECU 值得到的ECU单价的平均值在各区域的差异,该图假设 GPU 实例的单价和 ECU 单价是成线性关系,基于此假设,可以看出 ECU 单价越低的区域,GPU 实例的 CPU 性价比越高。

        对于非 GPU 实例,ECU 的单价在各区域级别变化曲线和 GPU 实例不太一样,同样的假设条件下,ECU 单价越低表明,该区域非 GPU 实例的 CPU 性价比越高。

为什么说竞价实例让人又爱又恨?

竞价实例是一种区别于按需和包年预留的独特市场,最低单价仅仅是按需单价的 10%,而且和按需一样,不需要客户如包年购买承诺使用时间,非常灵活。大家千万不要被“竞价”字面含义所迷惑,从历史来看,它一开始确实是哪个客户出价高就给哪个客户抢占使用,但随着竞价实例市场规模越来越大,而且满足客户一致的 EC2 使用体验,竞价的含义发生的变化,亚马逊对于每一个市场的实例类型,都有一个市场价,只要客户的请求价格高于市场价,那按照提交申请的时间早晚进行分配;

这里特别强调“市场”的概念,竞价的实例市场是跟可用区相关,如下表格所示,利用 AWS 公开的查询竞价实例历史价格返回的结果样例,一个独立的市场由“可用区”和“实例类型”组成,比如 us-east-2a m5.2xlarge 市场和 us-east-2cm5.2xlarge 的市场是完全独立的,价格和机器容量都可能不一样:

        因此,竞价实例的价格一个很特别的地方是,每个市场中的 EC2 类型价格是波动的:

        波动的原因是因为,如果 AWS 的客户整体负载比较高,热门实例的竞价市场容量会缩小,调配到按需和包年预留中去,所以,这么好的竞价市场,运行者的机器的被中断的概率要高于按需和包年购买方式的机器,中断的概率有多高呢?正常在 5% 以下,有些在 5% 到 10% 之间,超过 10%的竞价实例你真的要用就要掌握好机器被中断后的处理工作。


总结

帮助客户优化成本是我们的一贯落实在实际工作中的使命,云主机、虚机,或者AWS EC2 实例,是客户采用云计算必须面对的云技术之一,感谢AWS 一贯的服务即 API 的原则,客户可以利用公开的价格 API 获取所有的AWS 服务价格,从而可以深刻理解 EC 实例的类型及各种组合的最佳性价比机型和区域;当然目前的 218 种 EC2 实例类型,选择适合客户场景的最佳实例类型种类,不仅仅要通过价格 API 分析通用的实例选型因素,还需要结合具体场景进行实际测试验证,不同的实例类型都有各自的技术特点,这些技术特征才是实际项目成功的关键要素。

参考资料:

  • https://aws.amazon.com/cn/blogs/aws/aws-price-list-api-update-new-query-and-metadata-functions/

  • 查询当前时刻,不同的竞价实例市场的中断概率:

    • https://aws.amazon.com/ec2/spot/instance-advisor/?nc1=h_ls

  • Python脚本,获取AWS EC2 价格数据:

    • https://raw.githubusercontent.com/soldierxue/blog/master/ec2price/ec2price.py

 



客户案例系列:

云架构师自我修养系列:

近期原创:


文章转载自求索云途,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论