MemberMay 31, 2020 at 5:30 pm
Thank you for your analysis and feedback.
To tackle this question, we need to focus on the problem it is asking.
“root cause is due to the slow read processing in your database tier.”
With this, there are two main ways to improve your Database read performance: Read Replicas and caching (using Elasticache). ElastiCache, especially Memcached provides easy deployment for read-only caching, suitable for this scenario.
These two options are mainly chosen for “scalability”. It is very easy to add Read Replicas, one-click on the console and you will have another node joining the Read-Replica pool.
ElastiCache uses in-memory caching, which offers very high throughput and very fast response time.
Increasing the Disk IOPS and/or increasing the instance type will not come close to the performance that you will get with in-memory caching in terms of read-speeds. Another benefit of caching is that it reduces the load on the RDS server when multiple queries are on the cache, the application does not need to query the database.
Now let’s tackle why other options are incorrect.
“Upgrade the RDS MySQL instance to use provisioned IOPS.”
“Implement sharding to distribute the incoming load to multiple RDS MySQL instances.”
– Yes, these options increase read-performance but it increases write performance too. You don’t want to pay for something you will not use. You will have to set up multiple databases for sharding, so that is difficult and not cost-effective, just to increase your read performance.
“Upgrade the instance type of the RDS MySQL database instance to a larger type.”
– There is a limit on how much you can scale and how much read-performance you can get from a bigger instance. An in-memory cache will outperform the performance of disk-based RDS read operation.
“Set up a Redis in-memory cache cluster running in an EC2 instance on each Availability Zone and enable replication on all nodes.”
– It’s not recommended to run your own caching mechanism on EC2. AWS offers a managed solution for that.
Hope this helps.
Kenneth Samonte @ Tutorials Dojo