Scenario / Questions

I’m trying to scale our web application (PHP, MySQL, memcache) in a multi-region scheme. Currently we are using a setup with two EC2 instances behind an ELB and an RDS instance, all of them in US-EAST (Virginia) region.

We would like to have a presence in the EU (Ireland) region as well. This means at least a new EC2 instance there (identical to the others, serving the same application).

I have copied the desired AMI, setup the new instance, setup a same ELB configuration (required for SSL termination) and configured latency-based routing in Route53. And it works as suggested.

But, clients from EU have speed problems. This is due to the fact that the EU EC2 instances connect to the US-based RDS instance. As far as I know Amazon has not yet enabled RDS multi-region replication.

Do you have any suggestions on how to properly speed up the whole setup while using the single RDS instance?

Also, any ideas in general on how to scale things up? Ideally we would like to continue using the RDS technology for various reasons. Nevertheless, I am open to suggestions (I guess the next idea would be to host our own MySQL servers).

Find below all possible solutions or suggestions for the above questions..

Suggestion: 1

You should think carefully why you need to have the same data in both US and EU. After all these are different users.

Running in a multi-region environment is much more complex and usually giving back performance due to the inherent latency between US and EU.

Even if you move out of RDS and try to replicate your data between regions, either asynch or synch, you will get latency issues that will give bad performance to your users.

The easiest way is to set up a dedicated RDS server in EU and share nothing between these instances.

Suggestion: 2

RDS is great for single-region deployments because of the low latency, but it becomes a different story when you start expanding to the different regions. If you want to keep the RDS instance, you could set up your own MySQL server in the EU region and do replication. This way, the speed will be far more acceptable.

Suggestion: 3

Recently, AWS made a move towards the direction I had previously asked about in my question by announcing cross-region RDS read replicas. However, this is only a small step towards a true multi-region setup.

Suggestion: 4

I believe this is what you want. RDS replication to EC2 running mysql in a different region.

https://aws.amazon.com/about-aws/whats-new/2013/09/05/amazon-rds-new-data-migration-capabilities-mysql/

Suggestion: 5

One possible solution to improve latency could be to use Amazon ElastiCache (which is basically Memcached under the covers).

You would have to create an ElastiCache Node in each region (US-EST and EU) and have your application logic (EC2) use the cache node whenever possible. If you go this route you will have to re-architect your application 1) know what to cache and when and 2) to grab as much as possible from the local ElastiCache Node.