-1

I have a really simple bookshop webapplication written in Spring framework, just to test its scalability.

I deployed this bookshop on one EC2 instance (t1.micro), and database on Amazon RDS (t1.micro) with master/slave replication of one master instance and 3 slave instances (There's really a lot more reads than writes). One t1.micro RDS instance can have at maximum of 32 concurrent connections

Application deployment structure for AWS

Then I did stress testing with JMeter, figured out that the bottleneck is in the database, since you can have at maximum 32 concurrent connections to t1.micro RDS instance.

Should I auto scale RDS database instances, since creating new replica modifies master and it really takes long time to make it available?

Instead of using RDS should I create EC2 instances with MySQL master/replica and then auto scale these instances?

Should I shard my database instead of replication?

Application also uses com.mysql.jdbc.ReplicationDriver to load balance between master and slave instances. Should I use something different like HAProxy?

Strawberry
  • 33,750
  • 13
  • 40
  • 57
Ivansek
  • 372
  • 5
  • 17

1 Answers1

2

Have you ever consider Caching and Partitioning ? The web application we have worked have used Memcache. It really helps in performance issues. On the other hand If you have tables that have so much records, you should consider partitioning, accessing these tables on partitions can have remarkable affect.

musti77
  • 21
  • 3