System Design

The guiding question

How do load balancers, caches, databases and queues fit together into a system that survives real traffic and keeps running when parts break?

Episodes

  1. 1Client and Server: The Journey of a Request (HTTP, DNS)Published
  2. 2API Design: REST and RPCComing soon
  3. 3Load Balancing: Spreading Traffic Over Many MachinesComing soon
  4. 4Caching and CDNs: Hit Rate Versus FreshnessComing soon
  5. 5Database Basics: SQL and NoSQLComing soon
  6. 6Message Queues: Smoothing Peaks and DecouplingComing soon
  7. 7Security Basics: Authentication, Authorization and TLSComing soon
  8. 8Functional and Non-Functional RequirementsComing soon
  9. 9Capacity Estimation: Back-of-the-Envelope MathComing soon
  10. 10Latency Numbers: A Ruler Drawn to ScaleComing soon
  11. 11Data Modeling: Normalized or DenormalizedComing soon
  12. 12Sharding: Shard Keys and Hot SpotsComing soon
  13. 13Replication by Design: Lag, Failover and Lost WritesComing soon
  14. 14Transactions and Isolation LevelsComing soon
  15. 15Search and the Inverted IndexComing soon
  16. 16Availability and the NinesComing soon
  17. 17Rate Limiting: Token Bucket and Leaky BucketComing soon
  18. 18Levels of ConsistencyComing soon
  19. 19Failure and Recovery: RPO and RTOComing soon
  20. 20Observability: Logs, Metrics and TracesComing soon
  21. 21Case Study: A URL ShortenerComing soon
  22. 22Case Study: Designing a Distributed Rate LimiterComing soon
  23. 23Case Study: A News FeedComing soon
  24. 24Case Study: A Chat SystemComing soon
  25. 25Case Study: Cloud Storage and Multi-Device SyncComing soon
  26. 26Case Study: A Video PlatformComing soon
  27. 27Case Study: Search AutocompleteComing soon
  28. 28Case Study: Nearby FriendsComing soon
  29. 29Capstone: Assembling the Parts Into a Whole SystemComing soon