Production testing with dark canaries
Bài tóm tắt LinkedIn 2020 3. Quy mô lớn Độ khó: Trung bình
LinkedIn · 2020 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Bối cảnh
- Code ở LinkedIn có thể lên production trong vòng một giờ, nhiều lần mỗi ngày; code, config hay model AI xấu vẫn gây sự cố dù có unit và integration test. Một số thứ (bộ nhớ, CPU/GPU, concurrency, latency) chỉ đo đúng bằng dữ liệu và lưu lượng production.
- Record-and-replay không hợp khi model AI mới cần input feature khác nhau mỗi ngày.
Thay đổi chính
- Dark canary: instance nhận bản sao traffic của instance thật, response bị bỏ, nên người dùng không bị ảnh hưởng dù dark canary lỗi hay chậm. Chỉ nhân bản request đọc không có side effect; side effect (đếm lượt xem, tracking event, gọi xuống service khác) phải được nhận ra và chặn hoặc ghi chỗ khác. Bài nhắc chi phí: một request có thể kéo theo hàng trăm request phía dưới.
- 2013: bản đầu trong Rest.li nhân bản từ một host sang một host, mapping host-host trong ZooKeeper dựng bằng script Python. Khi thêm data center, dùng ở cả mid-tier và frontend, và instance co giãn động, mapping hỏng mỗi khi host bị thay và phải dựng lại tay ở mọi DC.
- Dark canary cluster: đưa vào D2 (service discovery của Rest.li) như tính năng hạng nhất: ZooKeeper lưu mapping cụm nguồn → các cụm dark và hệ số nhân. Filter request đầu vào đọc mapping và fork request.
- Giữ QPS mỗi instance tương đương: vì D2 biết số instance của cả hai cụm, mỗi instance thật gửi tỉ lệ = QPS vào × multiplier × (số instance dark / số instance thật). Thêm instance dark thì tổng traffic dark tăng nhưng tải mỗi instance dark giữ nguyên; co giãn cụm nào cũng không làm quá tải dark.
- Hướng tới: tự động onboard, test model AI trên cụm dark, so sánh tự động instance dark với instance thật.
Vì sao
- Mapping theo host không sống nổi với hạ tầng co giãn; đặt fork vào lớp discovery mà mọi service đã dùng thì vừa bền vừa quen với dev.
Bài học cho SWE
- Shadow traffic chỉ an toàn khi kiểm soát được side effect; phải liệt kê mọi chỗ ghi và mọi call xuống dưới.
- Tính tỉ lệ fork theo số instance hai phía để so sánh được metric từng instance và không làm quá tải cụm nhỏ.
Liên quan
#Dark canary#traffic forking#shadow traffic#read-only side effects#Rest.li#D2#ZooKeeper#dark cluster#multiplier#per-instance QPS#AI model validation
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (4)