Finding Order in Chaos: How We Automated Performance Testing with Torque

Bài tóm tắt Dream11 2021 3. Quy mô lớn Độ khó: Trung bình

Dream11 · 2021 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc

Bài chi tiết về framework Torque; Dream11 2021 kể cách dùng nó trong game day trước mùa IPL.

Bối cảnh

  • IPL 2020: hơn 5,5 triệu user đồng thời, có service nhận hơn 80 triệu request/phút.
  • Phải benchmark hơn 100 microservice (Java, Scala, Node; MySQL, Cassandra, Aerospike, Kafka); traffic trước và sau giờ bắt đầu trận khác hẳn nhau, dồn áp lực vào các nhóm hệ khác nhau; mục tiêu tải gấp 5 lần bình thường (có service hơn 100 triệu RPM); dữ liệu test cỡ GB.
  • Tới IPL 2019, performance test rời rạc: JMeter, Rundeck, shell script.

Thay đổi chính

  • Torque: framework trung tâm, test viết bằng code (Gatling, Scala), mỗi service mới thêm một module; chạy qua Jenkins job nên ai cũng dùng được (SDET, dev, DevOps) mà không cần hiểu bên trong.
  • Quy trình một lần chạy: Jenkins → Terraform + Ansible dựng EC2 sinh tải và deploy code → các generator giành khoá Redis (Redisson) → generator thắng lấy dữ liệu, đẩy lên S3, gọi Lambda (hoặc Spark nếu 100–200 triệu dòng, vượt giới hạn Lambda) chia file theo số generator và ghi đường dẫn vào Redis → mỗi generator tải phần dữ liệu riêng rồi bơm tải; báo tiến độ qua Slack.
  • Tái dùng: cùng định nghĩa cho smoke, performance, functional test và nhiều mô hình tải (soak, spike); số generator tuỳ chỉnh theo tải cần.

Vì sao

  • Kết quả mùa IPL (theo Dream11): test cho hơn 150 API, hơn 1.500 lần chạy tải, hơn 50 service quan trọng được benchmark ở 5 lần tải bình thường, mô phỏng trọn ngày thi đấu; không có sự cố do scale ở production.

Bài học cho SWE

  • Ở quy mô cần nhiều máy sinh tải, phần khó là điều phối: chia dữ liệu duy nhất cho từng generator, dựng và dọn hạ tầng; đáng làm thành dịch vụ dùng chung.
  • Mô hình tải phải theo hình dạng traffic thật của sự kiện (trước/sau giờ trận), không chỉ một con số RPM.

Liên quan