APPLICATION & LOAD

Kiểm thử HTTP/2: multiplexing, flow control, GOAWAY và stream reset

22/8/2026 · 16 phút đọc

Một kết nối HTTP/2 mang nhiều stream qua client, proxy và origin
Mục lục bài viết 10 phần

1. Câu hỏi kiểm thử cần trả lời 2. Topology và điểm đo 3. Biến số phải kiểm soát 4. KPI và bằng chứng đầu ra 5. Ma trận tình huống 6. Test plan theo từng pha 7. GOAWAY, reset và retry 8. Runbook thực hành 9. Giới hạn kết luận

ĐỌC NHANH

Bài viết giúp bạn

  • Câu hỏi kiểm thử cần trả lời
  • Topology và điểm đo
  • Biến số phải kiểm soát
Tùy chỉnh đọc
01

Câu hỏi kiểm thử cần trả lời

#

Hỏi riêng ba lớp: negotiation có chọn đúng HTTP/2; stream có được multiplex và flow-controlled đúng; dịch vụ có giữ latency/error budget dưới concurrency thực tế. Thêm câu hỏi proxy: client-side và upstream-side có cùng protocol không, hay một phía HTTP/2 nhưng phía còn lại HTTP/1.1.

Một lần chạy tốt phải giải thích được lỗi xảy ra ở request, stream hay connection. RST_STREAM chỉ kết thúc một stream; GOAWAY thông báo ngừng nhận stream mới trên connection và mang last-stream identifier. Cách client retry request chưa hoàn tất có thể quyết định tải origin sau sự cố.

02

Topology và điểm đo

#

Dựng hai baseline: client nối trực tiếp origin và client qua reverse proxy/load balancer. Nếu production có service mesh hoặc TLS termination nhiều lớp, biểu diễn từng hop và ghi protocol thực tế mỗi hop. Đặt telemetry ở client, proxy và origin; capture metadata TLS/HTTP/2 trong môi trường lab được phép giải mã.

Thêm network emulator giữa client–edge và edge–origin để điều khiển latency, jitter, packet loss, bandwidth và reordering. Traffic gồm response nhỏ, upload/download lớn, request ngắn/dài trộn lẫn và một stream slow receiver. Không dùng chỉ một endpoint vì sẽ che cache, application time và kích thước response.

Minh họa kỹ thuật: Topology và điểm đo
Minh họa kỹ thuật: Topology và điểm đo
03

Biến số phải kiểm soát

#

Ghi TLS version, ALPN, cipher, connection reuse, concurrent connections, concurrent streams, SETTINGS, initial window, frame size, header compression state, request priority policy và keepalive. Khóa payload, method, idempotency, server think time, cache state, compression và upstream protocol.

Traffic profile phải nêu arrival model, requests per second, concurrency, distribution payload và tỷ lệ request dài/ngắn. Điều kiện mạng phải tách hai chiều. Với retry, ghi số lần, backoff, jitter, deadline và retry budget; nếu không, lỗi connection có thể biến thành retry storm ngoài chủ đích.

04

KPI và bằng chứng đầu ra

#

Đo request success/error theo status và transport error; throughput theo request/s và byte/s; latency p50/p95/p99/p99.9; time-to-first-byte; active/queued stream; connection count; RST_STREAM, GOAWAY và retry count. Ở network layer, giữ packet loss, retransmission, RTT và congestion signals để giải thích tail latency.

KPI · Phạm vi · Bằng chứng Negotiated protocol · Từng hop · ALPN/access log Stream concurrency · Connection · Client/proxy metrics Tail latency · Request · Raw latency histogram Flow-control stall · Stream/connection · Frame trace và timestamp Retry amplification · End-to-end · Attempt ID, origin request count Recovery · Sự kiện · GOAWAY/reset timeline

Pass/fail nên gắn với SLO và điều kiện tải, ví dụ p99 dưới budget ở concurrency đã định, error rate không vượt ngưỡng, không retry request non-idempotent ngoài policy và origin amplification nằm trong retry budget.

05

Ma trận tình huống

#

Tình huống · Mục tiêu · Rủi ro cần quan sát Nhiều stream ngắn · Multiplexing · Queue phía client/proxy Một download lớn · Fairness · Stream nhỏ bị tăng latency Slow receiver · Flow control · Stall lan sang connection RTT/loss tăng · Resilience · Tail latency, retransmission Proxy drain · GOAWAY · Retry hoặc request mất RST_STREAM có kiểm soát · Error handling · Retry sai method Upstream HTTP/1.1 · Protocol translation · Connection pool bottleneck

Chạy ma trận ở ít nhất hai payload mix và hai network profile. Kết quả trực tiếp-origin và qua-proxy giúp phân biệt giới hạn application với giới hạn gateway hoặc protocol translation.

06

Test plan theo từng pha

#

Pha baseline xác nhận ALPN, SETTINGS, một connection và một stream. Pha concurrency tăng stream/connection theo bậc, giữ offered rate trong khả năng generator. Pha mix thêm request dài, upload và slow receiver. Pha impairment tăng RTT, jitter, loss hoặc bandwidth constraint từng biến.

Pha resilience phát GOAWAY, reset stream, restart/drain proxy và origin; pha soak duy trì traffic để bắt connection churn, memory growth và latency drift. Mỗi pha lưu config, request ID, stream ID, connection ID, raw histogram, error taxonomy và log ba tầng.

Minh họa kiểm chứng: Test plan theo từng pha
Minh họa kiểm chứng: Test plan theo từng pha
07

GOAWAY, reset và retry

#

Khi nhận GOAWAY, client cần biết stream nào có thể chưa được xử lý, nhưng quyết định retry còn phụ thuộc method và idempotency của ứng dụng. Gắn unique request ID và attempt ID để phát hiện một thao tác nghiệp vụ bị thực hiện hai lần dù HTTP status cuối cùng là thành công.

Kiểm thử graceful drain bằng cách giảm khả năng nhận stream mới, gửi GOAWAY và giữ đủ thời gian cho stream đang chạy. Sau đó thử abrupt close để đo worst case. Báo riêng client-visible errors, origin attempts và business duplicates; không gộp tất cả thành một tỷ lệ success.

08

Runbook thực hành

#
  • [ ] Ghi protocol từng hop, TLS/ALPN và upstream mode.
  • [ ] Chốt endpoint mix, payload, method và idempotency.
  • [ ] Khóa connection/stream concurrency và SETTINGS.
  • [ ] Chạy baseline trực tiếp và qua proxy.
  • [ ] Tăng concurrency; theo dõi generator saturation.
  • [ ] Thêm slow stream và impairment từng biến.
  • [ ] Thử GOAWAY, RST_STREAM, drain và abrupt close.
  • [ ] Đối soát request ID, attempt ID và origin count.
  • [ ] Lưu raw histogram, frame/log trace và version.
  • [ ] Xác nhận không còn traffic test sau khi hoàn tất.
09

Giới hạn kết luận

#

Kết quả HTTP/2 không suy rộng sang HTTP/3 vì transport và recovery khác nhau. Cũng không thể quy mọi tail latency cho multiplexing nếu chưa tách application time, connection pool, flow control và network condition. Capture mã hóa không có key/log phù hợp chỉ cho thấy transport, không đủ xác nhận semantics của frame.

Một generator đạt request rate mục tiêu chưa chứng minh client thật có cùng connection reuse, priority, retry hoặc TLS behavior. Kết luận cần gắn với client library, proxy/origin version, config, topology và workload đã thử.

10

Khái niệm cần nhớ

#
  • Stream: Luồng frame hai chiều độc lập trong một kết nối HTTP/2.
  • Multiplexing: Nhiều stream xen kẽ trên cùng connection.
  • Flow control: Giới hạn byte ở cấp stream và connection.
  • SETTINGS: Tham số peer quảng bá cho connection HTTP/2.
  • GOAWAY: Frame báo endpoint ngừng nhận stream mới trên connection.
  • RST_STREAM: Frame kết thúc một stream cụ thể.
  • Retry amplification: Số attempt/origin request tăng so với logical request.
THUẬT NGỮ NHANH

Khái niệm cần nhớ

DUT / SUT
Thiết bị hoặc toàn bộ hệ thống đang là đối tượng của bài kiểm thử.
Steady state
Giai đoạn tải đã ổn định và đủ điều kiện để lấy số liệu đại diện.
Pass / fail
Kết luận dựa trên ngưỡng đã thống nhất, luôn đi cùng topology, cấu hình và điều kiện đo.
TÀI LIỆU ĐỐI CHIẾUTài liệu tham khảo4 nguồn

Nội dung được biên soạn độc lập, theo hướng vendor-neutral và đối chiếu các tài liệu gốc dưới đây. Tính năng sản phẩm cần được kiểm tra lại theo phiên bản đang sử dụng.

Nguyên tắc biên tập

NetVali ưu tiên nguồn tiêu chuẩn và tài liệu chính thức; phân biệt khuyến nghị triển khai với yêu cầu của tiêu chuẩn; không công bố thông số sản phẩm chưa gắn với phiên bản và điều kiện đo.

Thông số và khả năng sản phẩm có thể thay đổi theo phiên bản. Hãy đối chiếu tài liệu chính thức trước khi xây dựng cấu hình hoặc tiêu chí nghiệm thu.
BẮT ĐẦU TỪ BÀI TOÁN

Cần chuyển kiến thức thành test plan?

Chia sẻ mục tiêu, topology và ràng buộc kỹ thuật. NetVali sẽ cùng bạn xác định bài đo phù hợp.

Trao đổi yêu cầu kỹ thuật