System Design Basics
- Key Characteristics and Fundamentals of Distributed Systems
- Monolithic VS Microservice (Service Discovery, Resiliency)
- Vertical vs horizontal scaling
- CAP theorem
- ACID vs BASE
- Redundancy and Replication
- Partitioning/Sharding
- Consistent Hashing
- Optimistic vs pessimistic locking
- Strong vs eventual consistency
- SQL vs NoSQL
- Types of NoSQL (Key value, Wide column, Document-based, Graph-based)
- Caching
- Data center/racks/hosts
- CPU/memory/Hard drives/Network bandwidth
- Random vs sequential read/writes to disk
- HTTP vs HTTP2 vs WebSocket
- Long-Polling vs WebSockets vs Server-Sent Events
- TCP/IP model
- IPv4 vs IPv6
- TCP vs UDP
- DNS lookup
- HTTP & TLS
- Public key infrastructure and certificate authority(CA)
- Symmetric vs asymmetric encryption
- Load Balancing
- Consistent Hashing
- CDNs & Edges
- Data Partitioning
- Indexes
- Master-Slave, Master-Master
- Active-Passive, Active-Active
- Leader election
- Design patterns and Object-oriented design
- Virtual machines and containers
- Pub-sub architecture
- REST, GraphQL
- MapReduce
- Bloom filters and Count-Min sketch
- Paxos
- Multithreading, locks, synchronization, CAS(compare and set)
- Proxies
Tools
- Cassandra
- MongoDB/Couchbase
- Mysql
- Memcached
- Redis
- Zookeeper
- Kafka
- NGINX
- HAProxy
- Solr, Elastic search
- Amazon, EC2, S3
- Docker, Kubernetes
- Hadoop/Spark and HDFS
- Eureka, Hysterix,
System Design Problems (HLD + LLD)
- TinyURL
- Instagram | Photo hosting platform
- Timeline | Newsfeed | Twitter
- Dropbox | Google Drive
- Whatsapp | Facebook Messenger
- MakeMyTrip | BookMyShow
- Amazon | Flipkart
- Youtube | Netflix
- Uber | IRCTC
- Swiggy | Zomato
- Yelp | Nearby
- Twitter Search
- Google Search
- SplitWise
- Zerodha
- API Rate Limiter
- Web Crawler
- Rate limiting system
- Distributed cache
- Typeahead Suggestion | Auto-complete system
- Recommendation System
Low Level Design Problems (Class diagram)
- Elevator system
- Snake and Ladder game
- Tic Tac Toe
- ATM machine
System Design Interview Approach Template
THINGS TO CONSIDER [5 min]
(1) Features
(2) API
(3) Availability
(4) Latency
(5) Scalability
(6) Durability
(7) Class Diagram
(8) Security and Privacy
(9) Cost-effective
FEATURE EXPECTATIONS [5 min]
(1) Use cases
(2) Scenarios that will not be covered
(3) Who will use
(4) How many will use
(5) Usage patterns
ESTIMATIONS [5 min]
(1) Throughput (QPS for read and write queries)
(2) Latency expected from the system (for read and write queries)
(3) Read/Write ratio
(4) Traffic estimates
- Write (QPS, Volume of data)
- Read (QPS, Volume of data)
(5) Storage estimates
(6) Memory estimates
- If we are using a cache, what is the kind of data we want to store in cache
- How much RAM and how many machines do we need for us to achieve this ?
- Amount of data you want to store in disk/ssd
DESIGN GOALS [5 min]
(1) Latency and Throughput requirements
(2) Consistency vs Availability [Weak/strong/eventual => consistency | Failover/replication => availability]
HIGH LEVEL DESIGN [5-10 min]
(1) APIs for Read/Write scenarios for crucial components
(2) Database schema
(3) Basic algorithm
(4) High level design for Read/Write scenario
DEEP DIVE [15-20 min]
(1) Scaling the algorithm
(2) Scaling individual components:
-> Availability, Consistency and Scale story for each component
-> Consistency and availability patterns
#### Think about the following components, how they would fit in and how it would help
a) DNS
b) CDN [Push vs Pull]
c) Load Balancers [Active-Passive, Active-Active, Layer 4, Layer 7]
d) Reverse Proxy
e) Application layer scaling [Microservices, Service Discovery]
f) DB [RDBMS, NoSQL]
> RDBMS
>> Master-slave, Master-master, Federation, Sharding, Denormalization, SQL Tuning
> NoSQL
>> Key-Value, Wide-Column, Graph, Document
Fast-lookups:
-------------
>>> RAM [Bounded size] => Redis, Memcached
>>> AP [Unbounded size] => Cassandra, RIAK, Voldemort
>>> CP [Unbounded size] => HBase, MongoDB, Couchbase, DynamoDB
g) Caches
> Client caching, CDN caching, Webserver caching, Database caching, Application caching, Cache @Query level, Cache @Object level
> Eviction policies:
>> Cache aside
>> Write through
>> Write behind
>> Refresh ahead
h) Asynchronism
> Message queues
> Task queues
> Back pressure
i) Communication
> TCP
> UDP
> REST
> RPC
JUSTIFY [5 min]
(1) Throughput of each layer
(2) Latency caused between each layer
(3) Overall latency justification