System Design (Comprehensive List)
Tags: webdev, designpatterns, systemdesign, interview
Published: 2023-10-19 08:22:38

System Design Concepts List and related links to comprehensive reviews

---

# Objectives :

>  💎 To have a comprehensive understanding of different software architectures ( SOA , Monoliths , Micro-Services )
> 
>  💎 To confidently design complex systems such as Stripe , Amazon , Instagram  ... While discussing the tradeoffs of a selected architectural style 
> 
>  💎 Identify and select various auxiliary services for special use cases in a system , while discussing their benefits and trade offs

---

## **<u>Key Concepts ( Pre  - Req's )</u>**

1> `Scalability`

2> `Availability`

3> `Reliability`

4> `Replication`

<br/>
5> `Load Balancing`

       > a. What problems do load balancers solve ?
       > 
       > b. Types of Load Balancer
       > 
       > c. Different Algorithms used in Load balancers
       > 
       > d.  Pros & Cons (discussing the trade-offs when to use LBs are when to avoid)
 
 6> `Caching`
        
>       - What is caching? And what problems caching systems are trying to solve?
>       - Cache Invalidation & Cache eviction policies       
        
7>  `Sharding Or Data Partitioning`
 >      - Partitioning Techniques
 >      - Leader Selection
       
8> `Challenges that Sharding brings into the system`
   > - Joins & Denormalization
   > - Enforcing Integrity Checks & Validations
   > - Rebalancing
  
9> `Indexing`
   > - Need for Indexing and the problem Indexing is trying to solve
   > - MySQL Indexes
   > - NoSQL Indexes
   > Challenges that Indexes bring into the systems

10>  Proxies

11> Proxy Servers

   > - What problem Proxy servers are trying to solve?
   > - Types of Proxy Servers
 
12> Reverse Proxy Servers

13>  Importance of Replication and Redundancy

14>  NoSQL vs SQL
    > - Differences between SQL & NoSQL (Storage, Schema, ACID properties, Scalability)
    
15>  CAP (Consistency, Availability & Fault Tolerance) theorem

16>  Distributed Hash Tables (DHTS) & Consistent Hashing
   > - What Problem Consistent Hashing is trying to solve?
  > - Examples when to use consistent hashing
  >
17>  HTTP Long Polling, Server Sent Events & Web-sockets

18> APIs (Application Programming Interfaces)

19> Client-Server Architecture and Peer-to-peer

20> Microservice Patterns
   > - Decomposition Pattern
   > - Strangler Pattern
   > - SAGA Pattern
   > - CQRS Pattern
 
20>Different Types of Storage
     > - Object
     > - File
     >  - Block
 
21>  Message Queues

22>  Gossip Protocols

23>  Rate Limiting


---

## Framework To Design Systems in System Design Interviews

>   Gathering Requirements
     > - Functional
     > - Non-Functional
     > 
> - High Level APIs provided by the system
>
> - Capacity Planning
> 
> - Data Models
> 
> -  High Level Design
> 
> - Focus On 1-2 individual components in the system
> 
> - Network Protocols
> 
> - Bottlenecks & Single Point Of Failures in the system
> 
> - Caching
> 
> - Security
> 
> -  Data Compression
 
---

## Designing Distributed Systems (From Scratch)

  >  Designing Uber, Rapido & Ola
  >  
  >  Designing Swiggy, Zepto & Blinkit
  >  
  > Design Amazon Retail
  > 
  >  Designing Facebook/Instagram
  >  
  >  Design File sharing platforms (DropBox, Google Drive)
  >  
  > Design A Key-Value Store (Like Amazon DynamoDB)