Load Testing Kubernetes: Building a Framework (Part 1)

Bài tóm tắt Achievers 2023 3. Quy mô lớn Độ khó: Cơ bản

Achievers · 2023 · 3. Quy mô lớn · Độ khó: Cơ bản — bài gốc

Phần 1 của series; phần 2 (kết quả và các nút thắt đã gỡ): Achievers 2023. Blog Medium custom domain, không có bản Wayback; đọc qua trình duyệt, raw/ chỉ là placeholder.

Bối cảnh

  • Achievers chạy nền tảng Kubernetes nhiều cụm; đội SRE cần một framework để engineer tự tạo tải và đọc kết quả, vì nền tảng phải chịu được cả traffic dự đoán trước lẫn bất ngờ.
  • Monolith cũ đã dùng JMeter nhiều năm, nhưng viết test và xuất báo cáo theo ý muốn bằng JMeter quá phức tạp để mọi người cùng đóng góp.

Thay đổi chính

  • Tiêu chí trước, công cụ sau: mỗi lần chạy đo theo bốn trục: throughput (request/giây), lỗi, latency, khả năng scale khi tải tăng. Người đọc kết quả phải biết ngay hiệu năng tốt lên hay xấu đi và nhìn vào số nào.
  • Công cụ: chọn k6 (test viết bằng JavaScript, có gRPC nên gọi thẳng service chứ không chỉ qua gateway).
  • Phạm vi: chỉ backend; bỏ API bên thứ ba (nút thắt ngoài tầm và có thể làm hại họ), bỏ CDN và media (đắt, end-to-end test đã phủ); để ý chi phí log, egress, compute khi bơm tải.
  • Nơi chạy: nhắm môi trường pre-production; bộ sinh tải chạy trên một cụm Kubernetes riêng, nằm ngoài mạng của cụm ứng dụng để giống user bên ngoài, có nodepool riêng để tải không bị nghẽn bởi workload khác, chia virtual user ra nhiều worker. Mục tiêu dài hạn: chạy trong pipeline CI/CD.
  • Baseline: vài lần thử đầu dùng để trả lời "hôm nay chịu được bao nhiêu virtual user, muốn bao nhiêu", "nút thắt đã biết", "ngưỡng là gì".
  • Threshold lấy từ SLO sẵn có: endpoint có SLO khả dụng 99% thì tỉ lệ lỗi trong lúc test không được quá 1%; vượt là test fail. Ngoài ngưỡng còn đặt mục tiêu cho từng tiêu chí để đo tiến bộ khi gỡ nút thắt.

Vì sao

  • Theo Achievers, phản hồi chậm, cạn tài nguyên và downtime làm user không hài lòng; load test chứng minh nền tảng ổn định dưới tải nặng và phục hồi nhanh.

Bài học cho SWE

  • Ngưỡng pass/fail của load test nên suy ra từ SLO, không đặt tay: khi đó kết quả test và cam kết vận hành nói cùng một ngôn ngữ.
  • Bộ sinh tải cần tài nguyên và mạng riêng, đặt ở vị trí giống user thật; phần 2 cho thấy chính bộ sinh tải cũng có nút thắt.

Liên quan