The Ultimate Load Test

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

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

Bối cảnh

  • Swipe Night (video tương tác) ra mắt ở Mỹ tối Chủ nhật 6/10/2019, chỉ trong khung 18h–24h. Thường Tinder rollout dần từ thị trường nhỏ, nhưng lần này phải bí mật và mở cho tất cả cùng lúc.
  • Nhiều đợt push notification toàn quốc sẽ tạo đỉnh tức thời; autoscaler của Tinder là kiểu phản ứng, hợp với thay đổi dần, không hợp với đỉnh nhọn.
  • Ước lượng ban đầu 1,2 lần traffic Chủ nhật bình thường; mục tiêu chịu được 3 lần.

Thay đổi chính

  • Môi trường test 1/30 production (cả Kubernetes lẫn Dynamo), cố ý tắt autoscaler của Dynamo để lộ điểm yếu khi tải nhọn. Thêm khả năng tạo tài khoản tự động; JMeter đăng nhập và mô phỏng hành vi, chạy trong pod Kubernetes vì máy local không đủ tải.
  • Theo lớp: trước hết test từng service được gọi khi mở app, sửa thứ hỏng đầu tiên (Dynamo throttle, socket treo) rồi chạy lại tới khi chịu 3 lần; sau đó test riêng các service downstream dùng chung, vì test từng module công khai chỉ đẩy vào chúng một phần tải tổng. Kết quả: thêm vài cache, danh sách việc cần làm ở production.
  • Đội đã có cách riêng thì dùng traffic thật: đội recommendation vốn rẽ một phần nhỏ request sang cụm Elasticsearch thu nhỏ để thử thuật toán; chỉ cần tăng tỉ lệ rẽ lên quá 3 lần.
  • Tính năng mới không có lịch sử traffic: đường ghi Dynamo → Dynamo stream → Kafka → cập nhật Elasticsearch phải đủ nhanh để người xem xong được gợi ý người cùng tham gia. Họ gửi request fire-and-forget từ một service lúc mở app (12 call trong 3 phút cho mỗi người) để giả lập người xem, có kill switch và tăng dần 1% → 10% → 25% → 100% trong khi theo dõi p50/p90/p99. Kết luận: chịu được mức dự kiến, tới 4 lần thì chậm và cần scale.
  • Diễn tập cuối: gửi push thật tới mọi người dùng ở Mỹ trong 5 phút, có kỹ sư nhiều team trực. Vài bảng Dynamo vượt burst capacity và bị throttle; autoscaler Dynamo mất 10 phút để phản ứng, nên cần làm nhanh hơn.

Vì sao

  • Traffic ngày ra mắt vượt xa ước lượng ban đầu, với các đỉnh theo push; ra mắt suôn sẻ vì đã chuẩn bị (theo Tinder).

Bài học cho SWE

  • Tải tự gây ra (push notification) là đỉnh nhọn mà autoscaler phản ứng không kịp: phải scale trước hoặc kiểm tốc độ phản ứng của autoscaler.
  • Test từng service riêng đánh giá thấp tải lên service dùng chung ở downstream; cần một vòng test theo tổng tải.
  • Dùng traffic production có kill switch và tăng theo bậc để đo đường dữ liệu bất đồng bộ của tính năng mới.

Liên quan