System Design
Learn how to design systems at scale and prepare for system design interviews
About the Book
System design interviews can be quite open-ended and intimidating as it is a very extensive topic. There can be multiple solutions to even the most basic system design problems. My objective with this book is to help you learn the fundamentals and explore the advanced topics of system design. This will also provide you with a reliable strategy to prepare for system design interviews.
Table of Contents
Preface
License
Getting Started
What is system design?
Chapter I
IP
OSI Model
TCP and UDP
Domain Name System (DNS)
Load Balancing
Clustering
Caching
Content Delivery Network (CDN)
Proxy
Availability
Scalability
Storage
Chapter II
Databases and DBMS
SQL databases
NoSQL databases
SQL vs NoSQL databases
Database Replication
Indexes
Normalization and Denormalization
ACID and BASE consistency models
CAP theorem
PACELC Theorem
Transactions
Distributed Transactions
Sharding
Consistent Hashing
Database Federation
Chapter III
N-tier architecture
Message Brokers
Message Queues
Publish-Subscribe
Enterprise Service Bus (ESB)
Monoliths and Microservices
Event-Driven Architecture (EDA)
Event Sourcing
Command and Query Responsibility Segregation (CQRS)
API Gateway
REST, GraphQL, gRPC
Long polling, WebSockets, Server-Sent Events (SSE)
Chapter IV
Geohashing and Quadtrees
Circuit breaker
Rate Limiting
Service Discovery
SLA, SLO, SLI
Disaster recovery
Virtual Machines (VMs) and Containers
OAuth 2.0 and OpenID Connect (OIDC)
Single Sign-On (SSO)
SSL, TLS, mTLS
Chapter V
System Design Interviews
URL Shortener
Netflix
Uber
Appendix
Next Steps
References