Scaling

I am a Tech Enthusiast having 13+ years of experience in ๐๐ as a ๐๐จ๐ง๐ฌ๐ฎ๐ฅ๐ญ๐๐ง๐ญ, ๐๐จ๐ซ๐ฉ๐จ๐ซ๐๐ญ๐ ๐๐ซ๐๐ข๐ง๐๐ซ, ๐๐๐ง๐ญ๐จ๐ซ, with 12+ years in training and mentoring in ๐๐จ๐๐ญ๐ฐ๐๐ซ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐๐ญ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐๐ฌ๐ญ ๐๐ฎ๐ญ๐จ๐ฆ๐๐ญ๐ข๐จ๐ง ๐๐ง๐ ๐๐๐ญ๐ ๐๐๐ข๐๐ง๐๐. I have ๐๐๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐ 10,000+ ๐ฐ๐ป ๐ท๐๐๐๐๐๐๐๐๐๐๐๐ and ๐๐๐๐ ๐๐๐๐๐ ๐๐๐๐ ๐๐๐๐ 500+ ๐๐๐๐๐๐๐๐ ๐๐๐๐๐๐๐๐ in the areas of ๐๐จ๐๐ญ๐ฐ๐๐ซ๐ ๐๐๐ฏ๐๐ฅ๐จ๐ฉ๐ฆ๐๐ง๐ญ, ๐๐๐ญ๐ ๐๐ง๐ ๐ข๐ง๐๐๐ซ๐ข๐ง๐ , ๐๐ฅ๐จ๐ฎ๐, ๐๐๐ญ๐ ๐๐ง๐๐ฅ๐ฒ๐ฌ๐ข๐ฌ, ๐๐๐ญ๐ ๐๐ข๐ฌ๐ฎ๐๐ฅ๐ข๐ณ๐๐ญ๐ข๐จ๐ง๐ฌ, ๐๐ซ๐ญ๐ข๐๐ข๐๐ข๐๐ฅ ๐๐ง๐ญ๐๐ฅ๐ฅ๐ข๐ ๐๐ง๐๐ ๐๐ง๐ ๐๐๐๐ก๐ข๐ง๐ ๐๐๐๐ซ๐ง๐ข๐ง๐ . I am interested in ๐ฐ๐ซ๐ข๐ญ๐ข๐ง๐ ๐๐ฅ๐จ๐ ๐ฌ, ๐ฌ๐ก๐๐ซ๐ข๐ง๐ ๐ญ๐๐๐ก๐ง๐ข๐๐๐ฅ ๐ค๐ง๐จ๐ฐ๐ฅ๐๐๐ ๐, ๐ฌ๐จ๐ฅ๐ฏ๐ข๐ง๐ ๐ญ๐๐๐ก๐ง๐ข๐๐๐ฅ ๐ข๐ฌ๐ฌ๐ฎ๐๐ฌ, ๐ซ๐๐๐๐ข๐ง๐ ๐๐ง๐ ๐ฅ๐๐๐ซ๐ง๐ข๐ง๐ new subjects.
When thinking about system design one of the important points that comes into our mind is Scaling. Basically what is scaling?
Imagine a scenario where you have built a product and you got some customers as well. Everything was going well until you got a spike in the number of users and they expect a flawless, perfect application. If you are not prepared for this, the application performance will start degrading, and eventually, you will lose your audience and business. This is a critical problem for you and you want to solve it asap, otherwise, your product will become dead. How do you solve this problem?
The scaling of your system is based on several factors more specifically based on the behavior of traffic.
If the traffic is increasing gradually(linear growth) or if there is a sudden spike(exponential growth), or if the traffic is only increasing at a specific time, etc.
In software engineering, scaling simply means making a system capable of serving more users.
We can scale our system in two ways, we can either increase the processing power/size of the resources(like CPU, memory, etc) by purchasing a bigger machine or we can add more resources and use them in parallel. The former is called vertical scaling and the latter is called Horizontal scaling.
Vertical Scaling
In vertical scaling, we add more power(CPU, RAM, and DISK) to the existing server(buy a bigger machine). vertical scaling is very easy to achieve, the only thing to do is upgrade our server to have more processing power or memory or both. For example, if you are using an AWS EC2 instance just upgrade it to the next level.
The advantage is since we have only one machine to manage donโt need any complex design or architecture here. But there is a limit to vertical scaling, we canโt increase the power of a server beyond a limit, also this will become a single point of failure.
Horizontal Scaling
In horizontal scaling, we scale by adding more servers to the system(buying more and more machines) and dividing the load among them. Here the power of individual servers wonโt be high but all these servers collectively improve the system throughput.
Unlike vertical scaling, there is no limit to horizontal scaling since we can have as many as servers we want and distribute the load among them. But the drawback of this is we need complex design and architecture to work the different machines together and share the traffic between these resources efficiently.
Do you want to connect with me I have started mentoring others for career and interviews at ๐ญ๐จ๐ฉ๐ฆ๐๐ญ๐.๐ข๐จ/๐ง๐๐ฏ๐๐๐ง๐ฉ๐ง


