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
Complete 60 Days of Data Science and Machine Learning Series
30 days of Machine Learning Ops
30 Days of Natural Language Processing ( NLP) Series
Data Science and Machine Learning Research ( papers) Simplified **
30 days of Data Engineering with projects Series
60 days of Data Science and ML Series with projects
100 days : Your Data Science and Machine Learning Degree Series with projects
23 Data Science Techniques You Should Know
Tech Interview Series — Curated List of coding questions
Complete System Design with most popular Questions Series
Complete Data Visualization and Pre-processing Series with projects
Complete Python Series with Projects
Complete Advanced Python Series with Projects
Kaggle Best Notebooks that will teach you the most
Complete Developers Guide to Git
Exceptional Github Repos — Part 1
Exceptional Github Repos — Part 2
All the Data Science and Machine Learning Resources
6 Highly Recommended Data Science and Machine Learning Courses that you MUST take ( with certificate) -
- Complete Data Scientist : https://bit.ly/3wiIo8u
Learn to run data pipelines, design experiments, build recommendation systems, and deploy solutions to the cloud.
- Complete Data Engineering : https://bit.ly/3A9oVs5
Learn to design data models, build data warehouses and data lakes, automate data pipelines, and work with massive datasets
- Complete Machine Learning Engineer : https://bit.ly/3Tir8ub
Learn advanced machine learning techniques and algorithms - including how to package and deploy your models to a production environment.
- Complete Data Product Manager : https://bit.ly/3QGUtwi
Leverage data to build products that deliver the right experiences, to the right users, at the right time. Lead the development of data-driven products that position businesses to win in their market.
- Complete Natural Language Processing : https://bit.ly/3T7J8qY
Build models on real data, and get hands-on experience with sentiment analysis, machine translation, and more.
- Complete Deep Learning: https://bit.ly/3T5ppIo
Learn to implement Neural Networks using the deep learning framework PyTorch