System Design and Scalability

less than 1 minute read

  • https://github.com/donnemartin/system-design-primer
  • http://www.crackingthecodinginterview.com/

Design Steps

  1. Scope the problem
  2. Make Reasonable Assumptions
  3. Draw the Major Components
  4. Identify Key Issues
  5. Redesign for the Key Issues

Algoritm design Steps

  1. Ask Questions
  2. Make Believe (Pretend there are no hardware limitations)
  3. Get Real
  4. Solve problems

Concepts

  • Vertical scaling: better node
  • Horizontal scaling: more nodes
  • Load balancer
  • Denormalization and NoSQL
  • Partitioning/Sharding
    • Vertical Partitioning
    • Key/Hash based Partitioning
    • Directory based partitioning
  • Caching
  • Asynchronous processing & Queues
  • Networking Metrics
    • Bandwidth
    • Thoughput
    • Latency
  • Mapreduce
  • Failures
  • Availability and Reliability
  • Read-heavy vs Write-heavy
  • Security

Comments