⚖️ Scaling Your Project
Tags: cloud, webdev, aws, learning
Published: 2023-04-16 09:24:44

### From Side Hustle to Global Phenomenon

##Getting Started
Starting a web app as a side hustle is a great way to turn your passion into a profitable venture. But to take your project from a small idea to a global phenomenon, you need to be able to scale it. You need to design it with scalability in mind, optimize your code for performance, and plan for growth.

In this session, you will learn how to make your web app a success by implementing proven strategies for scalability. You will learn how to use cloud hosting and load balancing to handle increasing traffic, optimize your database for performance, and use caching and content delivery networks to improve speed and user experience. You will also learn how to measure and analyze your app's performance, so you can identify and resolve bottlenecks and improve scalability.

Whether you're just starting or have an established web app that needs to scale, this session will provide the guidance and tools you need to turn your side hustle into a global phenomenon. 

So, are you ready to make your web app a success? Let's get started! 🚀

## What is Scalability?

Long Story Short 🔍 : “**Scalability” of software is its ability to sustainably manage *change* in scale of demand.**

So what is meant by “demand” for software?

“**Demand”** is the request for the performance of the **core system functionality.**

Scalability refers to the ability of a system or process to handle an increasing amount of work or demand while maintaining or even improving its performance. In other words, it refers to the ability of a system to **grow and adapt to changing circumstances** without encountering significant obstacles or limitations.

Scalability can apply to various aspects of a system, such as its capacity to handle more users, data, transactions, or requests, expand geographically, integrate with other systems, or address changes in the workload.

For example, a scalable website can handle **a large number of concurrent users without slowing down or crashing.** A scalable business can expand its operations, customer base, or product offerings without experiencing significant disruptions or inefficiencies. A scalable software system can accommodate new features, technologies, or integrations without compromising its stability or performance.


![Funny Meme](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/xh23f7hswfio8qmu3soi.png)

---

## But Why Scalability:-

> Everyone must have used websites such as tools such as **ChatGPT** and have experienced server crashes first-hand. But do you know the real reason behind it?
> 

In today's world, users expect a lightning-fast load time, high availability 24/7, and minimal disruptions to the user experience, no matter how many others are trying to access your web app. Suppose your application isn't designed correctly, and cannot handle the increase in users and workload. In that case, people will inevitably abandon your app for more scalable apps offering a better user experience.


![Examples](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wdtzq5xju1794cawsyde.png)

Also, high traffic crashes a website due to a mismatch between traffic levels and the capacity of the website's infrastructure. Site visitors create system requests—clicking buttons, adding products to carts, searching for products, inputting passwords—that exceed the processing 
the capacity of your servers and any third-party systems involved in the visitor journey.

Your website will slow down, freeze, or crash when this happens.

[How High Online Traffic Can Crash Your Website](https://queue-it.com/blog/how-high-online-traffic-can-crash-your-website/)

Simply put: **Websites crash because insufficient resources lead to system overload.**

> **It has a lot to do with websites needing to be more scalable.**
> 

![The system requests—like the jumping up and down—bring the site crashing down.](https://queue-it.com/media/zakgnedu/bouncing-marbles-gif.gif)

The system requests—like the jumping up and down—bring the site crashing down.

<aside>
💡 **But still, why scalability instead of planning before and buying resources?**

</aside>

> While it is certainly possible to plan and purchase resources in advance, this can be costly and inefficient, especially for smaller organizations needing more resources to predict their future needs accurately.
> 

> By designing for scalability from the outset, organizations can more easily adapt to changing circumstances and ensure that their systems remain responsive and reliable as they grow. This often involves designing systems with distributed architectures that can scale horizontally rather than vertically, allowing additional resources to be added incrementally as needed.
> 

> **Also, by scaling down, they can avoid paying for unused resources and ensure they only pay for what they need.**
> 

## How to make things scalable, then?

Before we do a deep dive into how to make websites scalable, we will briefly examine what happens when you call a website.

- Your web browser sends a request to the website's server.
- The server receives the request and processes it.
- The server retrieves necessary data or files to display the website.
- The server sends the data or files back to your browser.


![Server](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m4tyefqo8s1w8f694wc3.png)



The speed of this process depends on various factors like server hardware, internet connection, website code and design, and traffic on the website at the time.

### Our Objectives when we talk about scalability

- To ensure a website can handle increasing users and traffic without becoming slow or unresponsive.
- To ensure that the website can adapt to changes in user behaviour, technology, and market conditions over time.
- To optimize the use of resources, including hardware, software, and network infrastructure, to maximize efficiency and cost-effectiveness. By reducing costs in downtime.


![Examples](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0wojwa2bc4afe8sf5187.png)



## Steps:-

[How to Build Scalable Web Applications? - DevTeam.Space](https://www.devteam.space/blog/how-to-build-a-scalable-web-application/)

[What are scalable web applications and how they work](https://www.businessofapps.com/insights/what-are-scalable-web-applications-and-how-they-work/)

### 1. Assess the need for scalability
 - Only try to improve scalability if needed, as it is costly.
 - Make sure that your expectations of scaling justify the expenses
 - Collect data to verify your web application supports your growth strategy.
    
### 2. Use Metrics to define the challenge
    
There are four scalability metrics that you need to measure to determine your web app's scalability challenge:- 
    
    - Memory Utilization (RAM)
    - CPU Utilization (Most Preferred)
    - Disk I/O
    - Network I/O
    
![ A sample diagram of scalable application deployment](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dm7tsvpj8fg5zjqtfsl7.png)


    
### 3. Choose the correct tools required for monitoring your app
    
To know when to scale up and down, you need something to monitor your app in real-time and provide you with metrics to make decisions. Some popular frameworks are:
    
 - Google Cloud delivers tools like **Stackdriver Monitoring**, which can monitor your app's performance and provide you with real-time 
 - Similarly, AWS offers services like **Amazon 
 - Heroku 
 - **Prometheus, Nagios, and Grafana** are some popular third-party choices.

### 4. Pick the correct software architecture pattern:-
    
One of the most critical factors in scalability,  architecture enables web applications to adapt according to the user demand and offer the best performance.
    
   
![Architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/on0yky7crkws47zr6hu2.png)
    
 - **Monolithic Architecture:**
        
A Monolithic application is built in one large system and usually one codebase. Monolithic architecture is an excellent choice for small apps, as it offers the advantage of having one single codebase with multiple features. But it can quickly become chaotic and out of control when the application evolves with additional parts and functionalities.
        
 - **Microservices:**
 
Unlike Monolithic architecture, Microservices are built as a suite of small services, each with its codebase. So all the services **have their logic and database and perform specific functions**. There are no strict dependencies in modules in the microservices framework, making it quite flexible. By now, any upgrades in specific functionalities have become a more manageable task without affecting the entire 

### 5. Ensuring scalable and sustainable code 
 - Plan for scalability from the beginning. Consider how the codebase will handle increased traffic and data, and design the code accordingly.
 - your code in modules that are independent and can be easily reused. This makes it easier to update and maintain the code over time.
 - sure your code is optimized for speed and efficiency, which will improve its scalability.
        
### 6. Deployment
        
Multiple **PaaS** and **IaaS** out there providing services for scalable deployments, like **Google Cloud, AWS, Heroku** etc.
        
There are two types of scaling, especially in Cloud Computing:-
        

![scaling](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zoxwlmsl3v1iasj4mups.png)

        
 - **Vertical Scaling (Scaling Up)**
            
Vertical scaling refers to **adding more powe**r to your current machines so that it meets demand. Suppose now your server requires more processing power. Then, your solution may be adding **processing power** and memory to the physical machine running the server.
            
 - **Horizontal Scaling (Scaling Out)**
            
Horizontal scaling refers to **adding additional nodes or machines** to your infrastructure to handle new demands. Suppose you are hosting a web application on a server and realize that it no longer has the capacity (or capabilities) to direct traffic or load. Then, adding a server may be your solution.
            
Another to take care of during deployments is **Load Balancer**
            
          
![Load Balancer](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p2rmt9o4vjdfmxhz5s78.png)


            
> This monitors the traffic usage to a web application and, through a set of servers, will portion out the users to spread the load across multiple servers. This prevents a problem where one server would have to handle a surge of users.
> 
`A load balancer basically acts as the "traffic cop" sitting in front of your servers and routing client requests across all servers, capable of fulfilling those requests in a manner that maximizes speed and capacity utilization and ensures that no one server is overworked, which could degrade performance.`
            
### 7. Load testing and security
        
Realistic load and security testing are important to **simulate the environment** correctly, users and data your web application might encounter. If realistic simulations aren't dealt with during development and testing, then you will miss out on the development opportunities to address any issues before they hit the public.
        

## Some other tools to help scale your web app

### 1. Caching:-

![Caching](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oey411tu5hx9cdej6ynn.png)



Scalability also refers to user experience, and caching is one of the most important tools.

Caching is an essential technique for improving website scalability and performance. It involves storing frequently accessed data or content in a **temporary location** to quickly retrieve it without recalculating or fetching from the source each time requested. Caching can reduce the load on servers and databases and improve the response time for users. Some popular caching strategies include **browser caching, server-side caching, and content delivery networks (CDNs).**

**Examples of CDNs:- Cloudflare, StackPath, Edgio**

### 2. Containerization:-


![Containerization](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/29e3tzfp4k94tgbhw4ko.png)



Containerization is the packaging together of software code with all its necessary components like libraries, frameworks, and other dependencies so that they are isolated in their own "container."

This is so that the software or application within the container can be moved and run consistently in any environment and on any infrastructure, independent of that environment or infrastructure’s operating system. The container acts as a kind of bubble or a computing environment surrounding the application, keeping it independent of its surroundings. It’s basically a fully functional and portable computing environment.

To run a container, you need a **runtime engine** which shares your OS with the image.

**Examples:-Docker, Linux, Kubernetes, AWS App2Container**

### 3. Server-less architecture:-

One of the most popular serverless architectures is Function as a Service (FaaS), where developers write their application code as a set of discrete functions. Each function will perform a specific task when triggered by an event, such as an incoming email or an HTTP request. After the customary stages of testing, developers then deploy their functions, along with their triggers, to a cloud provider account. 

When a function is invoked, the cloud provider either executes the function on a running server or, if there is no server currently running, it spins up a new server to execute the function. **This execution process is abstracted away from the view of developers, who focus on writing and deploying the application code.**

**Examples:- AWS Lambda, Google Cloud functions**

### 4. Database Optimization:-

- **Sharding**: Sharding is a technique used in database optimization to horizontally partition large databases into smaller, more manageable pieces called shards. This helps to distribute the load across multiple servers, improving scalability and reducing the risk of a single point of failure.
- **Indexing**: Indexing is the process of creating a data structure that improves the speed of data retrieval operations on a database table. By creating an index on one or more columns of a table, the database can quickly locate the required rows without having to scan the entire table.
- **Query Optimization**: Query optimization involves optimizing the performance of SQL queries that are executed on a database. This can involve rewriting queries to make them more efficient, analyzing execution plans to identify bottlenecks, and tuning the database configuration to improve query performance.

## Thank You 👏🏻

How to contact me :-
Twitter:- https://twitter.com/Shurtu_Gal
LinkedIn:- https://linkedin.com/in/ashish-padhy3023/