System Design 101 : Fundamentals
Let's understand the basics:
So, let us consider a common friend of ours Zuck who is an amazing programmer who loves to build awesome web applications.
He was casually showing off one of the applications to his friends and one of them, Billy said "Hey, I always wanted an app like that!! Is there someway I can use it on my computer as well?"
Now, how can Billy access Zuck's application remotely? For that, we need to understand some key things :)
What is a Server?
If we have to go by the The Search Engine Giant's(Google :D) definition a server is nothing but a computer that provides services, resources, or programs to other computers, over a network.
Now, we can say that Zuck's computer could serve as a Server. And Billy can access the server over the internet.
Now, Here's a deeper dive into it,
The first and foremost thing both Zuck and Billy need to have is internet.
Every device on the internet will have a unique number assigned to it called as an IP address.
This is an important thing to know because that is the address on which we will contact the server.
Let's assume, 1.2.3.4 is server's IP address and 4.5.6.7 is Billy's computer's IP address.
What is a Domain ?
A domain is a text string that maps to an IP address, used to access websites.
So, Zuck will buy a domain name from a domain registrar(Example: GoDaddy).
So, lets assume Zuck decides to go with the domain name is zuckyappking.com.
Now, the domain registrar will make sure the mapping is done on the ICANN servers(It maps the domain name with the IP address like a Key-Value pair, which in our case maps to zuckyappking.com -> 1.2.3.4).
Now that Zuck has hosted his application at zuckyappking.com, now Billy can access it remotely. But how exactly? Let's find out :D
How can one computer access the IP address of another?
We can access someone's computer over the internet with the help of DNS. Let's learn more about it :)
DNS stands for Domain Name System and it is an important part of the system because if any time Y wants to access X server, Y will make a DNS query/lookup to ICANN and it will respond with the IP address of the requested domain name. Now that Y has the IP of the server, it can connect to it.
Now, Billy knows how to access Zuck's application once Zuck is done with the above set up :)
Billy can search the domain name zuckyappking.com on his computer, which will make a DNS lookup for it's IP address. Once the IP address is received by Billy, now the connection to Zuck's application/server can be done. :)
A few days later, everyone from Zuck and Billy's friends got to know about this application and they wanted to use it as well. Soon, this application became a hit ๐ฏ
But, Zuck's PC is not very powerful enough to handle such a large load :(
Now how will he handle that? Let's find out in the upcoming article :)
A small note from my side:
This series is a learn-along journey into computer science and distributed systems. I'll be exploring these topics with you from scratch, one step at a time.
These are my initial attempts at blogging, so if there are any errors please excuse me for that. I will be blogging about a lot more topics regarding system design, distributed Systems and databases in general. So do consider following me on Hashnode, Twitter and LinkedIn.
I hope you all had a good read and if you gained any benefit reading this article or there is any doubt regarding the above topic or there is an error that I might have missed, leave a comment below or reach out on LinkedIn, I will be more than happy to help you out! :)
HAVE A GOOD DAY! ๐
Subscribe to my newsletter
Read articles from Venketesh Panda directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Venketesh Panda
Venketesh Panda
I am a tech graduate from GIET University, Gunupur. I am currently learning DSA and improving my problem solving skills. I am a photographer by passion and an engineer by profession.