System Design: Overview

System Design: Overview

Think of any application like Instagram, Zomato, or Youtube that exists on the web and is used by numerous people daily. How do you think these applications must have become scalable? Did the developers who make these applications must have directly started to code the application without any design plan? Of course NOT.

An application that is not aimed to stay forever in your local machine needs to go through a design plan. This plan includes a lot of things like the system's aim, targeted audience, desired features, the problems that can be faced during the execution of the plan, and a lot more so that it states a somewhat clear idea of what the application would consist of. Every scalable application that has got a number of people using it has to go through a design process which is called System Design.

Introduction :

Want to know what design plan FACEBOOK must have used to build the application? Then I am sorry I won't be writing about it because I am myself a newbie here in this field. But wait, what I will cover is "What is System Design" and some characteristics it involves. I also got some examples of a few familiar applications while explaining concepts of the system design. This blog is written keeping in mind that words and explanations won't get so technical and unreadable for non-tech people who must be reading the blog for gaining some information.

So don't leave, keep scrolling down and have a happy reading about the system design process and its characteristics.

What is System Design?

System design is a design process that is used to design the architecture, various components, and interface of a system. It provides a systematic approach to solving a business problem and meeting end-to-end customer requirements for building appropriate products. It is meant to satisfy the basic needs of the business and solve the issue at hand. For a software engineer role, if you have to solve software-related problems then it is a must to understand system design to apply design principles.

Various design methods are present in system design which are :

1. Architectural design:

It involves the view, model, behavior, and basic infrastructure of the system using which the system has been developed. The model means the visual representation of the working of the software product whereas behavior refers to how the system responds to various input triggers.

2. Logical design:

The logical design represents the data flow as well as the various inputs given to the system and the outputs are given back.

3. Physical design:

It talks about the data representation of the system i.e. the way data is shown to the users and also how it is stored.

System Design RAS.png

Now, if one wants to build a scalable & well-built system then the system should be reliable, available, and scalable. But what are these terms and what does it have to do with the system design? Let's understand one by one :

Reliability in System Design:

Reliability can be achieved by making a system "Fault-tolerant". A fault-tolerant system is a kind of system which continues to work reliably even with faults which means any single fault in a system shouldn't affect the whole functioning of the system.

A system will consist of a number of features and services that it offers to the users. Hence it should meet the end-to-end customer requirements. If the system gets successful in providing all these features and services altogether without failure then that particular can be called a reliable system.

A system should not consist of a one-point failure like if one is using a banking system that is currently facing the issue of printing cheque books but due to this failure of printing cheque books now it is also facing the problem of money withdrawal which has nothing to do with a cheque book.

Availability in System Design:

According to Google, the definition of availability is "System availability (also known as equipment availability or asset availability) is a metric that measures the probability that a system is not failed or undergoing a repair action when it needs to be used". But in simple words, availability is the expected operational performance of the system.

Suppose for example let's assume you are currently scrolling through Instagram and come across a post of your favorite celebrity or a vacation picture of your friend but it's taking a lot of time like 5-10 seconds to load the post, still, you can wait for the picture/post to get load since it is not very urgent for you to view it. Here it means that a social media application doesn't need high availability but now consider a system that is to be designed for hospitals. Now a system that has to be built for hospitals needs high availability because just a few seconds of delay in the service can cause huge damage to someone's life.

Scalability:

Scalability represents the ability of the system to withstand and handle the amount of load on the system. The servers should be powerful enough to handle the traffic of user requests. When a system is designed, the amount of load it can withstand should be kept in mind so as to avoid server-down issues later on. Hence, it is often suggested that if the system is estimated to go through X load then build it in such a way that it can withstand 10X load and then after deployment, test it for 100X load. There are again numerous factors that could define scalability, which are

  • Users that are presently active on the system

  • Number of requests that come to the system for processing every day

  • The number of database calls from the system

Also, there are two ways of scaling an application: Horizontal Scaling and Vertical Scaling which I will cover in my next blog.

I hope you understood the basic overview and importance of system design while building a system according to user needs.

References :

I used various sites for my reference but these two were mostly referred by me :

  1. GeeksForGeeks: geeksforgeeks.org/getting-started-with-syst..

  2. educative.io: educative.io/blog/complete-guide-to-system-..