
Mục lục bài viết 10 phần
AMQP 1.0 tách connection, session và link, đồng thời dùng link credit cùng settlement để kiểm soát delivery. Broker vẫn có thể “healthy” nhưng producer bị throttle, unsettled delivery tăng, consumer nhận lặp hoặc backlog không phục hồi. Bài đo phải theo dõi message từ source tới sink bằng ID độc lập.
Bài viết giúp bạn
- Câu hỏi kiểm thử AMQP 1.0
- Topology và điểm quan sát
- Biến số và traffic profile
Câu hỏi kiểm thử AMQP 1.0
#AMQP 1.0 là protocol ở wire level; broker, client SDK và dịch vụ messaging có thể áp policy khác nhau về queue, durability, retry và dead-letter. Test cần xác nhận protocol negotiation, link attach, credit, delivery state và outcome, sau đó nối chúng với semantic của ứng dụng. Không lấy HTTP health của broker làm bằng chứng giao nhận.
Tách capacity và correctness. Capacity trả lời tốc độ publish/consume ổn định; correctness trả lời message nào accepted, released, rejected, modified, unsettled hoặc xuất hiện ở sink. “Accepted” ở một hop không nhất thiết đồng nghĩa business transaction đã commit end-to-end.
Topology và điểm quan sát
#Topology gồm producer emulator, broker/cluster hoặc managed service, consumer/sink xác minh, identity/TLS và storage nếu persistence được bật. Với cluster, vẽ node, load balancer, partition/queue ownership, replication và failure domain. Đặt capture/telemetry ở client side; với TLS, ưu tiên client debug/protocol metrics thay vì giải mã production traffic.
Mỗi message cần immutable test ID, publish timestamp, key/group và checksum payload. Sink lưu receive count, order, latency và outcome ứng dụng. Thu connection/session/link counter, available credit, unsettled count, queue depth, enqueue/dequeue, disk latency, CPU, memory và network retransmission trên cùng timeline.

Biến số và traffic profile
#Khóa client library/version, AMQP hostname/container ID, TLS/auth, idle timeout, max frame size, session window, sender/receiver settlement mode, link credit, durable configuration và retry/backoff. Ghi broker/service version, node count, storage, quota, routing và dead-letter policy. Không trộn thay đổi SDK với thay đổi broker trong cùng comparison.
Traffic profile nên gồm message nhỏ/lớn, fixed/variable payload, single/many links, uniform và hot key/address, steady/burst, fast/slow consumer. Thử pre-settled và unsettled chỉ khi ứng dụng dùng; semantics khác nhau nên không lấy throughput của pre-settled làm capacity cho workload cần confirmation.
- Link credit — Các mức nên thử: thấp, vận hành, cao; Dấu hiệu cần theo dõi: stall, memory, fairness
- Payload — Các mức nên thử: nhỏ, IMIX, lớn; Dấu hiệu cần theo dõi: frame overhead, latency
- Consumer — Các mức nên thử: nhanh, chậm, pause; Dấu hiệu cần theo dõi: backpressure, queue depth
- Settlement — Các mức nên thử: theo ứng dụng; Dấu hiệu cần theo dõi: unsettled, duplicate, loss
- Connection/link — Các mức nên thử: ít đến nhiều; Dấu hiệu cần theo dõi: handshake và resource limit
- Failure — Các mức nên thử: network, node, storage; Dấu hiệu cần theo dõi: retry, outcome, recovery
KPI cùng bằng chứng end-to-end
#KPI gồm publish accepted/s, consume/s, end-to-end delivery ratio, duplicate ratio, out-of-order ratio theo key/group, p50/p95/p99 latency, unsettled delivery, available credit, queue depth, consumer lag và recovery time. Tách producer accepted, broker stored và sink processed; ba số có thể khác khi pipeline đang backlog.
Bằng chứng tối thiểu: test manifest, SDK/broker version, protocol/config dump, broker metrics, producer log theo message ID và sink ledger. Đối chiếu set difference giữa sent, settled và processed. Pass/fail cần nêu semantics ứng dụng; không tuyên bố exactly-once chỉ từ một AMQP outcome nếu downstream side effect không idempotent.
Ma trận kịch bản quyết định
#- Baseline — Thao tác: tải thấp, consumer nhanh; KPI chính: delivery và latency; Nguy cơ sai kết luận: tool/sink chậm
- Credit thấp — Thao tác: giới hạn receiver credit; KPI chính: fairness, stall; Nguy cơ sai kết luận: gọi flow control là lỗi
- Slow consumer — Thao tác: delay xử lý; KPI chính: queue, producer throttle; Nguy cơ sai kết luận: bỏ qua storage
- Burst — Thao tác: tăng publish ngắn; KPI chính: buffer, p99, recovery; Nguy cơ sai kết luận: chỉ xem average
- Link reconnect — Thao tác: ngắt TCP/TLS; KPI chính: duplicate, unsettled; Nguy cơ sai kết luận: retry không giới hạn
- Node fail — Thao tác: dừng một broker; KPI chính: outage, ownership; Nguy cơ sai kết luận: LB che mất fault
- Storage slow — Thao tác: tăng I/O latency; KPI chính: settlement và backlog; Nguy cơ sai kết luận: quy cho network
- Soak — Thao tác: tải dài; KPI chính: leak, drift, log/disk; Nguy cơ sai kết luận: duration quá ngắn
Test plan flow control và settlement
#Chạy baseline ở mức thấp, xác nhận toàn bộ ID tại sink và outcome mong đợi. Tăng số producer/link rồi message rate theo bậc; mỗi bậc giữ đủ để queue đạt steady state. Sau đó giảm link credit, pause consumer và tạo burst. Quan sát credit distribution giữa nhiều receiver để phát hiện starvation hoặc unfair dispatch.
Với unsettled delivery, gây disconnect ở các mốc trước và sau disposition; đối chiếu delivery tag, outcome và sink ledger. Kiểm tra retry tạo duplicate hay loss, và ứng dụng deduplicate/idempotent thế nào. Chạy payload lớn cùng max frame thực tế để phát hiện fragmentation, memory pressure và tail latency.

Reconnect, failover và recovery
#Mô phỏng packet loss/latency, TCP reset, TLS/auth unavailable, broker process stop và node/zone failure riêng. Khóa retry count, exponential backoff và jitter; một reconnect storm không kiểm soát có thể là tải lớn hơn fault ban đầu. Đo time-to-reconnect, link reattach, credit restoration, backlog drain và steady-state latency.
Sau recovery, xác nhận không còn ghost consumer/link, unsettled delivery không tăng mãi, queue ownership ổn định và message ở dead-letter đúng policy. Với managed service, dùng fault được nhà cung cấp hỗ trợ; không suy kết quả từ một endpoint sang mọi tier/region.
Checklist thực hành
#- Ghi AMQP client, broker/service, TLS/auth và topology.
- Gắn ID/checksum/timestamp cho từng message.
- Xác nhận sender/receiver settlement mode và link credit.
- Baseline producer, broker và sink độc lập.
- Tăng link, rate, payload và fan-in/fan-out theo bậc.
- Thử slow consumer, credit starvation và burst.
- Gây disconnect quanh disposition/settlement.
- Thử node, network, identity và storage fault riêng.
- Đo delivery, duplicate, order, p99 và recovery.
- Lưu ledger sent/settled/processed cùng raw metrics.
Giới hạn của kết luận
#AMQP 1.0 interoperability không chứng minh hai sản phẩm có cùng queue semantic, HA hoặc capacity. Kết quả phụ thuộc client SDK, service quota, persistence, payload, routing và consumer behavior. Benchmark broker với sink bỏ qua logic không đại diện ứng dụng thật.
Không dùng “zero message loss” nếu test ID chỉ nằm trong log dễ mất, nếu sink không durable hoặc nếu backlog chưa drain hết. Exactly-once end-to-end cần thiết kế transaction/idempotency vượt ra ngoài một phép đo transport.
Khái niệm cần nhớ
#- Connection: Kết nối mạng AMQP giữa hai container.
- Session: Ngữ cảnh song hướng ghép nhiều link.
- Link: Đường truyền một chiều giữa source và target.
- Link credit: Số delivery receiver cho phép sender gửi.
- Settlement: Hoàn tất trách nhiệm theo dõi trạng thái delivery.
- Disposition: Trạng thái/outcome của delivery.
- Unsettled delivery: Delivery chưa được hai bên kết thúc theo mode.
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ảo3 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.
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.
