System Design Compendium
System design is a part of the system development process, focusing on the creation of a comprehensive blueprint for a system to satisfy specified requirements. It includes the specification of the system’s architecture, modules, interfaces and data necessary to satisfy a set of requirements.
In simpler terms, system design is like constructing a roadmap for a complex mechanism. This roadmap delineates the system’s components, how they interact, and work together to fulfill the system’s objectives or requirements.
Effective system design should consider both the system’s functional requirements—what the system should do—and its non-functional requirements, such as scalability, reliability, robustness, and security.
Here are the topics that merit your focused attention and comprehension:
- Defining Software Architecture
- Network Protocols
- Latency And Throughput
- Availability
- CAP Theorem
- Caching
- Proxies
- Load Balancing
- Hashing
- SQL vs NoSQL Databases
- Specialized Storage Paradigms
- Replication And Sharding
- Leader Election
- Peer-To-Peer Networks
- Polling And Streaming
- Rate Limiting
- Microservices vs Monolith
- Request-Response vs Publish-Subscribe