查看原文
其他

“我将 AWS 的数据传输成本,降低了 99%!”

CSDN 2024-01-24

本文作者发现,在 AWS 上传输数据有一种方法,可大幅降低传输成本——利用 S3:“如果成本是你最关心的问题,这个方法可以有效降低 99% 以上的成本。”

原文链接:https://www.bitsand.cloud/posts/slashing-data-transfer-costs/

作者 | Daniel Kleinstein
翻译 | 郑丽媛
出品 | CSDN(ID:CSDNnews)

在 AWS 上不小心花太多钱的方式有很多,其中最简单的一种就是不小心传输了数据。截至目前,AWS 对数据传输的收费标准如下:

(1)从 AWS 到公共互联网的数据传输费用从 0.09 美元/GB(弗吉尼亚州北部)到 0.154 美元/GB(开普敦)不等,因此每 1TB 的数据传输费用约为 90-154 美元。

(2)从一个 AWS 区域到另一个 AWS 区域的数据传输费用从 0.02 美元/GB 到 0.147 美元/GB 不等,因此从未离开 AWS 网络的每 1TB 数据的传输费用约为 20-147 美元。

在这两种传输中,你只需要支付出口费用——也就是说,你只要为离开 AWS 区域的数据付费,无需支付传入数据的费用。现在,让我们来看更棘手的数据传输方式:

(3)在同一 AWS 区域内可用区之间的数据传输,每个方向(不论是传入还是传出)的成本为 0.01 美元/GB,这一定价在所有地区都是一样的。因此,在两个相同区域的可用区之间传输 1TB 数据时,出口和入口的费用分别为 10 美元和 10 美元,总计 20 美元。

以上价格在所有主流云提供商之间都差不多。数据传输的价格很容易累加,对云提供商来说这是一个利润极高的收入来源——甚至由于利润很高,Cloudflare 推出了与之竞争的 R2 存储,其特点就是零出口费,同时还发表了一些激烈言辞,抨击 AWS 收取出口费用。

一般来说,AWS 推荐在多个可用区中设置资源,这是确保可靠性和可用性的最佳做法。但这种方式很容易导致资金流入跨区成本的“熔炉”中:任何涉及在不同可用区资源之间发送数据的应用程序,都会产生此类费用。

所以,我们能鱼与熊掌兼得吗?换句话说,我们能否在建立跨可用区基础设施的同时,避免支付跨可用区的数据传输费用?

使用 S3 避免数据传输成本

S3 有一个重要特性——S3 中的大多数存储类,都以区域粒度而非可用区粒度来存储它们的存储桶。AWS 会在后台该区域内至少三个可用区内复制这些数据,这也就是 S3 具有超高持久性和可用性的原因之一。

(注:有两种存储类别,S3 One Zone- infrequency Access 和新推出的 S3 Express One Zone,这两种都只将数据存储在单个可用区中。二者之中,你支付的存储费用可能较低,但要以可用性为代价。例如,S3 One Zone-Infrequent Access 的成本为 0.01 美元/GB,其可用性为 99.5%,而 S3 Infrequent Access 的成本为 0.0125 美元/GB,但其可用性为 99.99%。)

这意味着,标准 S3 存储桶中的数据对其所在区域的所有 AWS 可用区都“平等”可用——对于 S3 来说,从 us-east-1a 或 us-east-1b 下载数据并无区别。

不过,S3 还有一个重要特点:对于标准存储类别,从 S3 下载数据是免费的,只有在区域之间或到公共互联网下载数据时才会产生标准传输费用。此外,任何存储类别上传至 S3 也是免费的!(在数据传输方面,你发出的 S3 API 请求会产生费用,但相对较少)

现在,假设我想在 us-east-1a 或 us-east-1b 的两个 EC2 实例之间传输 1TB 的数据。从上文可以看到,如果我直接传输数据,将花费 20 美元。但如果我从一个实例上传数据到 S3,然后从另一个实例下载呢?

结果是:上传免费,下载也免费,但 S3 存储不是免费的,每月费用为 0.023 美元/GB,即 23 美元/TB。另外,这是以小时为单位收费的,因此我们可以设计我们的上传/下载,使数据在 S3 中的停留时间不超过一小时。假设一个月有 720 个小时,这意味着我们需要支付 23 美元的 1/720,约合 0.03 美元。(记住,我们要在使用完毕后删除存储!)

这样算下来,这次数据传输的费用仅为 0.03 美元,而不是 20 美元——非常棒!如果用具体数字来表示:假设数据传输速率低于一小时,那么我们已经将数据传输费用从 0.02 美元/GB(出口 0.01 美元,入口 0.01 美元),降低到了 0.000032 美元/GB,仅为原始费用的 0.15%!举个极端的例子,用这种方法传输 1PB 的数据大约只需 32 美元,而用标准方法则需要 20000 美元。

不仅如此,S3 还可以无限扩展。因此,用这种方法可以非常方便地将数据从一个 AZ(Availability Zone,可用区)复制到另一个 AZ 中的任意多个实例中,第二个 AZ 中的数千个实例也都可以下载相同的 S3 对象,且占用的时间与下载单个实例相同。S3 存储成本将保持不变,下载成本也将保持免费,这也很棒!

值得一提的是,S3 还有一个重要特性:单个对象不能超过 5TB。因此,如果使用这种方法传输超过 5TB 的文件,则需要对文件进行分片。此外,单个上传文件的大小也不能超过 5GB,如果文件大于 5GB,则需要使用多部分上传(S3 会在后台自动处理)。

演示

接下来,让我们看看实际情况,并为之惊叹。当我第一次想到这个方法时,尽管其背后的所有基本原理都很可靠,但如此大幅节约的成本还是令人难以置信——直到我在成本资源管理器中看到结果时,我才真的敢相信。 

我想从一个干净的 AWS 账户开始,这样我们在检查定价时就不会有任何干扰因素。因此,我为演示的每个部分创建了两个账户:

在每个账户中:我们将设置两个 EC2 实例,一个在 us-east-1a 中,另一个在 us-east-1b 中;我们将把两个实例都放在公共子网中,这样就可以轻松地通过 SSH 进入它们;还在实例中随机生成一个 1TB 的文件,以将其传输到另一个实例中。

我们将进行以下这两个实验:

(1)在第一个实验中,我们把两个实例分别放置在两个可用区中带有私有子网的 VPC 中。我们将在实例上,连接到私有子网的接口上,设置一个 netcat 服务器。然后,一个实例将 1TB 的文件传输到另一个实例中。

(2)在第二个实验中,我们将把两个实例放在一个具有 S3 网关端点的 VPC 中,然后创建一个 S3 存储桶,一个实例将把 1TB 的文件上传到存储桶中。上传完成后,另一个实例将下载这个 1TB 文件(然后将其删除!)。

在这两个实验中,我们都将 1TB 的数据从 us-east-1a 传输到  us-east-1b 中。在此之后,我们将等待 AWS 的成本资源管理器更新产生的成本,看看这种方法是否真的有效。

结果

几个小时后,成本资源管理器更新了计费数据。对于标准的数据传输方式,我们原本预计其成本为 20 美元,但最终花费了 21.49 美元(期间,由于我不小心停止了传输,不得不重新启动,导致了部分额外成本,另外创建的文件在技术上为 1024GB,因此基本价格为 20.48 美元):

我们真正想看的实验是基于 S3 的数据传输,我们预计其存储成本仅为几美分,实际结果如下:

只要 8 美分!!!让我们深入了解一下 S3 存储成本的详细情况,同时扩大我们的筛选范围,确保不存在数据传输费用:

的确,我们可以看到没有数据传输成本!但有些奇怪的是,唯一可用的 S3 使用类型与存储无关.....让我们筛选 S3 并按使用类型分组:

实际上,我们根本不需要支付任何存储费用。按理说,我们需要对 S3 请求收费:PUT 请求每 1000 次收费 0.005 美元,GET 请求每 1000 次收费 0.0004 美元,按照上传和下载 1TB 文件所需的请求量相加,得出最终费用。但令人震惊的是,这个过程真的没有存储成本——就好像 S3 不收取任何临时存储费用一样?这很不像 AWS,但我不知道该如何解释。我本来怀疑可能是 S3 免费层隐藏了成本,但我的 S3 存储免费层完全不受实验影响,没有消耗任何成本。

不管怎样,我们已经证明了这个方法是有效的。最后,让我们总结一下。

结论

在幕后,AWS会自动在可用性区之间复制S3数据——不管这对AWS来说可能会产生什么费用,都会被隐藏在你为数据支付的存储成本中。因此,在最根本的层面上,这种方法正在解锁免费的跨区成本——因为在你将数据上传到 S3 时,实际上就已经支付了跨区成本!事实上,如果你将数据一直保留在 S3 中,最终你将支付比跨区成本更多的费用,但通过立即在传输后删除它,你就可以节省 99% 的成本。

这种方法有一些明显的缺点:它不能直接替代现有的数据传输代码,它的延迟可能也比直接传输要高得多。但如果成本是你最关心的问题,那么这种方法可以有效降低 99% 以上的成本。

我真心希望这个方法对你有用,我认为它说明了在 AWS 中你可以节省多少成本——有这么多的服务,这么多的功能,这么多的价格点,几乎总有更多节省的空间。

 

推荐阅读:

不敌 HarmonyOS、难续 Android 神话,Google 欲放弃 Fuchsia:不再引入完整的 Chrome 浏览器

用户吐槽其“网瘾”洗衣机,每天要用 3.6GB 流量?网友:危,可能已遭黑客入侵!

马斯克旗下X距离“美版微信”再进一步;华为纯血鸿蒙首批开发者预览版Beta招募;Linux 6.8暂停合并 | 极客头条

继续滑动看下一个

“我将 AWS 的数据传输成本,降低了 99%!”

向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存