Từ DNS tới reverse proxy
Một request HTTP không bắt đầu ở controller. Nó phải tìm được địa chỉ, mở được kết nối, xác thực peer, đi qua các trust boundary và chia sẻ deadline với connection pool trước khi application xử lý.
1. DNS: tên miền không phải là địa chỉ tức thời
Resolver thường kiểm tra cache của browser/OS, sau đó recursive resolver truy vấn authoritative hierarchy. A và AAAA trả địa chỉ IPv4/IPv6; CNAME tạo alias; SRV mang port/priority cho client biết record; TXT thường phục vụ metadata như SPF hoặc ACME. TTL kiểm soát thời gian cache, không phải lời hứa failover xảy ra ngay lập tức.
- Negative caching và stale resolver có thể làm rollout hoặc rollback chậm hơn TTL bạn nhìn thấy.
- HTTP client pool có thể giữ kết nối tới IP cũ lâu hơn DNS TTL; đổi DNS không tự đóng keep-alive.
- Kiểm tra cả IPv4/IPv6, split-horizon DNS, search domain và resolver policy khi chỉ một zone lỗi.
2. TCP: ordered byte stream và các timeout khác nhau
TCP cung cấp byte stream có thứ tự, sequence/acknowledgement, retransmission, flow control và congestion control; nó không giữ message boundary. HTTP/1.1 vì thế có thể bị head-of-line blocking trên một connection, còn client thường mở nhiều connection để giảm chờ.
| Signal/timeout | Nó đo gì | Bẫy thường gặp |
|---|---|---|
| Connect timeout | Thời gian tới khi TCP connection được thiết lập | Nhầm với server xử lý chậm |
| Pool acquisition timeout | Thời gian chờ slot trong client pool | Đổ lỗi cho downstream dù pool đã cạn |
| Read/response timeout | Chờ byte phản hồi hoặc body tiếp theo | Đặt quá thấp cho response hợp lệ lớn |
| Idle/keep-alive timeout | Khoảng không có traffic trên connection | Không khớp với NAT/LB nên gặp reset ngẫu nhiên |
3. TLS: xác thực danh tính trước khi tin dữ liệu
TLS handshake thương lượng protocol/cipher, xác thực certificate chain và hostname, rồi tạo session keys để mã hóa application data. SNI giúp server chọn certificate theo hostname; ALPN giúp chọn HTTP/1.1 hay HTTP/2. mTLS thêm client certificate nhưng vẫn cần mapping identity, rotation và revocation strategy ở application.
- Certificate hết hạn, thiếu intermediate, trust store cũ hoặc clock sai là các lỗi production phổ biến.
- Đừng coi “TLS đã bật” là end-to-end nếu reverse proxy terminate TLS và hop proxy→app vẫn là trust boundary riêng.
- Giữ protocol/cipher policy có versioned rollout; ghi nhận handshake failure theo SNI, ALPN và peer identity.
client --TLS/SNI/ALPN--> edge proxy --trusted hop--> application
certificate + hostname forwarded identity / scheme
4. Reverse proxy và forwarded headers
Load balancer/reverse proxy có thể terminate TLS, route, buffer, compress, retry và đặt forwarded headers. Chỉ tin Forwarded hoặc X-Forwarded-* khi request đến từ proxy nằm trong allowlist; nếu client được tự gửi header, họ có thể giả mạo scheme, host hoặc IP để bypass policy, tạo URL sai hay làm hỏng audit.
- Chuẩn hóa một lần ở edge: scheme, host, client IP chain và request ID.
- Giới hạn kích thước header/body, timeout và redirect tại từng hop.
- Không retry mù ở proxy cho request có side effect; proxy không biết business idempotency.
5. Connection pools và deadline end-to-end
Pool giới hạn connections theo destination. Pool quá nhỏ tạo acquisition wait; pool quá lớn dồn tải vào downstream và làm queue tăng. NAT/LB idle timeout, stale keep-alive và DNS rotation có thể tạo connection reset. Deadline phải bao gồm cả pool wait, không chỉ thời gian app xử lý.
6. Checklist điều tra một request chậm
- So sánh DNS lookup và địa chỉ thực tế của từng client zone.
- Đo TCP connect, TLS handshake, certificate/ALPN và proxy queue.
- Kiểm tra pool acquisition, app thread/queue, downstream spans và response serialization.
- Đối chiếu timeout ở client, proxy, server và LB; tìm hop có deadline ngắn hơn.
- Kiểm tra connection reuse, idle timeout, retry count và request ID xuyên suốt.