CC.
CC.

Reputation: 2928

Multi region active-active using S3 bucket in each region

I'm trying to design an architecture for a "simple" problem but for the moment I did not found the solution.

The problem:

I have a S3 bucket (one in each region with bucket replication in order to have the same thing in each bucket) and I would like to have a CloudFront in front of it to cache objects.

My need: to have the lowest latency for each user in the world when displaying an object from S3 bucket.

I wanted to have a CloudFront distribution in front of each S3 bucket and a Route53 to route based on the latency to the nearest CF. The problem is that we cannot have many distribution for the same cname.

Here bellow the architecture I have so far (which is not good).

enter image description here

Any idea how to achieve this ?

Thanks.

C.C.

Upvotes: 0

Views: 1974

Answers (5)

Seth E
Seth E

Reputation: 1115

The question is quite old, so sharing this updated answer, which makes use of S3 Multi-Region Access Points

Always-on access for your data in Amazon S3, using cross-Region replication and Multi-Region Access Points (MRAP)

Upvotes: 0

ExploringApple
ExploringApple

Reputation: 1482

The AWS solutions has launched new solution to address the S3 replication across the regions.

For example, you can create objects in Oregon, rename them in Singapore, and delete them in Dublin, and the changes are replicated to all other regions. This solution is designed for workloads that can tolerate lost events and variations in replication speed.

https://aws.amazon.com/solutions/multi-region-asynchronous-object-replication-solution/

Upvotes: 0

nellgwyn
nellgwyn

Reputation: 11

One thing you can do is that you can create one single CloudFront distribution and you can attach a Lambda@Edge to it and use it to rewrite the host header in the request. Inside the Lambda you can access all the headers and you can rewrite them at will, based on any logic you want. When you rewrite the host header, the request will be sent to another bucket in another region. We used this solution to build multi-region active-active delivery from replicated buckets from two regions. The original idea is from here: https://medium.com/buildit/a-b-testing-on-aws-cloudfront-with-lambda-edge-a22dd82e9d12 This seems to be the same solution for a different problem: https://aws.amazon.com/blogs/apn/using-amazon-cloudfront-with-multi-region-amazon-s3-origins/

We presented our solution on the AWS Summit in Berlin this year, but haven't posted about it yet anywhere.

Upvotes: 1

jningthou
jningthou

Reputation: 902

The answer seems to be pretty elaborate as provided by @Reza Mousavi. The point of AWS CloudFront distribution is to cache objects on the Edge locations worldwide (see options while configuring-attached snapshot).
Best practice (at least what I do -no complaints so far) is to configure a single distribution for each application origin. The option while configuring gives you the regions to choose based on your customer origin.

enter image description here

Upvotes: -1

Rez Moss
Rez Moss

Reputation: 4600

Just keep one of your buckets, AWS CloudFront does all of them for you.

How CloudFront Delivers Content to Your Users

After you configure CloudFront to deliver your content, here's what happens when users request your objects:

1-A user accesses your website or application and requests one or more objects, such as an image file and an HTML file.

2-DNS routes the request to the CloudFront edge location that can best serve the request—typically the nearest CloudFront edge location in terms of latency—and routes the request to that edge location.

3-In the edge location, CloudFront checks its cache for the requested files. If the files are in the cache, CloudFront returns them to the user. If the files are not in the cache, it does the following:

  • CloudFront compares the request with the specifications in your distribution and forwards the request for the files to the applicable origin server for the corresponding file type—for example, to your Amazon S3 bucket for image files and to your HTTP server for the HTML files.
  • The origin servers send the files back to the CloudFront edge
    location.

  • As soon as the first byte arrives from the origin, CloudFront
    begins to forward the files to the user. CloudFront also adds the
    files to the cache in the edge location for the next time someone
    requests those files.

    enter image description here

For more info read the following doc:

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/HowCloudFrontWorks.html

To deliver content to end users with lower latency, Amazon CloudFront uses a global network of 138 Points of Presence (127 Edge Locations and 11 Regional Edge Caches) in 63 cities across 29 countries. Amazon CloudFront Edge locations are located in:

enter image description here

Upvotes: 0

Related Questions