This repository contains everything you need to become proficient in System Design
Topics you should know in System Design
Part 1 of System Design Made Easy Series
In the part 1, we covered what and why of System Design and the important topics that you should know. System Design is mostly an open ended concept and most of the questions can be answered in different degrees and aptitudes. In layman’s language, system design is about —
Architecture + Data + Applications
Part 2 of System Design Made Easy Series
In the part 2, we covered —
-
System design basics
-
Horizontal and Vertical Scaling with an example
In technical words, scalability is a the technique/process of adding/removing infrastructure/resources required by applications to better serve/accommodate increased/decreased demand/growth. We also covered the tradeoffs of horizontal and vertical scaling.
Part 3 of System Design Made Easy Series
In the part 3, we covered system design’s most important concepts —
-
Load Balancing
-
Message Queues
Load balancing is a technique of distributing tasks over a set of servers/machines to improve the performance, throughput, high availability, redundancy and reliability of the system. Not just it enables horizontal scaling but also dynamic resizing/scaling.
Message queues are nothing bit temporary buffers placed between users/applications and servers to store the message requests and process them in FIFO order asynchronously until the requests/messages are delivered to the desired server.
We also covered the tradeoffs of the different techniques.
Part 4 of System Design Made Easy Series
In the part 4, we covered
-
High level design and Low level design
-
Monolithic and microservices architecture and which one to choose and when?
-
Consistent Hashing
High level Design (HLD) describes the overall architecture of the application and covers functionality of each module of the system very briefly. LLD details the functional logic of the each module in the system.
Monolithic architecture — consists of single code base with multiple modules and it’s easier and faster to deploy. Microservices architecture — consists of individual service units with each service being responsible for exactly one functionality. It’s relatively complex and time taking to deploy.
Consistent hashing is a technique to divide keys/data between multiple servers/machines using a hash function ( key — value).
Part 5 of System Design Made Easy Series
In the part 5, we covered —
-
Caching
-
Indexing
-
Proxies
Caching is a technique which is based on the principal of locality — stores the copies of most frequently used/accessed data in a small and faster memory to improve Data retrieval times, Compute costs, User Experience and Throughput.
Indexing helps in Improving the speed of data access/retrieval, Reducing the number of expensive I/O operations, Providing better organization and management of multilevel data records.
Proxies play an important role of coordinating user requests, handling concurrent requests, filtering user request, transforming user requests by adding an additional layer of encryption or header information or compression information and then forwarding the user request to the server.
Part 6 of System Design Made Easy Series
In the part 6, we covered —
-
Networking
-
How Browsers work
-
Content Network Delivery ( CDN)
Networking is nothing but interconnected devices that can exchange data-messages and share resources amongst themselves/with outside world based in the system protocols/rules, technologies and algorithms that govern these devices inner workings.
Browsers are used to present the website/resource you would like to visit say, for example google.com by sending the request to the server and displaying it on their browser window.
Content Network Delivery caters to the users by serving their requests by quickly transferring the data back and forth.
Part 7 of System Design Made Easy Series
In the part 7, we covered —
-
Database Sharding
-
CAP Theorem
-
Database schema Design
Sharding is the technique to database partitioning that separates large and complex databases into smaller, faster and distributed databases for higher throughput operations.
CAP theorem lets you determine how you want to handle your distributed databases with there is possibility of inconsistencies, unavailability and connection errors/failures/outrage.
Database schema Design lets you organize data into separate entities and establish and organize the relationships between different entities.
**Part 8 of System Design Made Easy Series **
In the part 8 , we covered —
-
Concurrency
-
API
-
Components + OOP + Abstraction
Concurrency is the process in which multiple computations/operations/process happen/execute in parallel/concurrently.
API is an acronym for application programming interface which provides a way to two or more programs to communicate, work together despite different configurations, architectures, resources etc
Components in the system design are building blocks designed to coordinate, cooperate, reuse and work well with other components of the same/different systems. They can be as simple as visual components or internal components/backend components.
Part 9 of System Design Made Easy Series
In the part 9 , we covered —
-
Planning and Estimation
-
Performance
Planning and estimation( numbers) and performance are very important concepts ( concept that you should be able to demonstrate well when asked).
Part 10 of System Design Made Easy Series
In the part 10, we covered —
-
Map Reduce
-
Patterns and Microservices
In system design, map reduce ( Hadoop systems) is a batch processing technique in which the engine takes huge amounts of data, processes ( map and reduce) and gives the output.
In system design, microservices architecture is used to build enterprise level applications which helps in structuring the whole application as a collection of tiny autonomous, self contained services for each task ( service) that you want/are allowed to perform.
Most Popular System Design Questions — Mega Compilation
In this post. we covered the most popular/important system design questions that you should practice to build a thorough understanding of how large systems are designed.
Popular Questions : Link