Networking, proxies, scaling, containers, rate limiting, message queues, and the trade-offs behind every infrastructure decision.
A high-level overview of the three lenses through which systems are designed — product, infrastructure, and object-oriented.
Why distributed systems can guarantee at most two of consistency, availability, and partition tolerance — and what that means in practice.
The numbers, framework, and worked examples you need to size any system quickly and confidently.
DNS, IP, TCP, UDP, HTTP, TLS, WebSockets, and API protocols — the networking layer every system design relies on.
Forward proxies, reverse proxies, load balancers, and API gateways — how traffic is intercepted, routed, and distributed.
Durable buffers between producers and consumers — why queues matter, delivery guarantees, and when to choose Kafka, RabbitMQ, or SQS.
Vertical vs horizontal scaling, auto-scaling, data centre topology, availability zones, and multi-region deployment strategies.
Docker, Kubernetes, and Amazon ECS — how containers work, how orchestrators manage them, and when to choose each.
Fixed window, sliding window, token bucket, and leaky bucket — the algorithms behind rate limiting and the trade-offs of each.
How the circuit breaker pattern prevents cascading failures in distributed systems — states, transitions, and Java implementation with Resilience4j.