如何在AWS中削减成本

世界正在发生巨大变化。许多公司正在寻找任何降低成本的方法,以求生存。同时,在线服务的负担正在加重-特别是与组织远程工作,进行视频会议和在线学习有关的负担。

在这些情况下,一方面,确保基础架构的可靠性和可伸缩性非常重要。另一方面,不要随着购买服务器,磁盘和流量付费而陷入困境。

Bitrix24的我们非常积极地使用Amazon Web Services,在本文中,我将讨论可以帮助您降低成本的几种AWS功能。

Bitrix24是一项全球服务,我们为全球客户服务。自2015年以来,自第242-号法律对个人数据的本地化生效以来,俄罗斯用户的数据就存储在俄罗斯的服务器上。但是,服务于全球其他客户的服务的整个基础架构都部署在Amazon Web Services中。

经济危机已经是既成事实。美元增长了,不太可能在不久的将来恢复到原来的位置,因此支付外币托管费用变得相当繁重。

在这种情况下,如果您继续将资源放在AWS中,您很可能会对有助于节省基础设施租赁费用的技术感兴趣。

我将谈论我们多年来使用的主要工具。如果您还有其他使用方法-请分享评论。

所以走吧

RI-预留实例


在AWS上节省资金的最简单,最明显的方法是使用保留的EC2实例。如果您知道一定会使用某些实例至少一年,则可以为它们支付预付款,并获得30%到75%的折扣。

c5.xlarge实例的计算示例:

图片

所有价格和计算都在此处

有时看起来复杂而混乱,但是总的来说,逻辑是这样的:

  • 保留期越长-1或3年-折扣越大。
  • 立即预付款越大-您可以完全不使用任何预付款就可以做到,您可以使用所有预付款,全额预付款-折扣越大。
  • 如果我们保留一种特定类型的实例,但不使用可转换实例,则会有更大的折扣。

对于我们自己,我们会保留1年,因为3年的计划非常困难。这样可以节省EC2。

竞价型实例


使用竞价型实例本质上是某种资源交换。当亚马逊拥有大量空闲资源时,您可以设置愿意为特殊的“竞价型实例”支付的最高价格。

如果某个区域和AZ(可用区)中的当前需求较小,那么将向您提供这些资源。而且,价格比按需价格低3-8倍。

有什么收获?

唯一的问题是,如果没有可用容量,则不会向您提供请求的资源。如果需求急剧上升,并且现货价格超过您设定的最高价格,则您的现货将被终止。

自然,此类实例不适用于例如生产中的数据库。但是对于某些与某些计算(例如,某些计算,渲染,模型计算)相关联的任务,节省测试的一种好方法。

让我们在实践中看看我们在争取什么。以及斑点可以多长时间以一定价格“消失”。

这是直接从AWS控制台针对c5.4xlarge实例的eu-central-1区域(Frankfurt)的竞价型实例定价历史记录的示例:

图片

我们看到了什么?

  • 价格大约是点播的3倍。
  • 该区域中所有三个可用区都有可用的现货实例。
  • 三个月来,价格从未上涨。这意味着三个月前以给定的最高价格(例如0.3美元)推出的现货仍然可以继续工作。

在实践中我们如何使用现货:

图片

-我们将现货用于应用程序服务器。

-对于他们来说,我们正在积极使用CloudWatch + Auto Scaling捆绑包-在一天内自动扩展:负载增加-启动新实例,负载下降-它们被熄灭。

-为了安全起见,我们有两个Auto Scaling小组为平衡器工作-以防斑点用完。一个AS组-具有正常(按需)实例,第二个-具有斑点。亚马逊通过CloudWatch Events在2分钟内警告现货实例将被删除(终止)。如果发生这种情况,我们将处理这些事件并设法将主组扩展到所需的实例数。

详细信息在此处- 现场实例中断通知

-为了更有效地使用Auto Scaling,并最大程度地使用分组中的机器,我们使用以下方法:

  1. 竞标组的上垃圾桶较低-我们较早开始“扩大”规模。
  2. 较低的较低垃圾箱-我们稍后开始“缩小”规模。
  3. 对于常规组,情况恰恰相反。

EC2实例存储


使用AWS的每个人都知道用于EC2实例的主驱动器是EBS(弹性块存储)。可以将它们挂载到实例,禁用,挂载到其他实例,从它们快照。

根据其类型,所有EBS均以一种或另一种方式收费。他们花了很多钱。

同时,对于许多类型的实例,在创建它们时,可以使用本地磁盘连接-EC2实例存储

这些磁盘的主要功能是,如果使用该磁盘停止实例,则启动后该数据将丢失。

但与此同时,它们有条件地免费-仅针对实例本身付费。

这样的磁盘可以完美地用于不需要持续存储的任何临时数据-交换,缓存,任何其他临时数据。实例存储驱动器的性能非常高:除了非常旧的实例类型外,现在还使用SSD或NVMe SSD。

结果是:我们连接的EBS磁盘更少,支付的费用也更少。

S3不完整的分段上传


上面的讨论主要是关于EC2。接下来,我们描述一些使用S3(简单存储服务)时可以节省的技巧。

如果您正在积极地使用S3,那么您可能知道S3和大多数与此存储一起使用的客户端都支持分段上传 -大对象装载有“片段”,然后“组合”成单个对象。

这很好用,但是有一次埋伏。

如果由于某种原因下载未完成(例如,连接中断,并且下载未恢复),则下载的部分不会自行删除。但是,它们占用空间,您需要为此付费。

令人不愉快的是,这种不完整的数据在使用S3的标准工具时根本看不到:既不能通过cli中的“ ls”,也不能在客户端程序中。您可以使用list-multipart-uploads命令在aws cli中找到它们

但是,与他们一起工作太累了。。。

在特定存储区的设置中选择存储不完整分段上传的选择是最合乎逻辑的。但是由于某种原因,亚马逊没有这么做。

不过,有一种方法可以使您的生活更轻松,并自动删除不完整的分段上传。在“管理”选项卡上的存储桶设置中,有一个“生命周期”部分。这是一个方便的工具,可让您配置用于处理对象的各种自动规则:将它们移动到其他存储库,一段时间(过期)后将其删除,以及-包括-控制不完整分段上传的行为。

图片

有关此问题的详细文章位于AWS博客上 -尽管带有旧界面中的示例,但一切都很清楚。

重要的是,配置为删除不完整数据的Lifecycle不仅适用于新对象,还适用于现有对象。

可以通过CloudWatch监视S3中实际占用的空间量。当我们设置删除不完整的分段上传内容时,我们惊讶地发现我们释放了超过12 TB的存储空间...

S3智能分层


S3具有几种不同的存储类别:

  1. 标准。
  2. Standard-IA(不经常访问)-用于很少访问的对象。
  3. 一个Zone-IA-用于相对非关键的数据。在此类中,对象被复制到更少的点。
  4. Glacier是一种非常便宜的存储,但是您无法立即从中获取任何对象。您需要提出特殊要求并等待一段时间。

它们都有不同的使用条件和不同的价格。它们可以并且应该合并-取决于您的不同任务。

但是相对最近,出现了另一种非常有趣的存储类型-智能分层。

他的工作实质如下:只需支付少量费用,就可以对S3中的数据进行监视和分析,监视对它们的调用,并且如果30天没有任何调用,该对象将自动移动到不频繁访问的存储中,其成本大大低于标准存储。如果一段时间后再次访问该对象-同时没有发生性能损失-将其再次移至标准访问存储库。

最重要的便利:您自己不必做任何事情。

亚马逊本身将“以一种聪明的方式”做所有事情-它将找出要放置哪些对象。

通过启用智能分层,我们在某些存储分区上节省了多达10-15%的费用。

一切听起来都太好了,太神奇了。但是不能有一些陷阱吗?它们是,当然必须加以考虑。

  • 监控设施需要额外付费。在我们的情况下,节省的费用完全可以支付。
  • 您可以对任何对象使用智能分层。但是,小于128 Kb的对象将永远不会转移到不常访问的级别,并且将始终以正常价格付款。
  • 不适合存储少于30天的对象。此类物品仍将至少提前30天支付。

如何启用智能分层?

您可以在S3 API或CLI中显式指定存储类INTELLIGENT_TIERING。

并且,您可以配置生命周期规则,例如,根据该规则,在一定存储时间后的所有对象将自动移至“智能分层”。

图片

在同一AWS博客上阅读更多内容

冰川


如果我们在谈论S3中的不同存储类别,那么Glacier当然也值得一提

如果您有需要存储数月和数年的数据,但是对它们的访问极为罕见(例如,日志,备份),那么请务必考虑使用Glacier。它的使用价格比标准S3低很多倍。

为了方便使用Glacier,您可以使用相同的生命周期规则。

例如,您可以设置一个规则,将对象存储在常规存储中一段时间​​(例如30-60天)(通常需要及时访问最近的日志或备份,如果我们谈论它们的存储),则将其移动到冰川,以及1-2-3年后-完全移除。

这将比仅存储在S3中便宜得多。

* * *

我谈到了我们自己正在积极使用的一些技巧。AWS是一个巨大的基础架构平台。当然,我们没有谈论您使用的任何服务。如果还有其他对您有用的保存方式,请分享评论。

All Articles