Online Resources:
- Gergely Orosz's real world postmortems have great learnings - https://lnkd.in/grywMqKt
- Neo K.'s System Design Newsletter makes engineering blogs more digestible - https://lnkd.in/gVnPv-Q8
- Google Senior Staff (L7) Engineer's detailed whitepaper notes - https://lnkd.in/gGWf-Nvy
- system-design-primer (hollistic resource for system design interviews) - https://lnkd.in/g6yMEsGv
- ByteByteGo system design newsletter by Alex Xu - https://lnkd.in/gbCDC7XT
- Architecture Notes - https://lnkd.in/grMHDuuE
- Quastor System Design Case Studies - https://lnkd.in/g3bbCPHV
- Level Up Coding's System Design Interview Survival Guide - https://lnkd.in/g8vKAbmD
Engineering Blogs:
- Figma Engineering: https://lnkd.in/gFbvV8Mk
- OpenAI Software Engineering: https://lnkd.in/g3wFsZk7
- Engineering @ Meta: https://lnkd.in/gc9xnZQ8
- Stripe Engineering: https://lnkd.in/g4JqgY39
- Nextflix Tech: https://lnkd.in/gq-SWapT
- Airbnb Tech: https://lnkd.in/gy3RF5ih
- Uber Engineering: https://lnkd.in/gvga-NEg
- Dropbox Tech: https://dropbox.tech/
- Jane Street Tech Blog: https://lnkd.in/gRudhsrn
- Engineering @ Ramp: https://lnkd.in/gw_kd2Vj
- Instacart Tech: https://lnkd.in/gdGN9SrY
- Paypal Tech: https://lnkd.in/gxj9Mx64
- Rippling Engineering: https://lnkd.in/ge6K-UkG
- Longer list https://lnkd.in/g3xqDpg6
Youtube Channels:
- Martin Kleppman's channel - https://lnkd.in/gUJGHWEw
- CMU Database Group - https://lnkd.in/gzTf2ZMs
- MIT6.824: Distributed Systems - https://lnkd.in/gtmXKew7
- DistSys Reading Group - https://lnkd.in/gdX7DQzq
- TLA+ Video Course - https://lnkd.in/gUYB_FxX
Books:
- Designing Data Intensive Systems by Martin Kleppman https://lnkd.in/gMhbvW23
- Specifying Systems by Leslie Lamport - https://lnkd.in/gYzdwwBh
- System Design Interview by Alex Xu - https://lnkd.in/gzUBcRe3
- Database Internals by Alex Petrov - https://lnkd.in/gMC9B9UR
- Building Microservices by Sam Newman - https://lnkd.in/gz5cwpG9
System Design:
- Grokking System Design Fundamentals: https://lnkd.in/gtcCT-dJ
- Grokking the System Design Interview: https://lnkd.in/giwyzfkT
- Grokking Microservice Design Patterns - https://lnkd.in/gDMtPQxi
Tips:
- For a Read-Heavy System - Consider using a Cache.
- For a Write-Heavy System - Use Message Queues for async processing
- For a Low Latency Requirement - Consider using a Cache and CDN.
- Need ๐tomicity, ๐onsistency, ๐solation, ๐urability Compliant DB - Go for RDBMS/SQL Database.
- Have unstructured data - Go for NoSQL Database.
- Have Complex Data (Videos, Images, Files) - Go for Blob/Object storage.
- Complex Pre-computation - Use Message Queue & Cache.
- High-Volume Data Search - Consider search index, tries or search engine.
- Scaling SQL Database - Implement Database Sharding.
- High Availability, Performance, & Throughput - Use a Load Balancer.
- Global Data Delivery - Consider using a CDN.
- Graph Data (data with nodes, edges, and relationships) - Utilize Graph Database.
- Scaling Various Components - Implement Horizontal Scaling.
- High-Performing Database Queries - Use Database Indexes.
- Bulk Job Processing - Consider Batch Processing & Message Queues.
- Server Load Management & Preventing DOS Attacks- Use a Rate Limiter.
- Microservices Architecture - Use an API Gateway.
- For Single Point of Failure - Implement Redundancy.
- For Fault-Tolerance and Durability - Implement Data Replication.
- For User-to-User fast communication - Use Websockets.
- Failure Detection in Distributed Systems - Implement a Heartbeat.
- Data Integrity - Use Checksum Algorithm.
- Efficient Server Scaling - Implement Consistent Hashing.
- Decentralized Data Transfer - Consider Gossip Protocol.
- Location-Based Functionality - Use Quadtree, Geohash, etc.
- Avoid Specific Technology Names - Use generic terms.
- High Availability and Consistency Trade-Off - Eventual Consistency.
- For IP resolution & Domain Name Query - Mention DNS.
- Handling Large Data in Network Requests - Implement Pagination.
- Cache Eviction Policy - Preferred is LRU (Least Recently Used) Cache.
- To handle traffic spikes: Implement Autoscaling to manage resources dynamically
- Need analytics and audit trails - Consider using data lakes or append-only databases
- Handling Large-Scale Simultaneous Connections - Use Connection Pooling and consider using Protobuf to minimize data payload
34 ๐๐จ๐ฐ ๐๐จ ๐๐๐ฏ๐ ๐๐จ๐ฐ ๐๐๐ญ๐๐ง๐๐ฒ ๐ข๐ง ๐๐ข๐ฌ๐ญ๐ซ๐ข๐๐ฎ๐ญ๐๐ ๐๐ฒ๐ฌ๐ญ๐๐ฆ๐ฌ?
35 ๐๐๐ฌ๐ข๐ ๐ง ๐๐๐ญ๐ญ๐๐ซ๐ง๐ฌ ๐๐ฌ๐๐ ๐๐๐ซ๐จ๐ฌ๐ฌ ๐๐ข๐๐๐๐ซ๐๐ง๐ญ ๐๐๐ฒ๐๐ซ๐ฌ.
- To prevent overloading system - Use Token bucket and Leaky bucket algorithm
- Minimize deployment downtime - Implement blue green deployment to minimize downtime and reduce risk
- 5 ๐๐๐ฒ๐ฌ ๐ญ๐จ ๐๐ฆ๐ฉ๐ซ๐จ๐ฏ๐ ๐๐จ๐ฎ๐ซ ๐๐๐ ๐๐๐ซ๐๐จ๐ซ๐ฆ๐๐ง๐๐


