APPLICATION & LOAD

Kiểm thử gRPC: streaming, deadline, retry và load balancing

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

Nhiều gRPC client qua load balancer tới cụm backend với unary và streaming RPC
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 quan sát 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. Retry amplification và stream recovery 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 quan sát
  • 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

#

Test phải trả lời dịch vụ hoàn tất bao nhiêu RPC trong deadline, error code nào xuất hiện, mỗi logical call tạo bao nhiêu attempt và stream mất bao lâu để phục hồi sau lỗi. Tách application success khỏi transport success: HTTP/2 connection còn mở không có nghĩa message cuối đã được xử lý.

Mỗi method cần traffic profile riêng. Unary nên đo request/response size và concurrency; streaming cần message rate, lifetime, direction, flow control và reconnect behavior. Gắn request ID để đối chiếu client, proxy và server.

02

Topology và điểm quan sát

#

Lab gồm client generator, DNS/service discovery, L4/L7 load balancer hoặc proxy, nhiều backend và dependency giả lập. Thu client metrics, proxy access log, server interceptor log, HTTP/2 connection/stream counter và telemetry tài nguyên.

Đồng bộ thời gian giữa các điểm. Với TLS/mTLS, ghi certificate chain, ALPN và session reuse. Khi kiểm tra client-side load balancing, quan sát subchannel và resolver update; khi dùng proxy, ghi thuật toán phân phối và connection pooling.

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

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

#

Khóa version client/server library, protocol buffer schema, compression, message size, concurrency, connection count, max concurrent streams và keepalive. Ghi deadline theo method, retryable status, max attempts, backoff, hedging và retry throttling.

Với backend, kiểm soát worker/thread pool, queue, autoscaling, database latency và health-check policy. Với mạng, thay RTT, jitter, packet loss, bandwidth và connection reset theo từng bước; không đổi nhiều biến trong baseline đầu tiên.

04

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

#

KPI · Cách đo · Bằng chứng Logical success ratio · Call hoàn tất trong deadline · Client result + request ID Attempt amplification · Attempt/logical call · Client/proxy/server log Latency · p50/p95/p99 theo method · Raw histogram Stream continuity · Gap, duplicate, out-of-order · Message sequence Load distribution · RPC/stream theo backend · Backend counters Recovery time · Fault → success ổn định · Timeline sự kiện

Pass/fail phải theo method và phase tải. Báo cả status code như DEADLINE_EXCEEDED, UNAVAILABLE, RESOURCE_EXHAUSTED và CANCELLED; không gom tất cả thành “error”.

05

Ma trận tình huống

#

Tình huống · Mục tiêu · Rủi ro Backend chậm · Deadline/cancel · Work tiếp tục sau client timeout Backend reset · Retry/failover · Retry storm Proxy restart · Stream recovery · Mất hoặc lặp message Resolver đổi endpoint · Rebalance · Stale subchannel Message lớn · Flow control · Head-of-line/queue Một backend quá tải · Load balancing · Hot spot Dependency timeout · Error propagation · Deadline không truyền xuống

Chạy cả failover và failback. Lặp nhiều lần, báo percentile và min/median/max; giữ request ID để phát hiện double execution với operation không idempotent.

06

Test plan theo từng pha

#

Pha functional xác minh schema, metadata, auth, status và deadline propagation. Pha load tăng request rate, stream count và message rate theo bậc. Pha fault làm chậm backend, reset connection, restart proxy và thay resolver endpoint.

Pha saturation đẩy worker/queue/dependency tới ngưỡng; pha soak tìm memory leak, stream drift và reconnect accumulation. Mỗi run lưu client config, service config, proto hash, raw result, proxy/server log và resource telemetry.

07

Retry amplification và stream recovery

#

Đo logical calls và physical attempts riêng. Khi lỗi tăng, retry có thể làm backend nhận tải lớn hơn offered load ban đầu. Thử retry có/không throttling, backoff có jitter và deadline còn lại; xác nhận server không xử lý hai lần operation thiếu idempotency.

Với stream, định nghĩa recovery là transport reconnect, application resume hay dữ liệu đủ từ checkpoint. Kiểm tra message sequence, ack/checkpoint và replay. Một stream mới mở nhanh nhưng mất khoảng dữ liệu vẫn là fail.

Minh họa kiểm chứng: Retry amplification và stream recovery
Minh họa kiểm chứng: Retry amplification và stream recovery
08

Runbook thực hành

#
  • [ ] Chốt method mix, message size, rate, concurrency và duration.
  • [ ] Ghi deadline, retry, keepalive và load-balancing policy.
  • [ ] Đồng bộ request ID và clock ở client–proxy–server.
  • [ ] Chạy baseline unary và từng loại stream.
  • [ ] Tăng tải từng bậc; theo dõi queue/resource headroom.
  • [ ] Tiêm backend delay, reset, proxy restart và resolver change.
  • [ ] Đối chiếu logical call với attempt và server execution.
  • [ ] Kiểm tra message gap/duplicate/out-of-order sau recovery.
  • [ ] Lưu config, proto hash, log và raw result.
09

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

#

Kết quả chỉ áp dụng cho library, schema, method mix, deadline, retry policy, backend và topology đã thử. Một latency trung bình thấp không loại trừ tail latency; success ratio cao có thể che retry amplification.

Không so hai phương án nếu khác connection pooling, compression, TLS reuse hoặc autoscaling state. Hành vi retry và load balancing phụ thuộc ngôn ngữ/library/version, cần xác nhận bằng tài liệu tương ứng.

10

Khái niệm cần nhớ

#
  • RPC: Lời gọi thủ tục từ xa.
  • Deadline: Thời điểm cuối caller chấp nhận kết quả.
  • Attempt: Một lần thử vật lý của logical RPC.
  • Streaming RPC: RPC trao đổi chuỗi message thay vì một request/response.
  • Backoff: Khoảng chờ tăng dần trước retry.
  • Subchannel: Kết nối logic từ gRPC client tới endpoint.
  • Retry amplification: Tải tăng do nhiều attempt cho một call.
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