CYBERSOFT
Đăng nhập

Tích hợp hiệu năng & chất lượng: AI agent + k6 + observability

Tích hợpFintechAI Agentk6/PerfCI/CDThực tế
🗓 1 tháng trước21 phút đọc·👁 893 lượt xem👤 192 người đọc

Kết hợp kiểm thử hiệu năng bằng k6 với một AI agent và observability trên nền fintech: agent đề xuất kịch bản tải, phân tích trace/metric, còn oracle là SLO (p95 latency, tỉ lệ lỗi). Bài trình bày kiến trúc tương quan k6 với metric ứng dụng, cổng review của con người, và cổng CI chặn phát hành khi vi phạm SLO.

1. Bối cảnh & oracle: SLO là chân lý, không phải 'chạy nhanh'

Chúng ta làm việc trên một nền tảng fintech xử lý ví điện tử và thanh toán QR cho khoảng ba triệu người dùng, cao điểm giờ trưa và tối lên tới mười hai nghìn giao dịch mỗi phút. Với hệ thống tiền bạc, 'nhanh' không phải một cảm giác mà là một cam kết đo được: SLO nói rằng p95 của API tạo giao dịch phải dưới bốn trăm mili-giây và tỉ lệ lỗi phải dưới nửa phần trăm trong cửa sổ trượt năm phút. Bài viết này ghép ba mảnh thường bị làm rời rạc: kiểm thử tải bằng k6, một AI agent để đề xuất kịch bản và đọc trace/metric, và observability để nhìn xuyên hệ thống. Điểm mấu chốt đặt lên đầu tiên: oracle của chúng ta là SLO, chứ không phải 'màn hình phản hồi mượt'.

Vì sao phải nhấn mạnh oracle? Bởi một bài kiểm thử tải mà chỉ in ra 'đã gửi mười nghìn request' thì không nói được điều gì về sức khỏe hệ thống. Chúng ta cần khẳng định những bất biến có ý nghĩa: dưới tải mục tiêu, p95 vẫn nằm trong ngân sách; không có request nào trả về mã 5xx quá ngưỡng; không giao dịch nào bị ghi hai lần khi client thử lại; và độ trễ hàng đợi ghi sổ kế toán không phình ra vô hạn. AI agent trong kiến trúc này không được phép tự phán 'đạt' hay 'trượt' — nó chỉ đề xuất kịch bản và tóm tắt bằng chứng, còn quyết định gate vẫn dựa trên ngưỡng SLO mã hóa cứng và một người review.

AI Agent propose scenarios k6 generate load System Under Test API · ledger · queue Observability metrics · traces SLO Gate p95 · error rate
Kiến trúc tích hợp: agent đề xuất kịch bản, k6 tạo tải, hệ thống bị đo bằng observability, cổng SLO ra quyết định.
Quy ước xuyên bài: 'oracle-first' nghĩa là ta viết ngưỡng SLO trước, rồi mới thiết kế kịch bản để thử phá vỡ ngưỡng đó.

2. Ranh giới của AI agent: nó đề xuất, con người quyết

AI agent ở đây có ba nhiệm vụ rõ ràng và một danh sách dài những việc nó không được làm. Nó được phép: đọc đặc tả OpenAPI và lịch sử traffic để đề xuất hồ sơ tải (ramp-up, số VU, phân bố endpoint); đọc kết quả k6 cùng metric và trace để tóm tắt điểm nghẽn; và gợi ý ngưỡng cảnh báo dựa trên dữ liệu lịch sử. Nó không được phép: tự sửa ngưỡng SLO, tự đánh dấu một lần chạy là 'đạt', hay tự merge thay đổi vào nhánh chính. Ranh giới này quan trọng vì mô hình ngôn ngữ có thể ảo giác (ハルシネーション) — nó có thể 'tự tin' kết luận sai nếu ta để nó tự phán quyết.

Để chống ảo giác, ta áp dụng grounding: mọi kết luận của agent phải trích dẫn số liệu thật từ tệp kết quả k6 (summary.json) hoặc từ hệ observability, kèm mã truy vết. Nếu agent nói 'endpoint /pay chậm ở p99', câu đó phải đi kèm giá trị p99 cụ thể và khoảng thời gian lấy mẫu. Reviewer con người đọc bản tóm tắt có trích dẫn, đối chiếu nhanh với dashboard, rồi mới bấm phê duyệt. Cách này giữ tốc độ mà không đánh đổi độ tin cậy: agent làm phần đọc-tổng-hợp tốn công, con người giữ phần phán quyết.

  • Agent ĐƯỢC: đề xuất hồ sơ tải, tóm tắt điểm nghẽn có trích dẫn, gợi ý ngưỡng cảnh báo.
  • Agent KHÔNG: sửa SLO, tự phán đạt/trượt, tự merge.
  • Con người GIỮ: định nghĩa SLO, phê duyệt gate, sở hữu ca rủi ro cao (thanh toán, hoàn tiền).
⚠️ Đừng bao giờ để agent tự viết lại ngưỡng SLO khi bài chạy trượt. Đó là 'dời cột gôn' — biến cổng chất lượng thành vô nghĩa.

3. Định nghĩa SLO/SLI thành mã: nguồn sự thật duy nhất

Trước khi viết bất kỳ kịch bản k6 nào, ta cần cố định SLI (chỉ số ta đo) và SLO (ngưỡng ta cam kết) dưới dạng mã có thể diff và review. SLI của chúng ta gồm: độ trễ p95 và p99 của các endpoint quan trọng, tỉ lệ lỗi phân theo mã trạng thái, và thông lượng thành công. SLO đặt ngân sách cụ thể trên từng SLI. Việc mã hóa vào một tệp YAML duy nhất giúp cả k6, hệ cảnh báo và cổng CI đọc chung một nguồn — không ai được phép giữ 'ngưỡng riêng' trong đầu. Đây chính là oracle mà mọi thành phần khác phải phục tùng.

yaml
# slo.yaml — nguồn sự thật duy nhất cho oracle hiệu năng
service: wallet-payment-api
window: 5m            # cửa sổ trượt đánh giá
slos:
  - sli: latency_p95_ms
    endpoint: POST /v1/transactions
    threshold: 400     # p95 < 400ms
    comparator: "<"
  - sli: latency_p99_ms
    endpoint: POST /v1/transactions
    threshold: 900
    comparator: "<"
  - sli: error_rate
    scope: all
    threshold: 0.005   # < 0.5%
    comparator: "<"
  - sli: throughput_ok_rps
    scope: all
    threshold: 150     # phải chịu >= 150 rps thành công
    comparator: ">="
guardrails:
  agent_may_edit: false   # agent KHÔNG được sửa file này
  human_approver: "qa-lead"

Lưu ý cách chúng ta gắn comparator rõ ràng cho từng SLI. Điều này quan trọng vì có chỉ số cần nhỏ hơn (độ trễ, tỉ lệ lỗi) và có chỉ số cần lớn hơn (thông lượng thành công). Khi cổng CI đọc tệp này, nó không đoán chiều so sánh mà tuân theo đúng khai báo. Trường 'agent_may_edit: false' được chương trình CI thực thi cứng: nếu agent gửi PR chạm vào slo.yaml, pipeline tự động từ chối. Nhờ vậy oracle không thể bị bào mòn một cách vô tình hay cố ý.

💡 Đặt SLO gần với hợp đồng nghiệp vụ, không phải với năng lực phần cứng hiện tại. SLO phản ánh điều người dùng chịu được, không phản ánh 'máy hiện chạy được bao nhiêu'.

4. Agent đề xuất hồ sơ tải từ đặc tả & traffic thật

Bước đầu tiên của agent là biến hiểu biết về hệ thống thành một hồ sơ tải có căn cứ. Thay vì đoán 'chạy một nghìn VU', agent đọc phân bố endpoint trong bảy ngày traffic gần nhất, nhận ra rằng tạo giao dịch chiếm khoảng sáu mươi phần trăm, tra cứu số dư chiếm ba mươi phần trăm, phần còn lại là lịch sử và hồ sơ. Nó đề xuất một hồ sơ ramp-up phản ánh đúng tỉ lệ đó và mô phỏng cao điểm giờ trưa. Quan trọng: agent xuất ra đề xuất dưới dạng JSON có cấu trúc để con người review, chứ không tự chạy.

🔒

Nội dung bị khoá

Bạn đang xem bản xem trước. Đăng nhập để mở khoá toàn bộ bài viết và tất cả tài liệu Tester/QA.

Đã xem 25% nội dung
  • Đọc trọn vẹn mọi bài viết
  • Lưu bài & ghi chú cá nhân
  • Theo dõi tiến độ đã đọc
  • Luyện phỏng vấn, ISTQB, Mock
Đăng nhập để đọc tiếp

Chưa có mã? Lấy mã qua Fanpage / Zalo CyberSoft.

0

💬 Bình luận (0)

Bạn có thể đọc mọi bình luận. Đăng nhập để bình luận

Chưa có bình luận nào. Hãy là người đầu tiên!