7 steps of systems design problems
Step 1: Requirements Clarification
Step 2: Back-of-the-envelope estimation
Step 3: System interface definition
Define what APIs are expected from the system
Step 4: Define data model
Step 5: High-level design
Step 6: Detailed design
Step 7: Identifying and resolving bottlenecks
key characteristics of distributed systems
Scalability
capability of a system, process, or network to grow and manage increased demand
Horizontal vs vertical scaling
Reliability
Availability
* Accounts for maintainability and repair
Efficiency
Serviceability / manageability
Load balancer
Load balancing placements
Load balancer: least connection method
* good for large number of persistent connections
Load balancer: least response time method
Load balancer: least bandwidth method
Load balancer: round robin method
Load balancer: weighted round robin method
Load balancer: IP hash method
Load balancer redundancy