System-Design-and-Scalability
System Design and Scalability.
System-Design-and-Scalability
Handling the Questions
- Communicate
- Go broad first
- Use the whiteboard
- Acknowledge the concerns
- Be careful about assumptions
- State the assumptions explicitly
- Estimate when necessary
- Drive
Design: Step-By-Step
- Step 1: Scope the Problem
- Step 2: Make Reasonable Assumptions
- Step 3: Draw the Major Components
- Step 4: Identify the Key Issues
- Step 5: Redesign for the Key Issues
Algorithms that Scale: Step-By-Step
- Step 1: Ask Questions
- Step 2: Make Believe
- Step 3: Get Real
- Step 4: Solve Problems
Key Concepts
- Horizontal vs. Vertical Scaling
- Load Balancer
- Database Denormalization and NoSQL
- Database Partitioning (Sharding)
- Vertical Partitioning
- Key-Based (or Hash-Based) Partitioning
- Directory-Based Partitioning
- Caching
- Asynchronous Processing & Queues
- Networking Metrics
- Bandwidth
- Throughput
- Latency
- MapReduce
Considerations
- Failures
- Availability and Reliability
- Read-heavy vs. Write-heavy
- Security
There is no “perfect” system