Network Fundamentals Review

Network Fundamentals Review

Overview

This document reviews essential network concepts for system design. You'll learn DNS operation and DNS-based load balancing, CDN Push/Pull models, features of HTTP/2 and HTTP/3, and criteria for choosing between REST and gRPC.

Difficulty: ⭐⭐ Estimated Study Time: 2-3 hours Prerequisites: Networking folder basics


Table of Contents

  1. DNS Operation and Load Balancing
  2. CDN (Content Delivery Network)
  3. HTTP/2 and HTTP/3
  4. REST vs gRPC
  5. Practice Problems
  6. Next Steps
  7. References

1. DNS Operation and Load Balancing

1.1 DNS Operation Review

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    DNS Query Process                             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  Client                                                         β”‚
β”‚    β”‚                                                            β”‚
β”‚    β”‚ 1. www.example.com?                                        β”‚
β”‚    β–Ό                                                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚  β”‚ Local DNS Resolverβ”‚ ← ISP or 8.8.8.8 (Google)               β”‚
β”‚  β”‚ (Recursive)       β”‚                                          β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                          β”‚
β”‚            β”‚ 2. Where is .com?                                  β”‚
β”‚            β–Ό                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚  β”‚ Root DNS Server   β”‚ (a.root-servers.net, etc. 13 total)     β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                          β”‚
β”‚            β”‚ 3. Returns .com TLD server address                 β”‚
β”‚            β–Ό                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚  β”‚ TLD DNS Server    β”‚ (.com, .org, .kr, etc.)                 β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                          β”‚
β”‚            β”‚ 4. Returns example.com NS                          β”‚
β”‚            β–Ό                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                                          β”‚
β”‚  β”‚ Authoritative DNS β”‚ (responsible for example.com)            β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                                          β”‚
β”‚            β”‚ 5. A record: 93.184.216.34                         β”‚
β”‚            β–Ό                                                    β”‚
β”‚  Client ◄───── Returns IP address                               β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1.2 DNS-Based Load Balancing

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                  DNS Load Balancing Methods                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  1. Round Robin DNS                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  www.example.com β†’ 192.168.1.1                             β”‚ β”‚
β”‚  β”‚  www.example.com β†’ 192.168.1.2                             β”‚ β”‚
β”‚  β”‚  www.example.com β†’ 192.168.1.3                             β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  1st request β†’ 192.168.1.1                                 β”‚ β”‚
β”‚  β”‚  2nd request β†’ 192.168.1.2                                 β”‚ β”‚
β”‚  β”‚  3rd request β†’ 192.168.1.3                                 β”‚ β”‚
β”‚  β”‚  4th request β†’ 192.168.1.1 (cycles back)                   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  2. Weighted Round Robin                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Server A (Weight: 5) β†’ 50% traffic                        β”‚ β”‚
β”‚  β”‚  Server B (Weight: 3) β†’ 30% traffic                        β”‚ β”‚
β”‚  β”‚  Server C (Weight: 2) β†’ 20% traffic                        β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  3. Geolocation DNS                                             β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Korean users    β†’ Seoul server (ap-northeast-2)           β”‚ β”‚
β”‚  β”‚  US users        β†’ Virginia server (us-east-1)             β”‚ β”‚
β”‚  β”‚  European users  β†’ Frankfurt server (eu-central-1)         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  4. Latency-based DNS                                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Routes to server with lowest latency from user location   β”‚ β”‚
β”‚  β”‚  Provided by AWS Route 53, Cloudflare, etc.                β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

1.3 DNS Load Balancing Limitations

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              DNS Load Balancing Limitations                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  1. TTL-induced delay                                           β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Traffic continues to failed server until TTL expires     β”‚ β”‚
β”‚  β”‚ β€’ Low TTL = fast failure response but high DNS query load  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  2. Client caching                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Browsers/OS cache DNS results                            β”‚ β”‚
β”‚  β”‚ β€’ Server-side changes don't reflect immediately            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  3. Uneven distribution                                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Large ISP's DNS Resolver represents many users           β”‚ β”‚
β”‚  β”‚ β€’ All users from that ISP connect to same server           β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  4. Health check limitations                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Difficult to check real-time server status               β”‚ β”‚
β”‚  β”‚ β€’ Less sophisticated health checks than dedicated LB       β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Solution: Use DNS + L4/L7 load balancer combination           β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2. CDN (Content Delivery Network)

2.1 What is CDN?

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                       CDN Concept                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  CDN = Geographically distributed server network                β”‚
β”‚        Serving static content close to users                    β”‚
β”‚                                                                  β”‚
β”‚                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                              β”‚
β”‚                    β”‚ Origin      β”‚                              β”‚
β”‚                    β”‚ Server      β”‚                              β”‚
β”‚                    β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”˜                              β”‚
β”‚                           β”‚                                      β”‚
β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                        β”‚
β”‚              β”‚            β”‚            β”‚                        β”‚
β”‚              β–Ό            β–Ό            β–Ό                        β”‚
β”‚        β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚
β”‚        β”‚ Edge    β”‚  β”‚ Edge    β”‚  β”‚ Edge    β”‚                   β”‚
β”‚        β”‚ Server  β”‚  β”‚ Server  β”‚  β”‚ Server  β”‚                   β”‚
β”‚        β”‚ (Seoul) β”‚  β”‚ (Tokyo) β”‚  β”‚ (NY)    β”‚                   β”‚
β”‚        β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”˜                   β”‚
β”‚             β”‚            β”‚            β”‚                         β”‚
β”‚             β–Ό            β–Ό            β–Ό                         β”‚
β”‚        Korean users  Japanese users  US users                   β”‚
β”‚                                                                  β”‚
β”‚  Advantages:                                                    β”‚
β”‚  β€’ Reduced latency (respond from nearby server)                 β”‚
β”‚  β€’ Reduced Origin server load                                   β”‚
β”‚  β€’ DDoS defense                                                 β”‚
β”‚  β€’ High availability                                            β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.2 Push vs Pull CDN

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Push CDN vs Pull CDN                          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  Push CDN (Pre-distribution)                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Origin Server                                             β”‚ β”‚
β”‚  β”‚       β”‚                                                    β”‚ β”‚
β”‚  β”‚       β”‚ Admin manually uploads                             β”‚ β”‚
β”‚  β”‚       β–Ό                                                    β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚ β”‚
β”‚  β”‚  β”‚ Edge 1  β”‚  β”‚ Edge 2  β”‚  β”‚ Edge 3  β”‚                    β”‚ β”‚
β”‚  β”‚  β”‚ (Seoul) β”‚  β”‚ (Tokyo) β”‚  β”‚ (NY)    β”‚                    β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Features:                                                 β”‚ β”‚
β”‚  β”‚  β€’ Upload directly on content change                       β”‚ β”‚
β”‚  β”‚  β€’ Pre-distributed to all edges                            β”‚ β”‚
β”‚  β”‚  β€’ Fast response from first request                        β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Suitable: Large files that change infrequently           β”‚ β”‚
β”‚  β”‚            (videos, game patches)                          β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Pull CDN (Cache on request)                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  User Request                                              β”‚ β”‚
β”‚  β”‚       β”‚                                                    β”‚ β”‚
β”‚  β”‚       β–Ό                                                    β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”     Cache Miss?     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚ β”‚
β”‚  β”‚  β”‚ Edge    │─────────────────────│ Origin      β”‚          β”‚ β”‚
β”‚  β”‚  β”‚ Server  β”‚ ◄─────────────────── β”‚ Server     β”‚          β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     Fetch & Cache   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚ β”‚
β”‚  β”‚       β”‚                                                    β”‚ β”‚
β”‚  β”‚       β”‚ Cached response                                    β”‚ β”‚
β”‚  β”‚       β–Ό                                                    β”‚ β”‚
β”‚  β”‚     User                                                   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Features:                                                 β”‚ β”‚
β”‚  β”‚  β€’ First request fetches from Origin                       β”‚ β”‚
β”‚  β”‚  β€’ TTL-based cache management                              β”‚ β”‚
β”‚  β”‚  β€’ Simple operation (automatic caching)                    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Suitable: Website static assets (images, CSS, JS)         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

2.3 Comparison Summary

Item Push CDN Pull CDN
Distribution Admin manually uploads Automatic cache on request
First request Immediate response Origin access needed
Cache management Manual Automatic (TTL)
Storage cost High (full distribution) Low (as needed)
Suitable for Large, infrequently changed files Frequently changing content
Examples Game updates, movies Websites, API responses

2.4 CDN Cache Invalidation

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   CDN Cache Invalidation Strategies              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  1. TTL (Time To Live) setting                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ Cache-Control: max-age=3600  (expire after 1 hour)         β”‚ β”‚
β”‚  β”‚ Cache-Control: s-maxage=86400  (CDN only, 1 day)           β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  2. Purge (immediate deletion)                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Force delete cache for specific URL                      β”‚ β”‚
β”‚  β”‚ β€’ Use for urgent fixes                                     β”‚ β”‚
β”‚  β”‚ β€’ API call: POST /purge?url=...                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  3. Versioning (include version in filename)                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ /static/app.v1.js β†’ /static/app.v2.js                      β”‚ β”‚
β”‚  β”‚ /static/app.abc123.js (use hash)                           β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚ Advantage: Deploy new version without cache invalidation   β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  4. Soft Purge (Stale-While-Revalidate)                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚ β€’ Serve stale cache while refreshing in background         β”‚ β”‚
β”‚  β”‚ Cache-Control: stale-while-revalidate=60                   β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3. HTTP/2 and HTTP/3

3.1 HTTP Version Comparison

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP Version Evolution                        β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  HTTP/1.1 (1997)                                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Request 1 ──────▢ Response 1                              β”‚ β”‚
β”‚  β”‚  Request 2 ──────▢ Response 2  (sequential)                β”‚ β”‚
β”‚  β”‚  Request 3 ──────▢ Response 3                              β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Problems:                                                 β”‚ β”‚
β”‚  β”‚  β€’ Head-of-Line Blocking (HOL)                             β”‚ β”‚
β”‚  β”‚  β€’ One request per connection                              β”‚ β”‚
β”‚  β”‚  β€’ Workarounds: domain sharding, sprite images             β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                           β”‚                                      β”‚
β”‚                           β–Ό                                      β”‚
β”‚  HTTP/2 (2015)                                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ Single TCP Connection ─────────────┐   β”‚ β”‚
β”‚  β”‚  β”‚                                                    β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 1 ═══════▢ ═══════▢ ═══════▢              β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 2 ═══════▢ ═══════▢ ═══════▢  (parallel)  β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 3 ═══════▢ ═══════▢ ═══════▢              β”‚   β”‚ β”‚
β”‚  β”‚  β”‚                                                    β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Improvements:                                             β”‚ β”‚
β”‚  β”‚  β€’ Multiplexing (multiple streams in one connection)       β”‚ β”‚
β”‚  β”‚  β€’ Header Compression (HPACK)                              β”‚ β”‚
β”‚  β”‚  β€’ Server Push                                             β”‚ β”‚
β”‚  β”‚  β€’ Binary Protocol                                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                           β”‚                                      β”‚
β”‚                           β–Ό                                      β”‚
β”‚  HTTP/3 (2022)                                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ QUIC (UDP-based) ───────────────────┐  β”‚ β”‚
β”‚  β”‚  β”‚                                                    β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 1 ═══════▢ (independent, no packet loss)   β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 2 ═══════▢                                 β”‚   β”‚ β”‚
β”‚  β”‚  β”‚  Stream 3 ═══════▢                                 β”‚   β”‚ β”‚
β”‚  β”‚  β”‚                                                    β”‚   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Improvements:                                             β”‚ β”‚
β”‚  β”‚  β€’ 0-RTT connection (on reconnection)                      β”‚ β”‚
β”‚  β”‚  β€’ Independent packet loss handling per stream             β”‚ β”‚
β”‚  β”‚  β€’ Connection Migration (connection survives IP change)    β”‚ β”‚
β”‚  β”‚  β€’ Built-in encryption (TLS 1.3)                           β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.2 HTTP/2 Key Features

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     HTTP/2 Core Features                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  1. Multiplexing                                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/1.1:  ───────────────────────────────────────────    β”‚ β”‚
β”‚  β”‚             β”‚ Req1 β”‚ Res1 β”‚ Req2 β”‚ Res2 β”‚ Req3 β”‚ Res3 β”‚    β”‚ β”‚
β”‚  β”‚             ───────────────────────────────────────────    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/2:    ───────────────────────────────────────────    β”‚ β”‚
β”‚  β”‚             β”‚ R1β”‚R2β”‚R3β”‚S1β”‚S2β”‚S1β”‚R3β”‚S3β”‚S2β”‚S3β”‚             β”‚ β”‚
β”‚  β”‚             ───────────────────────────────────────────    β”‚ β”‚
β”‚  β”‚             (frame-level interleaving)                     β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  2. Header Compression (HPACK)                                  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/1.1:                                                 β”‚ β”‚
β”‚  β”‚  GET /page HTTP/1.1                                        β”‚ β”‚
β”‚  β”‚  Host: example.com                                         β”‚ β”‚
β”‚  β”‚  User-Agent: Mozilla/5.0...  (repeated, ~800 bytes)        β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/2:                                                   β”‚ β”‚
β”‚  β”‚  β€’ Static table (pre-defined common headers)               β”‚ β”‚
β”‚  β”‚  β€’ Dynamic table (store repeated headers during session)   β”‚ β”‚
β”‚  β”‚  β€’ Huffman encoding                                        β”‚ β”‚
β”‚  β”‚  β†’ 85-88% header size reduction                            β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  3. Server Push                                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Client: GET /index.html                                   β”‚ β”‚
β”‚  β”‚  Server:                                                   β”‚ β”‚
β”‚  β”‚    β†’ Response: /index.html                                 β”‚ β”‚
β”‚  β”‚    β†’ Push: /style.css (send before request)                β”‚ β”‚
β”‚  β”‚    β†’ Push: /app.js                                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Caution: Can conflict with client cache, use carefully    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.3 HTTP/3 (QUIC) Advantages

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    HTTP/3 (QUIC) Advantages                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  1. Independent stream handling                                 β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/2 (TCP): All streams wait on packet loss             β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Stream 1 ═══╳══════════════════  (loss)                   β”‚ β”‚
β”‚  β”‚  Stream 2 ════════════════════    (waiting)                β”‚ β”‚
β”‚  β”‚  Stream 3 ════════════════════    (waiting)                β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  HTTP/3 (QUIC): Only lost stream affected                  β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Stream 1 ═══╳══════════════════  (retransmit)             β”‚ β”‚
β”‚  β”‚  Stream 2 ═══════════════════════ (continue)               β”‚ β”‚
β”‚  β”‚  Stream 3 ═══════════════════════ (continue)               β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  2. Fast connection establishment (0-RTT)                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  TCP + TLS 1.3:  2-3 RTT needed                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”                                      β”‚ β”‚
β”‚  β”‚  β”‚ C  │──SYN──▢│ S  β”‚                                      β”‚ β”‚
β”‚  β”‚  β”‚    β”‚β—€SYN+ACKβ”‚    β”‚   1 RTT (TCP)                        β”‚ β”‚
β”‚  β”‚  β”‚    │──ACK──▢│    β”‚                                      β”‚ β”‚
β”‚  β”‚  β”‚    │◀──────▢│    β”‚   1 RTT (TLS)                        β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”˜                                      β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  QUIC (reconnection):  0 RTT                               β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”        β”Œβ”€β”€β”€β”€β”                                      β”‚ β”‚
β”‚  β”‚  β”‚ C  │──DATA─▢│ S  β”‚  Immediate data transfer             β”‚ β”‚
β”‚  β”‚  β”‚    │◀──────▢│    β”‚  (reuse previous session key)        β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”˜        β””β”€β”€β”€β”€β”˜                                      β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  3. Connection Migration                                        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Wi-Fi β†’ LTE switch:                                       β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  TCP: Connection drops, need reconnection                  β”‚ β”‚
β”‚  β”‚  QUIC: Connection ID-based, connection survives            β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Big advantage in mobile environments!                     β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

3.4 Version Comparison Table

Feature HTTP/1.1 HTTP/2 HTTP/3
Transport Layer TCP TCP QUIC (UDP)
Multiplexing X O O
HOL Blocking O Partial (TCP) X
Header Compression X HPACK QPACK
Server Push X O O
Connection Setup 1-2 RTT 1-2 RTT 0-1 RTT
Connection Migration X X O

4. REST vs gRPC

4.1 Overview

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    REST vs gRPC Overview                         β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  REST (Representational State Transfer)                         β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  β€’ HTTP-based architectural style                          β”‚ β”‚
β”‚  β”‚  β€’ JSON/XML format                                         β”‚ β”‚
β”‚  β”‚  β€’ Resource-centric (URL + HTTP Method)                    β”‚ β”‚
β”‚  β”‚  β€’ Stateless                                               β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  GET /users/123                                            β”‚ β”‚
β”‚  β”‚  POST /users                                               β”‚ β”‚
β”‚  β”‚  PUT /users/123                                            β”‚ β”‚
β”‚  β”‚  DELETE /users/123                                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  gRPC (Google Remote Procedure Call)                            β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  β€’ HTTP/2-based                                            β”‚ β”‚
β”‚  β”‚  β€’ Protocol Buffers (Protobuf) serialization               β”‚ β”‚
β”‚  β”‚  β€’ Function call style                                     β”‚ β”‚
β”‚  β”‚  β€’ Bidirectional streaming support                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  service UserService {                                     β”‚ β”‚
β”‚  β”‚    rpc GetUser(GetUserRequest) returns (User);             β”‚ β”‚
β”‚  β”‚    rpc ListUsers(ListRequest) returns (stream User);       β”‚ β”‚
β”‚  β”‚  }                                                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.2 Detailed Comparison

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    REST vs gRPC Detailed Comparison              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  Data Format                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚  REST (JSON):                                              β”‚ β”‚
β”‚  β”‚  {                                                         β”‚ β”‚
β”‚  β”‚    "id": 123,                                              β”‚ β”‚
β”‚  β”‚    "name": "John",                                         β”‚ β”‚
β”‚  β”‚    "email": "john@example.com"                             β”‚ β”‚
β”‚  β”‚  }                                                         β”‚ β”‚
β”‚  β”‚  β†’ Human-readable, larger size                             β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  gRPC (Protobuf):                                          β”‚ β”‚
β”‚  β”‚  message User {                                            β”‚ β”‚
β”‚  β”‚    int32 id = 1;                                           β”‚ β”‚
β”‚  β”‚    string name = 2;                                        β”‚ β”‚
β”‚  β”‚    string email = 3;                                       β”‚ β”‚
β”‚  β”‚  }                                                         β”‚ β”‚
β”‚  β”‚  β†’ Binary format, smaller size (10x difference)            β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Performance                                                    β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  REST:                                                     β”‚ β”‚
β”‚  β”‚  β€’ Text parsing overhead                                   β”‚ β”‚
β”‚  β”‚  β€’ One request per connection in HTTP/1.1                  β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  gRPC:                                                     β”‚ β”‚
β”‚  β”‚  β€’ Fast parsing with binary serialization                  β”‚ β”‚
β”‚  β”‚  β€’ HTTP/2 Multiplexing                                     β”‚ β”‚
β”‚  β”‚  β€’ 7-10x faster serialization                              β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Streaming                                                      β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  REST:                                                     β”‚ β”‚
β”‚  β”‚  β€’ Basically request-response pattern                      β”‚ β”‚
β”‚  β”‚  β€’ Need SSE, WebSocket for streaming                       β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  gRPC:                                                     β”‚ β”‚
β”‚  β”‚  β€’ Unary: single request-response                          β”‚ β”‚
β”‚  β”‚  β€’ Server Streaming: server sends multiple responses       β”‚ β”‚
β”‚  β”‚  β€’ Client Streaming: client sends multiple requests        β”‚ β”‚
β”‚  β”‚  β€’ Bidirectional: both directions streaming                β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.3 Selection Criteria

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     REST vs gRPC Selection Criteria              β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                                  β”‚
β”‚  Choose REST when:                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  βœ“ Public API (for external developers)                    β”‚ β”‚
β”‚  β”‚  βœ“ Direct browser calls                                    β”‚ β”‚
β”‚  β”‚  βœ“ Simple CRUD operations                                  β”‚ β”‚
β”‚  β”‚  βœ“ Debugging convenience important                         β”‚ β”‚
β”‚  β”‚  βœ“ Team familiar with REST                                 β”‚ β”‚
β”‚  β”‚  βœ“ Caching important (HTTP cache)                          β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Examples:                                                 β”‚ β”‚
β”‚  β”‚  β€’ GitHub API, Stripe API                                  β”‚ β”‚
β”‚  β”‚  β€’ General web services                                    β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Choose gRPC when:                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  βœ“ Internal communication between microservices            β”‚ β”‚
β”‚  β”‚  βœ“ High performance needed (low latency, high throughput)  β”‚ β”‚
β”‚  β”‚  βœ“ Real-time bidirectional communication                   β”‚ β”‚
β”‚  β”‚  βœ“ Strong-typed API contract                               β”‚ β”‚
β”‚  β”‚  βœ“ Multi-language environment (code generation)            β”‚ β”‚
β”‚  β”‚  βœ“ Network bandwidth constraints                           β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  Examples:                                                 β”‚ β”‚
β”‚  β”‚  β€’ Netflix, Google internal                                β”‚ β”‚
β”‚  β”‚  β€’ Real-time games, IoT                                    β”‚ β”‚
β”‚  β”‚  β€’ Mobile backends                                         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β”‚  Hybrid Approach:                                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  External API: REST (developer-friendly)                   β”‚ β”‚
β”‚  β”‚  Internal comms: gRPC (high performance)                   β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     REST     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                   β”‚ β”‚
β”‚  β”‚  β”‚ Client   │─────────────▢│ API       β”‚                   β”‚ β”‚
β”‚  β”‚  β”‚ (Web/App)β”‚              β”‚ Gateway   β”‚                   β”‚ β”‚
β”‚  β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜              β””β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”˜                   β”‚ β”‚
β”‚  β”‚                                  β”‚ gRPC                    β”‚ β”‚
β”‚  β”‚                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”           β”‚ β”‚
β”‚  β”‚                    β–Ό             β–Ό             β–Ό           β”‚ β”‚
β”‚  β”‚               β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”         β”‚ β”‚
β”‚  β”‚               β”‚Service β”‚   β”‚Service β”‚   β”‚Service β”‚         β”‚ β”‚
β”‚  β”‚               β”‚   A    β”‚   β”‚   B    β”‚   β”‚   C    β”‚         β”‚ β”‚
β”‚  β”‚               β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”˜         β”‚ β”‚
β”‚  β”‚                                                            β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚                                                                  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

4.4 Comparison Summary Table

Item REST gRPC
Protocol HTTP/1.1, HTTP/2 HTTP/2
Data Format JSON, XML Protocol Buffers
Streaming Limited Native support
Code Generation OpenAPI (optional) Required
Browser Support Perfect grpc-web needed
Learning Curve Low Medium
Performance Good Very Good
Debugging Easy Tools needed

5. Practice Problems

Problem 1: DNS Load Balancing Design

Assume you're running a global service. Design a DNS-based load balancing strategy.

Conditions: - 3 regions: Seoul, Tokyo, Virginia - Normal: Route to closest region - Failures: Automatic failover to other region

Problem 2: CDN Strategy

Develop CDN strategy for online video streaming service.

a) Decide between Push and Pull CDN and explain why. b) Design cache strategy for new content uploads.

Problem 3: HTTP Version Selection

Choose appropriate HTTP version for these scenarios and explain why.

a) Mobile app (frequent network switches) b) Legacy system integration c) News site with many images

Problem 4: REST vs gRPC

Must choose communication method for microservices architecture.

Situation: - 10 internal services - Services written in Go, Java, Python - Need real-time data synchronization


Answers

Problem 1 Answer

DNS Configuration:
1. Use Geolocation DNS
   - Korea β†’ Seoul region IP
   - Japan β†’ Tokyo region IP
   - US β†’ Virginia region IP

2. Health Check Setup
   - Monitor health check endpoint for each region
   - Remove from DNS on failure

3. Failover Configuration
   - Primary: Closest region
   - Secondary: Second closest region
   - Example: Seoul β†’ Tokyo β†’ Virginia

4. TTL Configuration
   - Low TTL (60-300 seconds) for fast failure response

Recommend AWS Route 53 or Cloudflare

Problem 2 Answer

a) Choose Push CDN

Reasons:
- Videos are large and change infrequently
- Need fast response on first view
- Can pre-distribute popular content

b) Cache Strategy:
1. New Content:
   - Pre-distribute to major edge servers after upload
   - Prioritize distribution for expected popular content

2. Live Content:
   - Pull method + short TTL
   - Streaming optimization settings

3. Version Management:
   - Include version in content ID
   - Issue new URL on update

Problem 3 Answer

a) Mobile app: HTTP/3
   - Connection Migration survives network switches
   - 0-RTT for fast reconnection
   - Improved battery efficiency

b) Legacy system: HTTP/1.1
   - Wide compatibility
   - No conflicts with existing infrastructure
   - Gradual upgrade if needed

c) Image-heavy site: HTTP/2
   - Multiplexing loads many images simultaneously
   - Header compression for efficiency
   - Server Push for pre-sending CSS/JS

Problem 4 Answer

Choose gRPC

Reasons:
1. Internal service communication
   - Not public, browser support not needed

2. Multi-language environment
   - Go, Java, Python all support gRPC
   - Protobuf auto-generates code β†’ consistency

3. Real-time synchronization
   - Bidirectional streaming for real-time data exchange
   - Server Streaming for event push

4. Performance
   - Efficient for high-frequency inter-service communication
   - Protobuf serialization for network efficiency

Implementation:
- Manage common .proto files
- Generate gRPC client/server code per service

6. Next Steps

Now that you've reviewed network fundamentals, dive deeper into load balancing.

Next Lesson


7. References

RFC Documents

  • RFC 7540 - HTTP/2
  • RFC 9000 - QUIC
  • RFC 9114 - HTTP/3

Online Resources

Tools


Document Information - Last Updated: 2024 - Difficulty: ⭐⭐ - Estimated Study Time: 2-3 hours

to navigate between lessons