Are Design Fundamentals
There's a lot of subjectivity in System Design -- most of the time, it's important to justify your solution and discuss tradeoffs.
Why did you design parts of the system one way vs. another?
Categories of System Design:
Foundational -- If you don't understand the basics, you can't answer any system:
Client/Server Protocol Networking (TCP/IP, UDP)
Characteristics -- Things you want a system to have
Availability Latency Throughput Redundancy Consistency
Components -- Tangible things you can implement in a system, like Leader Election, a Database, Load Balancers, Web Servers
Technology -- What technologies will you use as components, or to achieve some requirement of a system:
ZooKeeper or Etcd for Leader Election S3 for Blob Storage EC2 for a Server Nginx for a Server or Reverse Proxy Redis for a Key-Value Store
Prev: [introduction-to-systemsexpert](introduction-to-systemsexpert.html) Next: [client-server-model](client-server-model.html)