Scaling with application running in Cloud

Scaling is one super big advantage of having your application running in cloud. Every cloud vendor provides some sort of scaling infrastructure with respect to the cloud service they provide. Scaling services are mainly 2 types:

Horizontal Scaling:

The objective of such type of scaling is to improve task handling by adding service parallelization. This is mainly done to improve concurrent task handling by spanning application on multiple machines. This type of scaling is achieved by adding more instances of the same machine in case of web server or adding sharding to the database to handle increased concurrent users.

Vertical Scaling:

The objective of such scaling is to improve the performance of current running application by boosting available resources to higher degree. This type of scaling is achieved by allocating more resources i.e. CPU, Memory, Disk IO etc to the current running service. In a multitenant system where multiple application are sharing resources this can be achieved quickly by modifying rule or setting in the host operating system. However when applications are running on their own VM in cloud, adding more resources may require significant or some downtime. Some internal resources can be added to current running hot VM however other resources may require VM to be down. In some cases this is because a new VM is rebuilt from scratch based on new resource requirement and the started in data center.

 

Scaling for High Availability:

Scaling for High Availability (HA) means the cloud infrastructure guarantees to keep the service available even when one or many horizontal machines are down due to any issue i.e. machine update or any kind of hardware failure. This is done by having multiple horizontal instances running in parallel on different hardware racks separated between some physical distance within the same physical location. So if by any reason one physical rack is down due to any problem other instances are available to serve. For example Windows Azure provides this functionality using the concept of update domain and fault domain. While upgrade domain is what user control within their application deployment however fault domain is an internal feature of Cloud operating system.