我正在尝试为“简单”问题设计架构,但是目前我没有找到解决方案。
问题:
我有一个S3 bucket
(每个区域都有一个桶复制,以便在每个桶中具有相同的内容),并且我想在其前面有一个CloudFront
来缓存对象。
我的需要:在显示S3存储桶中的对象时,世界上每个用户的等待时间都最低。
我想在每个S3存储桶的前面都有一个CloudFront分配,并有一个Route53
根据延迟到最近的CF进行路由。问题在于,对于同一个cname,我们不能有很多分布。
以下是我到目前为止拥有的架构( 这不好 )。
有什么想法要实现吗?
谢谢。
抄送
答案 0 :(得分:0)
只需保留您的一个存储桶,AWS CloudFront就会为您完成所有存储桶。
CloudFront如何向您的用户提供内容
在将CloudFront配置为交付内容之后,这是用户请求您的对象时发生的事情:
1 -用户访问您的网站或应用程序并请求一个或多个对象,例如图像文件和HTML文件。
2 - DNS将请求路由到最能满足请求的CloudFront边缘位置(通常是在延迟方面最接近的CloudFront边缘位置),然后将请求路由到该边缘位置
。3 -在边缘位置,CloudFront检查其缓存中是否有请求的文件。如果文件在缓存中,CloudFront会将它们返回给用户。如果文件不在缓存中,则会执行以下操作:
原始服务器将文件发送回CloudFront边缘
位置。
第一个字节从源头开始到达CloudFront
开始将文件转发给用户。 CloudFront还添加了
下次有人将文件存储到边缘位置的缓存中
请求这些文件。
有关更多信息,请阅读以下文档:
https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowCloudFrontWorks.html
为了以较低的延迟向最终用户交付内容,Amazon CloudFront在29个国家/地区的63个城市中使用138个存在点的全球网络(127个边缘位置和11个区域边缘缓存)。 Amazon CloudFront Edge位置位于:
答案 1 :(得分:0)
@Reza Mousavi提供的答案似乎非常详尽。 AWS CloudFront分发的重点是在全球范围内的Edge位置上缓存对象(请参阅配置附加快照时的选项)。
最佳实践(至少我现在做的-到目前为止没有抱怨)是为每个应用程序来源配置一个分发。配置时的选项为您提供了根据客户来源选择的区域。
答案 2 :(得分:0)
您可以做的一件事是,您可以创建一个CloudFront分配,并且可以将Lambda @ Edge附加到它,并使用它来重写请求中的主机标头。在Lambda内,您可以访问所有标头,并且可以根据所需逻辑任意重写它们。当您重写主机标头时,该请求将发送到另一个区域中的另一个存储桶。 我们使用此解决方案从两个区域的复制存储桶构建了多区域主动-主动交付。 最初的想法来自这里:https://medium.com/buildit/a-b-testing-on-aws-cloudfront-with-lambda-edge-a22dd82e9d12 对于不同的问题,这似乎是相同的解决方案:https://aws.amazon.com/blogs/apn/using-amazon-cloudfront-with-multi-region-amazon-s3-origins/
我们在今年的柏林AWS峰会上介绍了我们的解决方案,但尚未在任何地方发布它。
答案 3 :(得分:0)
AWS解决方案推出了新的解决方案,以解决跨区域的S3复制。
例如,您可以在俄勒冈州创建对象,在新加坡重命名它们,然后在都柏林删除它们,然后将所做的更改复制到所有其他区域。该解决方案专为可承受丢失事件和复制速度变化的工作负载而设计。
https://aws.amazon.com/solutions/multi-region-asynchronous-object-replication-solution/