Auto-scale on Different Clouds

Most of the organizations across the globe are moving their IT solutions to the cloud or subscribing to the IT services that are hosted on the cloud. One of the primary reasons for adopting the cloud is the need to increase or decrease the infrastructure size based on the need of the business. This is called scalability and allows for significant cost savings for the organization without impacting their business.

The scaling of an application can be performed in two ways, irrespective of whether it is the on-premises infrastructure or the cloud.

  • Vertical scaling: Traditionally, this has been the more famous approach where more resources are added to the same instance of an application so that the application can handle the request load. For example, allocating more memory to the application or adding more threads in the thread pool used by the application. However, this approach suffers from the limitation that it can be expanded up to the physical limitation of the server or VM where the application is hosted. On the cloud, this is often referred to as Elasticity.
  • Horizontal scaling: It involves adding new instances of the application to share the request load. Each instance may be configured to use the same volume of resources. However, put together with a load balancer or within a cluster, the instances can handle any amount of request load. In the case the load increases further, more instances can be added in the future.

Cloud service providers offer scalability and elasticity for most of their services. Application owners have to determine the approach to be followed for managing the scalability of their applications. There are two standard mechanisms for deploying the applications in an environment.

  • Standard Deployment: Each application is bundled as an independent unit and its dependencies are configured and supplied in the run-time environment directly.
  • Containerized Deployment: Each application is bundled along with all of its dependencies and configurations. It is called a container and uses the base platform, often the operating system of the VM, to launch the entire application from scratch.

Before the evolution of containerization methodology, the applications had the architectural overhead to ensure that the application can be expanded horizontally. Many applications failed to expand horizontally because they used certain common resources or single-end-point resources, such as a common file, or a stream-based queue. With containerization, multiple instances of the application can be launched without disturbing other instances of the same application, and they operate in isolation. Thus, it becomes easy to increase the number of instances of the application on-demand.

The next big leap in the area of scalability comes in the form of a platform that can manage and orchestrate the container instances of an application. This tool is called Kubernetes. Kubernetes performs load balancing for the container instances, performs automatic rollouts and rollbacks, manages configurations and secrets, performs self-healing, and does many such activities to manage, control, and govern the running instances of a container. The best advantage of Kubernetes is that it has been adopted by all large cloud providers and it works in a standard way on all the cloud platforms.

We take a quick look at the options available for scalability for different cloud providers. The cloud providers support the scaling of both types of application deployment architectures, i.e., non-containerized and containerized.

AWS

  • Elastic Load Balancer (ELB): ELB works well for non-containerized applications. It looks for the health of the nodes and the load on the node and accordingly launches new instances of the application node from the scaling group defined for the application.
  • Elastic Container Service (ECS): It is a standard container orchestration service similar to Kubernetes and manages container images created by Docker or containerd or similar containerization tools.
  • Elastic Kubernetes Service (EKS): It is a Kubernetes-based container management service. It is one of the most famous container management services because of the large Kubernetes community support.

Azure

  • Azure Application Gateway: It operates at layer 7 of the OSI layers and performs scale-up and scale-down based on the traffic and load patterns.
  • Azure Container Instances: It is used for running and managing container workloads on the Azure cloud.
  • Azure Kubernetes Service: This is the preferred container management service on Azure and is completely based on the underlying Kubernetes platform. Since it uses Kubernetes, it is easy to port containers from other infrastructures and cloud providers and start running them on Azure.

Google Cloud Platform

  • Cloud Load Balancing: It is a global load balancing service that can auto-scale applications without any pre-warming into one or more regions seamlessly. It is one of the most highly performant load balancers with immediate scaling ability.
  • Google Kubernetes Engine: As the name suggests, it is the GCP’s managed service running the Kubernetes platform and supports container workloads. It is the first fully managed Kubernetes service in the cloud industry with the ability of 4-way autoscaling.

Conclusion

Scalability is a prime benefit on cloud platforms. Horizontal scaling is the key mechanism to achieve maximum load support for any application. Containerization of the applications is the most effective way to ensure that the cloud service provider can perform autoscaling up and autoscaling down of the application.

If you would like to explore any of the auto-scaling options in more detail, connect with us through the comment section.