出于几个原因,我曾经避免使用 AWS 等云托管平台。其中之一是定价。每件商品都是单独定价的,因此当您开始使用 AWS 时,很难理解整体情况。除非您了解所有 AWS 条款,否则某些价格可能会更加复杂。
在本文中,我们将了解 MERN 堆栈所需的服务,以及我们如何优化其成本。
成本计算可能很棘手。值得庆幸的是,有一些工具可以简化这一点,我们将对此进行研究。使用 AWS 时,直到收到账单后,您才知道需要支付多少费用。付款是通过信用卡自动完成的。当您不知道会发生什么时,仅此想法就很可怕!
拥有更多使用 AWS 的经验,并了解某样东西的通常成本会使其变得更加容易。在本文中,我们将介绍不同类型 AWS 产品的典型价格,以便您了解特定架构的成本。
您对 AWS 的体验越多,对定价就越满意。但是,这并不能消除附加费的风险。让我们潜入。
理解术语
AWS 初学者的一个障碍是了解所有特定的命名。您需要预留实例、按需实例还是现货实例?那么储蓄计划呢?
这可能会让您无法了解您最终实际支付的金额以及您需要支付的费用。理想情况下,您应该对 AWS 的产品有一定的了解,因为这样会更容易。尽管如此,我们将通过最常用的服务,并总结价格。
请注意,价格一直在波动。此处讨论的价格适用于 2021 年 6 月的eu-west-1地区,但是,每个地区都有自己的价格。
通用 AWS 服务定价
在我们继续之前,让我们假设我们想要实现一个典型的中小型 MERN 堆栈。我们至少需要以下物品:
一个 MongoDB 实例,或 Amazon 的 DynamoDB
托管后端服务的计算实例,在本例中为 NodeJS Express 服务
为我们的 React 前端存储静态资产的地方
无论我们的用户位于何处,CDN(内容交付网络)都具有稳定的速度,并且作为奖励,可以优化我们的静态文件存储成本
为了进行模拟,我们还将假设我们可以为服务预付 1 年的费用。
计算实例:EC2(弹性计算云)
弗洛里安·克鲁姆( Florian Krumm)在Unsplash上的照片
计算实例可能很难总结定价,因为有很多不同的类型可用,所有类型都有不同的价格。这就是为什么在这种情况下我们也将基于我们的 MERN 堆栈示例。
在继续之前,我们需要了解不同类型的可用计算实例。它们有四种口味。预留、现货、按需和保存计划实例。如果您已经知道这些差异,请随时跳过本节。
按需 EC2 实例:这些是您可以随时打开的实例。您将支付每小时的费用。如果您停止实例,则无需再为该实例付费,尽管您仍需为其存储付费。这是最昂贵的实例类型之一,因为它提供了很大的灵活性。仔细想想,与必须安装物理服务器相比,这非常方便。您的服务器可能会在一分钟内运行!
预留 EC2 实例:按需实例最高可享受 75% 的折扣。
这些是您保留特定时间的实例,可以是 6 个月,也可以是 3 年。您可以选择全额预付款或部分付款。长期预订,预付款比常规的按需实例便宜很多。
Spot EC2 实例:按需实例最高可享受 90% 的折扣。
这种实例类型更复杂。 它的运作方式类似于股票市场。其他人使用的 EC2 实例越多,EC2 实例的价格就越高。但是,当 AWS 上运行的 EC2 实例越少时,它就越便宜。这对于可以在任何时间点临时运行的非关键工作负载来说是理想的选择。它可能非常便宜,比任何其他实例类型都便宜。您可以设置您愿意支付的最高价格,一旦实例以该特定价格或更低价格可用,亚马逊将运行服务器。这确实意味着亚马逊可以随时启动和终止您的服务。这可以用于处理服务,这些服务可以在随机时间运行。这不适用于需要 24/7 正常运行时间的 Web 服务器。
对于此应用示例,我们假设 T3 small 满足我们的需求。这归结为每年 107 美元。每月将是8.91 美元。
数据库:DynamoDB
托比亚斯·费舍尔( Tobias Fischer)在Unsplash上的照片
DynamoDB,Amazon 的完全托管的 NoSQL 数据库有两种类型。预配和按需。与 EC2 类似,按需将比预置更昂贵。
在这种情况下,配置类型是指在数据库上使用可预测的读/写量。
为了让您了解 DynamoDB 的按需定价:
写入请求:每百万写入请求 1.4135 美元
读取请求:每百万读取请求 0.283 美元
除了请求之外,您还必须为实际的数据库存储付费。每月存储的前 25 GB 是免费的。您必须为每个额外的 GB 月支付 0.283 美元。
此外,备份等还有更多定价选项。
快速模拟一下,如果我们在 20GB 的数据库上有 350 万次写入和 350 万次读取,则总计每月约为 5.33 美元。
数据库:MongoDB
还有一个完全托管的 MongoDB 解决方案可用于 AWS,称为MongoDB Atlas。根据他们的定价页面,具有 2GB RAM 的 MongoDB 实例每月的费用约为57 美元,但更便宜的实例也可能满足您的需求。
静态文件存储:S3(简单存储服务)
照片由Maarten van den Heuvel在Unsplash上拍摄
亚马逊针对基本情况的静态文件存储的定价非常简单。但是,如果您想节省资金并优化成本,这可能会变得更加复杂。可以为每个特定文件设置特定的定价类型。
S3 标准:这是数据的标准定价,如果出现故障,将在 AWS 服务的多个区域中复制数据。推荐用于标准的和积极使用的文件。
S3 Infrequent Access (IA):在此定价等级下,文件的存储成本低廉,但文件的检索成本更高。这对于较少使用的文件是理想的。文件仍将跨不同区域复制以实现冗余。检索文件仍然很快。
S3 Glacier:这类似于 S3 IA,但存储价格更低,检索费率更高。这非常适合归档文件,例如保留特定文件的法律义务。文件检索速度较慢,从几分钟到几小时不等。
S3 Deep Archive:类似于 S3 Glacier,但更便宜,而且检索速度较慢,通常需要数小时。
S3 智能分层:此层让 AWS 自动为您的文件选择最合适的层,以尝试优化成本。这确实需要额外的存储监控费用。
我们以 1 GB S3 存储为例。对于我们的 React 应用程序,这不应超过 1 GB。亚马逊 S3 标准版的当前价格为每月每 GB 0.023 美元。此外,S3 文件的操作成本为每 1000 次操作 0.005 美元。
如果我们有 1GB 的数据,每月有 300 万个请求,那将花费我们大约 15 美元。但是,通过在 S3 存储前添加 CDN,我们可以显着降低 S3 检索成本,因为经常访问的文件将缓存在 CDN 中,而不必多次检索。
通过在我们的 S3 存储桶顶部设置 CDN,S3 存储桶本身对于我们的 MERN 堆栈最多应该花费我们几美元。
内容分发网络:CloudFront
接下来,我们将要设置一个内容分发网络来放置静态文件,例如 React 应用程序和资产。
AWS 提供的 CDN 称为 CloudFront。根据您将 CloudFront 设置为活跃的区域,会采用不同的定价。让我们以每 GB 0.12 美元的最坏情况为例。接下来是每 10,000 个请求的定价,最坏的情况是 0.022 美元。对于 100 万个请求,请求成本将降至2.2 美元。关于 GB 输出,让我们假设 20GB,这将降至2.4 USD。
当您希望按需使缓存失效时,失效也会产生额外成本。每月前 1,000 个无效请求是免费的。对于我们的小型应用程序,这已经绰绰有余了。
对于我们的CDN,这将降至每月 4.6 美元。
我们的 MERN 堆栈的价格摘要
每月完整价格明细:
计算:EC2(预留):8.91 美元
静态文件:标准 S3:2 美元
数据库:DynamoDB:5.3 美元
CDN:CloudFront:4.6 美元
总计:20.81 美元
对于将要使用的应用程序,这是非常稳定的设置的代价。对于较小的应用程序,您当然可以使用更便宜的设置。一个 T3.nano EC2 实例通常足以开始使用,它便宜 3 倍,每月仅需 2.25 美元。这将使总数降至14.15 美元。启动时,静态文件、数据库、CDN等其他成本也会更低。
请注意,此计算纯粹是对撰写本文时可用价格的估计,而不是保证。对于您的用例,请使用我们将介绍的以下计算工具。
计算工具
现在我们了解了 AWS 上 MERN 堆栈的不同选项。更准确地估算您的成本总是一件好事。有一些工具可以绘制您请求的架构并估算价格。
AWS 的官方工具是AWS Calculator。其他网站提供类似的估计,同时能够绘制您的架构,例如CloudCraft,它们有一个漂亮的工具来创建 3D 和 2D 架构图。作为奖励,在绘制架构时给出了价格估算。
计费和标签服务
最后,您会想知道您的资金在 AWS 平台上的去向。为此,大多数 AWS 服务都可以添加一个特定的标签。我们可以创建一个标签project并为其分配我们的项目名称。这样,在使用 AWS Cost Explorer 时,您将能够查看每个服务、每个项目的价格明细。正确标记您的 AWS 资源是一种非常推荐的做法。
概括
MERN 堆栈的稳定设置可能每月花费大约 20 美元,但是,当您开始一个项目时,更便宜的设置就可以了。云托管的好处是可以轻松自动扩展其服务。如果您当前的服务无法处理负载,您可以将其配置为自动启动额外的实例。
在项目开始之前,最好使用AWS 计算器或CloudCraft等工具绘制架构图并估算其成本。