介绍
GraphQL 缓存是一个缓存层,它卸载 GraphQL 服务器的负载并通过在 CDN 上缓存 GraphQL API 响应来加速 API。1.
使用 Amazon CloudFront 缓存 ALB + ECS 组成的 GraphQL 服务器响应的机制,洛亚由于我将它介绍到我自己的 EC 站点,因此我想在以下三部分系列中写一篇文章。
(一)介绍背景和目的
② 使用 AWS Prototyping 程序开发
(3) 产品发布前解决的问题,引入的效果
本文是关于(1)介绍的背景和目的。
此外,包括本文在内的三篇文章的发布,旨在补充第 4 章 JAWS-UG SRE 的内容。如果您有兴趣,请查看演示材料。
引进效果
首先写一下文章③中介绍的效果,由于ECS的成本降低量超过了CloudFront的成本增加量,AWS的总成本得以降低,API的响应时间测得前端减少了,提升高达 52%。
如果您不介意,我希望您也阅读文章②和③。
假定读者
它适用于以下读者。
- 任何对如何在 CDN 上缓存 GraphQL 感兴趣的人
- 使用 GraphQL 的开发人员
- 处理站点/服务可用性和性能问题的 SRE/基础架构工程师
在以下情况下,本文的内容可能没有帮助。
- 使用 AWS 以外的云服务,或使用 Akamai 或 Fastly 作为 CDN
- 使用 AppSync
这是本文的前提。
- 使用 AWS
- CloudFront 源 GraphQL 服务器由 ALB + ECS 组成(EC2 也是可能的)
介绍的背景和目的
什么是 GraphQL 缓存
GraphQL 缓存是一个缓存层,它卸载 GraphQL 服务器上的负载并通过将 GraphQL API 响应缓存到 CloudFront 来加速 API。
缓存有望降低 GraphQL 服务器(源)的基础设施成本并提高抗尖峰能力。
介绍背景
这是因为我觉得 GraphQL 服务器负载管理、AWS 成本增加和可扩展性在不久的将来会出现问题。
气球是当前的负载对策,红色椭圆是我觉得有问题的地方。GraphQL 服务器负载测量
当预期访问集中(峰值)时,请提前横向扩展或纵向扩展,但 Auto Scaling 依赖于意外负载。2.
Fargate 启动时间越来越好3, 曾出现过目标跟踪缩放由于尖峰而跟不上负载增加,导致响应延迟或错误的情况。AWS 成本增加
LOWYA 后端基础设施使用 ECS 容量提供程序,是常驻任务和现场任务的混合配置。相比只启动常驻任务,成本的增加是可以抑制的,但由于启动了数百个任务,一定的成本增加是不可避免的。
Aurora 还将增加成本,因为它会在峰值事件之前扩大规模,直到站点的流量恢复到正常水平。
近期的可扩展性挑战
在不久的将来,纵向扩展/横向扩展可能会达到其极限。
数据库参考系统的负载可以通过使用Aurora阅读器端点,增加阅读器实例的数量来处理,但是数量和实例大小都有上限。由于成本也很高,因此最好能够以更便宜的方式处理负载。
我认为ECS可以启动的任务数量达到上限是非常罕见的,但是你要记住,达到配额的可能性不是零。介绍目的
希望改善以上问题,“无论谁看到它,都缓存相同(应该相同)的响应”是目标。
一旦通过缓存将原始负载卸载到 CDN,开发人员就可以微调他们的应用程序和数据库查询,或者以比简单扩展/扩展后端基础架构更低的成本处理负载。嗯。
图中的蓝色注释是可以预期改进的点。
本文摘要
在本文中,我们分享了 GraphQL 缓存的背景和目的。
如果您可以使用 CloudFront 来缓存“无论谁看到都相同(应该相同)的响应”,那么您不仅可以减少 GraphQL 服务器上的负载,还可以加快它的速度。在下一篇文章中,我想写一下 GraphQL 缓存是如何开发的。
-
Akamai 的博客中使用了术语“GraphQL 缓存”。
https://www.akamai.com/ja/blog/developers/graphql-caching
缓存层不一定限于 CDN。例如,您可以将 ElastiCache 放在数据库前面以缓存查询结果。本文的兴趣在于缓存在 CDN 上。↩ -
横向扩展Aurora reader实例是处理引用处理负载的有效方法,但目前应用端并未设计为引用reader端点,因此无法使用该方法,因此包含在配置图中。我没有。↩
-
2022 年 4 月,Fargate 启用了快速扩展,但我们遇到了仍然出现错误的情况。
https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-fargate-delivers-scaling-applications/ ↩
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308628197.html