我想为设置最正确且延迟最低的基础设施AWS
。
我希望通过 提供静态Javascript
文件服务CloudFront
,在此基础上,调用动态服务器,该服务器将返回Javascript
由 所服务的文件之前声明的函数的调用CloudFront
- 我发现这是实现此目的的最佳方式。
但是,动态调用依赖于某个数据库(最终可能会是DynamoDB
),我希望将其分散并复制到多个区域以尽可能减少延迟。
我的想法是让Lambda
函数分布在世界各地的多个地区,从DynamoDB
相应地区的副本中检索数据,以便为 JS 函数提供动态参数(有没有办法让函数Lambda
不依赖代码并将DynamoDB
端点硬编码在代码中?)。
除此之外,我还想对每个请求进行广泛的监控,这是CloudWatch
最好的方法吗?还是我应该将其直接存储在MySQL Aurora
数据库或DynamoDB
某种数据库中?出于监控目的,最好的选择是什么?
对于拥有数百万用户的系统、跨区域、最低延迟和最具可扩展性的系统来说,这是否是最好的基础设施?
答案1
如果您需要Cloudfront中的动态请求,则可以使用Lambda@edge。
如果您的数据访问模式不需要关系,并且您设计分区键以避免写入或读取的热分区,那么 Dynamodb 是一个不错的选择。
Dynamodb 支持多区域主到主复制。
Lambda 是一个方便的工具,但在快速扩展时,约 10% 的请求会出现冷启动问题,因此 90% 的延迟将增加约 10 倍。您可以考虑使用 Fargate 来运行可自动扩展的完整容器,而不是使用 Api Gateway 的 Lambda 自动扩展功能。
Cloudwatch 可用于监控,无需大量设置或使用第三方工具。
希望有所帮助。