Backend nền tảng
B4 · TCP, UDP, DNS, HTTP và Connection Pool
TCP: tin cậy, có thứ tự, bắt tay 3 bước → HTTP/1.1, HTTP/2, kết nối DB. UDP: nhanh, không đảm bảo → video call, game, DNS, HTTP/3 (QUIC).
B4 · Junior · cốt lõi
TCP như thư bảo đảm: có xác nhận, đúng thứ tự, mất thì gửi lại. UDP như phát tờ rơi: nhanh, không đảm bảo ai nhận. DNS như danh bạ đổi tên thành số điện thoại.
Cốt lõi
- TCP: tin cậy, có thứ tự, bắt tay 3 bước → HTTP/1.1, HTTP/2, kết nối DB. UDP: nhanh, không đảm bảo → video call, game, DNS, HTTP/3 (QUIC).
- DNS: tên miền → IP, có TTL cache.
- HTTP: method (GET, POST, PUT, PATCH, DELETE), status code 2xx / 3xx / 4xx / 5xx, header.
- Mở kết nối mới tốn kém (TCP + TLS) → connection pool tái sử dụng kết nối tới DB và dịch vụ khác.
Đánh đổi
Pool quá nhỏ → request xếp hàng chờ; quá lớn → DB quá tải. Kích thước pool phải tính theo tổng số instance.
Trong thực tế
Mỗi request mở rồi đóng kết nối DB → chậm và dễ cạn kết nối; dùng pool (HikariCP, pgxpool, node-postgres Pool…).
Bug thường gặp
Quên trả kết nối về pool trong nhánh xử lý lỗi → vài giờ sau pool cạn, mọi request treo chờ kết nối.
Tự hỏi lại
Vì sao trả HTTP 200 kèm {"error": …} là thiết kế API không tốt?