Building scalable, production-ready applications is both art and science.
Design Fundamentals comes in a lot of different flavours. Specifically they can be divided in to four categories. Categories that are equally important.
First Category
Underlying or Foundational Knowledges .
- For Example:
- Client Server Model
- Network Protocol
Software Architectural Pattern
- Microkernel Pattern
- Microservices Pattern
- Layered Architecture Pattern
- Event-based Pattern
- Space-based Pattern
- https://dzone.com/articles/5-major-software-architecture-patterns
- https://herbertograca.com/2017/07/28/architectural-styles-vs-architectural-patterns-vs-design-patterns/
Second Category
Key Characteristics of systems
- Availability
- Latency,
- Throughput
- Redundancy,
- consistency
Third Category
Actual Component of a system
Example:
- Load Balancer
- Proxy
- Cache
- Rate limiting
- leader election
Forth Category:
Actual Tech, Real existing product or services
Example:
- Zoo Keeper
- Nginx
- Redis
- Amazon S3
- Google Cloud Storage