Architecting Restaurant Wait Time Predictions

Bài tóm tắt Yelp 2019 2. Tăng trưởng Độ khó: Trung bình

Yelp · 2019 · 2. Tăng trưởng · Độ khó: Trung bình — bài gốc

Bối cảnh

  • Yelp Waitlist cho khách xếp hàng online ở nhà hàng không nhận đặt chỗ; mỗi lần xếp hàng, một model dự đoán thời gian chờ. Hệ phải bám trạng thái hiện tại của nhà hàng (bao nhiêu người đang chờ, giờ đóng cửa) và chịu QPS cao.
  • Hai thách thức: phục vụ dự đoán online từ một model train bằng Spark trong một service Python; và nhà hàng mới chưa có dữ liệu (cold start).

Thay đổi chính

  • Ba phần: pipeline train offline (Python + Spark trên Redshift, hàng chục triệu mẫu), phục vụ online, và analytics báo cáo hiệu năng model.
  • Phục vụ: service online viết bằng Python lấy feature từ kho online (Cassandra cho kết quả ETL Spark, MySQL cho trạng thái nhà hàng) rồi gọi model server Java nội bộ (thư viện XGBoost Java đã tối ưu cho latency). Online không dùng Spark, nên cách xử lý dữ liệu khác offline.
  • Feature-set blueprint: định nghĩa tập feature (thành phần, kiểu) để offline và online sinh vector giống hệt nhau (ví dụ thứ tự cột one-hot).
  • XGBoost dự đoán được với feature thiếu, nên nhà hàng mới vẫn có ước lượng, train lại thì tốt dần.
  • Quy trình phát hành: đánh giá offline với metric nghiệp vụ (ví dụ tỉ lệ khách chờ quá 5 phút so với ước lượng) → dark launch (model ứng viên thấy request thật, sinh dự đoán nhưng không hiện cho khách; vài ngày là biết offline và online có cho cùng kết quả không, latency có vượt SLO không) → rollout chậm. Cùng lúc có vài model chạy thật, vài model dark, vài model đang phát triển.
  • Vòng phản hồi: ước lượng hiện cho khách làm đổi giờ khách tới, nên nhãn (thời gian chờ thật) bị chính dự đoán ảnh hưởng; dark launch không bắt được hiệu ứng này nên phải rollout chậm.

Vì sao

  • Tách huấn luyện (Spark) khỏi phục vụ (Python + Java) làm phát sinh nguy cơ lệch feature; dark launch là cách rẻ để kiểm hai đường cho cùng kết quả trên traffic thật.

Bài học cho SWE

  • Một định nghĩa tập feature dùng chung giữa train và serve chặn được loại lỗi lệch thứ tự, kiểu.
  • Dark launch kiểm được tính đúng và latency, nhưng không kiểm được hiệu ứng của dự đoán lên hành vi người dùng; phần đó cần rollout dần.

Liên quan