Managing hundreds of servers for load testing: autoscaling, custom monitoring, DevOps culture
Bài tóm tắt Miro 2020 2. Tăng trưởng Độ khó: Cơ bản
Miro · 2020 · 2. Tăng trưởng · Độ khó: Cơ bản — bài gốc
Bài 2; bài 1 (kịch bản thực tế, cụm JMeter, pgreplay): Miro 2020.
Bối cảnh
- Mỗi lần test dùng khoảng 100 server sinh tải và 150 server chạy service (2020); tất cả phải được tạo, cấu hình, khởi động, xoá.
Thay đổi chính
- Dùng cùng công cụ với production: Terraform tạo/xoá môi trường, Ansible cấu hình và khởi động, script Python tự viết để scale theo tải; cả quy trình gói trong sáu lệnh.
- Autoscale trong test giống production: board server và API server tự scale (ví dụ 4 lúc đầu, tới 40 ở đỉnh), chỉ thêm server khi server hiện có đã đầy (ví dụ CPU 50%). Lợi ích phụ: test cho biết cần bao nhiêu capacity cho mức user production chưa từng gặp.
- Monitoring của test = monitoring của production (ELK, Prometheus, Grafana, cùng metric): khỏi dựng hệ mới, và đồng thời kiểm chính monitoring: nếu lúc test thiếu dữ liệu để phân tích một vấn đề thì khi vấn đề đó xảy ra ở production cũng sẽ thiếu.
- Báo cáo chuẩn hoá ở một chỗ: đặc tả môi trường, kịch bản dạng đọc được, kết quả cho cả dev lẫn quản lý, biểu đồ nút thắt; tự sinh qua API công khai của chính Miro để so sánh giữa các lần chạy.
- IaC để team tự viết load test: khi đội dev tăng nhanh, không còn ai nắm cả sơ đồ production và tài liệu lỗi thời, nên team không thiết kế được test. Code hạ tầng thay tài liệu; test DB ở bài 1 được chuyển thành script dựng môi trường trong bảy phút trên một tài khoản AWS trống. Dùng OpenStack thay AWS khi được để tiết kiệm.
Vì sao
- Theo Miro, chất lượng là trách nhiệm của cả team, không riêng QA; load test chỉ thành quy trình thường xuyên khi team thấy mình chịu trách nhiệm cho production.
Bài học cho SWE
- "Nếu load test qua dễ dàng, có thể nó viết sai": muốn biết test đúng phải hiểu production, và IaC là cách để team tự hiểu.
- Dùng load test để kiểm luôn observability: thiếu dữ liệu lúc test là thiếu dữ liệu lúc sự cố.
Liên quan
Được nhắc tới trong
Chủ đề (1)
Công ty (1)
Bài tóm tắt (1)