Software System Design
Modern software systems design, with an emphasis on designing large-scale systems, weighing common design trade-offs, and tackling system design challenges: non-functional requirements, databases and scaling, API design, distributed systems concepts, architecture patterns, and case studies such as a URL shortener.
Johns Hopkins · EN.601.425 · Fall 2023
Foundations
Introduction
Databases
Relational Databases
- Models · Entity-Relationship Diagrams · Relationships · Normalization · Denormalization · Schema Migration · SQL · Object-Relational Mapping
Non-Relational Databases
Database Selection
- Recap: Relational and Non-Relational · Characteristics of Data · Transactional vs Analytical · CAP theory · Other Factors
Database Scaling
APIs
APIs
- Web APIs · GraphQL · RPC · Other APIs
Scaling APIs
- Vertical Scaling · Horizontal Scaling · API Gateway · Load Management Strategies · Microservices · Caching