In his great thesis, Benjamin Erb says about scalability, reliability and availability:

The essential technique for ensuring availability and reliability is redundancy and the overprovisioning of resources. From a methodical viewpoint, this is very similar to horizontal scaling. However, it is important not to conflate scalability and availability. Spare resources allocated for availability and failover can not be used for achieving scalability at the same time. Otherwise, only one requirement can be guaranteed at once.

This means that if I want to achieve availability of a resource A then I have to deploy, for example, a cluster with 2 nodes serving this resource but the load will go always to the first node (no load balancing!) and if that node crashes the load will be routed to the second node?

If the load increases I not be able to distribute the load between both nodes?

If I distribute the load between both nodes and one crashes then all the load will go to the remaining node (maybe applying some strategy for back-pressure) and I'll be using the second node for both availability and scalability?


Honestly, I am having trouble parsing what you are saying. However, the problem is quite simple: if you allocate the same spare resources to both scalability and availability, then you cannot achieve both, you have to choose.

  • allocate the spare resources for scaling, but then they are no longer available for failover, i.e. you can no longer guarantee availability
  • keep the spare resources for failover, but then your remaining resources cannot scale further

You cannot do both. If you want to guarantee both you have to overprovision resources for both separately.

Say, one server can serve 100 users. You have an average of 600 users, and peak loads of 800 users. You want to be able to survive 2 dead servers.

Then you cannot just provision 8 servers, you need to provision 10, so that you can survive 2 failed servers at peak load (800 users). If you share the 2 extra servers between your redundancy and scalability requirements (i.e. provision 8 servers), then you can survive 2 dead servers at average load, and you can scale to 800 users at peak load, but not both.

Note: I didn't say anything about active and standby servers here. That's because it is irrelevant. Obviously, you need at least 6 active servers. But it doesn't matter if you have 6, 7, 8, 9, or 10 servers active and 4, 3, 2, 1, or 0 standby. You can have 6 running and 4 standby and turn them on on demand when the load rises or a server dies. Or you can have 10 running, and the only thing that happens is that they are not running with optimal efficiency. But still if 2 die during peak load, all that happens on the other 8 is that the load goes up, but they don't overload.

| improve this answer | |
  • Thanks Jörg. I get what you're saying but if I've provisioned 10 server for peak loads of 800 and be able to survive 2 dead nodes, but then I received an unexpected peak load of 1000 and ALL nodes are alive... I must reject the 200 new requests having 2 idle nodes? – gabrielgiussi Mar 17 '16 at 13:55

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.