1

What I read in stack overflow and other blogs-

https://stackoverflow.com/questions/11707879/difference-between-scaling-horizontally-and-vertically-for-databases/11715598#11715598

http://ht.ly/cAhY6

https://hackernoon.com/database-scaling-horizontal-and-vertical-scaling-85edd2fd9944

https://stackoverflow.com/questions/27157227/can-relational-database-scale-horizontally

Concept: Multi-tenant web app(CRM)

After summarizing all blogs mentioned above I got confused. I have the following scenario

  • Having multiple EC2 instances and RDS instances for a single product - Here we planned one EC2 instance will have one RDS and failover plans. Let's come with figure- 25 tenants requests will be handled in one EC2 instance and data will be managed in corresponding RDS. Another EC2 instance and RDS will be managed for another set of 25 tenants. Each EC2 instance will have the same code base.

Can we say - it's horizontal scaling? If not what should be done to get the exact horizontal scaling?

1
  • You seem to be describing sharding. You might be better off using the same EC2 instance for all customers, but putting a subset of customers onto each RDS database / shard. You'll need a fast way to map customer to shard, some kind of in-memory but durable store, maybe elasticache.
    – Tim
    Jan 29, 2020 at 7:50

1 Answer 1

2

Horizontal scaling typically means that you’ve got a fleet of undifferentiated servers where each server can serve any request. And you scale the capacity up and down by adding or removing more of the same servers.

With vertical scaling you would simply upgrade your one server to a bigger capacity, e.g. larger instance with more CPUs and more memory.

For horizontal scaling in AWS you would typically have:

  • fleet of stateless servers that are all configured the same way and don’t store any user data and can be added automatically without additional configuration and removed at any time without any data loss.
  • user data stored in a database (e.g. RDS), on a shared filesystem (e.g. EFS) or in an object storage (e.g. S3), not on the actual servers.
  • load balancer spreading the load roughly equally across the servers (e.g. EC2 instances, Fargate containers, etc)
  • automatic capacity scaling i.e. adding and removing servers based on actual load.

The definitions may vary but I wouldn’t call your setup horizontally scaled as you simply added another instance to support an independent workload (your other set of tenants) and not added more capacity to support the same workload as the first node.

Hope that helps :)

3
  • Thank you sir. It helped alot Jan 29, 2020 at 8:46
  • @VeshrajJoshi Glad to hear that. If you’re happy with the answer please upvote and accept it. Thanks :)
    – MLu
    Jan 29, 2020 at 10:18
  • do not worry about upvote and accepting answer ... I already upvoted your answer ... I will accept too ... thank you so much for the explanatory answer. Jan 29, 2020 at 10:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .