我是否应该在 API/Web 前面使用 CloudFront 只是因为我想将它们放在一个域上?

我是否应该在 API/Web 前面使用 CloudFront 只是因为我想将它们放在一个域上?

我通常使用 S3 上的前端单页应用程序和服务器上的后端 API 来开发应用程序,通常是 Elastic beantalk(即 ELB + EC2)。我不知道在 ELB 和 S3 前面放什么比较好 - 主要是 CloudFront 还是 API Gateway。我现在的主要需求是缓存和性能(减少服务器负载)。当然成本也会是额外的好处。在我的例子中,流量通常仅限于单个地区/国家(新加坡)。

因此,假设我想保留单个域,我想我肯定需要 CloudFront?因此 CloudFront 将有 2 个源 S3 和 ELB。S3 源可以配置较长的缓存 TTL,ELB 可以配置较短的缓存 TTL,以处理峰值。这是个好主意吗?

但是如果某些 API,尤其是列表 API 不应该被缓存,该怎么办?如果我将 TTL 设置为 0,它就不会被缓存,但据我所知,它的速度更慢?如何最好地处理这些问题?

话虽如此,我什么时候应该使用 API 网关?假设我不需要所有 SDK 内容,并且我当前的系统仍在 ELB/EC2 上。在我看来,它似乎只是一个像 cloudfront 一样的代理和缓存系统?

答案1

如果要在 CloudFront 和 APi Gateway 之间做出选择,CloudFront 是正确的解决方案。API Gateway 并不适合托管整个网站,并且存在与大型有效负载和二进制内容相关的复杂性。

两者都可以用作反向代理,但是 CloudFront 对于 API 之外的用例更加直接,并且具有无限的缓存存储。

它不会缓存,但我的理解是它的速度较慢

它只是“较慢”,因为它没有缓存响应那么快。但使用 CloudFront 处理不可缓存的内容是有效且受支持的。它通常会提高所有内容的性能,因为它优化了浏览器和服务器之间的连接……但这种效果随着距离的增加而最为明显……因此,如果您的观众通常距离如此之近,如果他们也在新加坡,那么不清楚这会给他们带来什么优势。

当然成本也会是奖励。

由于您说您的流量仅限于新加坡,因此您需要了解另一个细节。

在新加坡:

  • 从 EC2 或 S3 到互联网的流量为 0.12 美元/GB。
  • 从 EC2 或 S3 到 CloudFront 的流量为 0.00 美元/GB。
  • 从 CloudFront 到 Internet 的流量为 0.14 美元/GB。

因此,这里存在成本倒置。在某些地区,使用 CloudFront 的成本与不使用 CloudFront 的成本相同或更低(例如,在 us-east-2,使用 CloudFront 的成本实际上比不使用 CloudFront 的成本低 0.005 美元/GB)。新加坡不属于这些地区之一。

考虑到您希望将所有内容都保留在单个域下,CloudFront 似乎仍然是一个不错的选择。

相关内容