Cloud 10 min read

Building scalable and resilient applications with cloud

Types of failure expected and how the different parts interact
Table of Contents

Application scalability and resilience are crucial features that are vital for any application to perform well and meet the demands of its users. Scalability refers to the ability of an application to handle an increasing workload and increase performance by adding more resources, such as servers or memory. Resilience, on the other hand, is the capability of an application to maintain its functionality in case of failures and to quickly recover from them.

To achieve scalability, one approach is horizontal scaling. This strategy involves increasing the number of instances that respond to requests while maintaining service level agreements (SLAs) by replicating data across multiple servers within a single deployment environment. This allows for the application to handle a larger number of users or increased data load, without any decrease in performance. Another approach is vertical scaling, which involves running multiple instances on a single server and adding more resources such as RAM or CPU power when necessary. This allows for the application to handle a larger workload by increasing the processing power and memory available to it.

Resilience can be achieved through different approaches such as redundancy and load balancing. Redundancy involves having multiple copies of services running on different physical machines for fault tolerance. This ensures that if one server goes down, the other servers can still respond to requests and maintain availability. Load balancing is the process of distributing workloads across multiple servers, which helps ensure that there is always at least one available host available when needed, even if it’s not being used by any application currently running on it. This way, if one server goes down temporarily due to maintenance or other issues, the application can still function without interruption.

Resilience: Designing to withstand failures

You need to design your application to withstand failures. In a traditional system, the failure of any component would bring down the whole system. In cloud computing, however, there is no single point of failure; instead, you can partition your resources across multiple providers and use them as needed (more on this later). This means that you can have multiple “failures” within one application but still be able to recover from those failures without downtime or loss of data by using backup strategies such as disaster recovery planning.
You also need to ensure that your application can recover from failures: if one server goes down while other servers are still working fine, it may cause problems for users trying to access services such as email or web browsing because those services depend on availability through servers that aren’t working properly anymore due to issues with their own software components. So make sure all parts have redundancy built into them so they don’t fail when needed most!

Scalable & Resilient Application Infrastructure

There are a number of ways that you can scale your applications. Distributing workload across multiple servers helps ensure that there is always at least one available host available when needed, even if it’s not being used by any application currently running on it (or vice versa). This way, if one server goes down temporarily due to maintenance or other issues like power outages, you still have another host ready within minutes so nothing gets disrupted too badly while they get fixed up correctly!

Horizontal Scaling

Horizontal scaling is the process of increasing the number of nodes in a cluster. This is accomplished by adding new nodes to each cluster and then rebalancing workloads across all nodes.
The first step for horizontal scaling is configuring your application for multi-tenancy, which allows you to create multiple instances on one host (or virtual machine). The second step involves creating additional instances once you’ve created your first tenant’s environment. Once this has been done, it’s time to add another layer onto those two: a single-tenant environment where all traffic goes through only one endpoint—the master node or node group responsible for routing requests throughout your entire application instance architecture

Vertical Scaling

Vertical Scaling is a technique where you add more resources to a single computer. It’s a good solution when the load on the system is high and needs to be scaled out quickly.
Vertical scaling can be done by adding more memory, CPU, or disk space but it’s not always necessary or practical. You should use vertical scaling only if your application has been designed with this in mind, otherwise, it may lead to instability and performance issues down the line


Redundancy is a key factor in designing resilient applications. Redundancy can be achieved in a number of ways, for example:

  • Use of multiple compute instances
  • Use of multiple storage instances
  • Use of multiple databases and load balancers

Distributing Workload

  • Load balancers. A load balancer enables you to distribute requests across multiple servers so that a single application can scale horizontally. You can use a round-robin algorithm to determine which server receives each request or use hash algorithms such as consistent hashing and random hash functions to build balanced workloads.
  • Round-robin scheduling policies for distributed systems are often used for failover purposes; this means that if one machine fails, another will take over its duties automatically without any downtime or latency problems (provided there is enough available capacity at each location). This type of policy works well with applications that do not require high levels of performance in order for them not to be affected by this type of interruption – however, it may not work well with more demanding applications where performance degradation could lead to possible downtime situations due lack resources being available elsewhere within the same cluster rather than locally available ones.”

Resilient in Application Design

Cloud computing has introduced a new paradigm for application design. Resilient applications are able to withstand failures, making them more reliable and easier to scale up or down as needed. Resiliency is one of the key factors in cloud computing and can be achieved through two main practices: integration and automation.
Integration involves using multiple components together to create an entire solution, while automation allows you to easily update your system without having to manually reconfigure each part individually. Both practices help ensure that your application will continue functioning even if there’s an outage or failure—and they also allow you to reduce costs by reducing manual intervention during updates (e.g., instead of writing new code yourself).

Client-side Load Balancing

Client-side load balancing is when the client device is responsible for balancing the load. The client device will send a request to the application and receive a response. The client device also sends this response back to you, which means that you don’t need any additional software on your own server or cloud infrastructure.
The benefits of client-side load balancing include:

  • Reduced latency for users who are connected via mobile devices (e.g., smartphones) or wired connections (e.g., Ethernet). This can improve user experience because they won’t have to wait as long for their data transfers before seeing content from our site; instead, they’ll see it instantly! This also helps reduce bandwidth costs because there’s no need for extra servers which would otherwise be needed just so we could handle these kinds of requests efficiently–and with lower latencies too!

Circuit Breaker

Circuit breakers are mechanisms that prevent a system from failing. They monitor the health of a system, and if the monitored system fails, they trip it.
Circuit breakers can be reset by human operators or automatically based on predefined rules (e.g., if failure to meet a certain threshold for a certain period).

Fallback Processing

Fallback processing is a way to handle errors in your application. It’s used to avoid downtime or service degradation, and it can also help you avoid cascading failures—that is, if one failure occurs, another may follow. The idea behind fallback processing is that when something goes wrong with an application (for example, an error message appears), you don’t have to just sit there waiting for users’ connections to time out and go offline; instead, you can continue serving requests until they’re satisfied or until something else happens.

Fallback processing has been around since 2000 (yesterday), but it hasn’t been as widely used until recently because of its complexity—in fact, many people think that using fallbacks requires more than just writing code! But now that developers understand how this technology works in practice (and why),


Bulkheads are a way to limit the impact of a failure. They help prevent cascading failures, which can be caused by multiple services failing at once. For example, in an e-commerce system where all products are stored on separate servers and processed by different applications if one server crashes then you have lost all your data for that product line.
Bulkheads can also be used to manage concurrency: limiting how many concurrent requests can be made against a service or resource at any given time (often called “threads”).


In summary, it is clear that there are many ways to set up a scalable and resilient application. The key is to understand what types of failure you can expect in your system and how the different parts will interact with each other. You may have heard about load balancer failover before but did you know how much more complex it actually is? The article above describes how circuit breakers can be used to reduce the impact of these failures or even prevent them altogether.

Need help with technology
for your digital platform?

Get to know how technology can be leveraged to turn your idea into a reality.
Schedule a call with our experts

unthinkable ideas