TCP Congestion Control
🔸 1. TCP Congestion Control là gì?
TCP Congestion Control là cơ chế trong TCP giúp điều chỉnh tốc độ truyền dữ liệu giữa sender và receiver để tránh tình trạng tắc nghẽn mạng (congestion) gây mất gói, delay cao.
🔸 2. Các thành phần chính
Congestion Window (cwnd)
Giới hạn lượng dữ liệu được gửi mà chưa nhận ACK.
Slow Start
Tăng tốc độ truyền dần để đo dung lượng mạng.
Congestion Avoidance
Tăng chậm lại khi gần tới ngưỡng.
Fast Retransmit / Fast Recovery
Xử lý khi có mất gói, không cần chờ timeout.
🔸 3. Các thuật toán TCP Congestion Control phổ biến
Reno
Cũ, đơn giản, không tối ưu tốt với mất gói
Môi trường cổ điển
Cubic (Linux default)
Tối ưu cho tốc độ cao, delay cao
Internet, server tải lớn
BBR (Google)
Dựa trên băng thông thực tế, không phụ thuộc mất gói
Microservices, video, gRPC, APIs
Vegas
Dựa trên delay RTT thay vì mất gói
Ứng dụng real-time, low-latency
🔸 4. Ứng dụng trong Backend
✅ Khi nào cần quan tâm:
Backend phục vụ lượng lớn client TCP (REST APIs, WebSocket, gRPC).
Các hệ thống streaming (video, audio).
Thao tác nhiều qua WAN hoặc Cloud (delay cao, mất gói).
🧠 Một số tình huống thực tế:
gRPC streaming bị delay, giật
Dùng Cubic hoặc BBR tốt hơn Reno
REST API timeout ngẫu nhiên
Congestion window bị thu hẹp do mất gói
WebSocket chậm khi load cao
Có thể tuning tcp_congestion_control
, kernel param
🔸 5. Tuning trong hệ thống Linux
# Xem thuật toán hiện tại
sysctl net.ipv4.tcp_congestion_control
# List các thuật toán hỗ trợ
sysctl net.ipv4.tcp_available_congestion_control
# Chuyển sang BBR
echo "bbr" > /proc/sys/net/ipv4/tcp_congestion_control
⚠️ Lưu ý: Chuyển đổi thuật toán yêu cầu kernel hỗ trợ (BBR yêu cầu Linux kernel >= 4.9)
🔸 6. Góc nhìn Backend Developer
Tối ưu mạng ở tầng TCP
Nếu backend tự quản lý hệ điều hành (Linux), có thể đổi sang thuật toán phù hợp như BBR
Hiểu rõ tác động đến retry logic
API bị delay → timeout → retry → thêm áp lực lên congestion
gRPC tuning
BBR + flow control tốt hơn cho gRPC bidirectional stream
Monitoring với Prometheus + Grafana
Theo dõi RTT, retransmits, cwnd để điều chỉnh hiệu quả
✅ Tổng kết dành cho Backend Engineer
Biết TCP hoạt động ra sao
Để xử lý lỗi timeout, connection reset...
Nắm các thuật toán congestion control
Để chọn đúng thuật toán theo workload
Biết cách monitoring & tuning
Đảm bảo hiệu năng dưới tải cao
Nếu bạn đang dùng các dịch vụ cloud (AWS, GCP...), hãy kiểm tra xem load balancer hoặc instance có hỗ trợ BBR, và cân nhắc dùng nếu workload có yêu cầu tốc độ & độ ổn định cao.
Last updated