LinkedOut: A Request-Level Failure Injection Framework
Bài tóm tắt LinkedIn 2018 3. Quy mô lớn Độ khó: Trung bình
LinkedIn · 2018 · 3. Quy mô lớn · Độ khó: Trung bình — bài gốc
Đi sâu vào LinkedOut, công cụ đã giới thiệu ngắn trong LinkedIn 2017.
Bối cảnh
- Mục tiêu: biết một trang xuống cấp ra sao khi service phía dưới hỏng, thử ngay trên production mà không làm member hay khách bị ảnh hưởng. Cách mịn nhất là inject lỗi theo từng request.
Thay đổi chính
- Disruptor filter trong Rest.li (một phần mở mã nguồn), ba kiểu lỗi: error (ném exception như resource không có, có thể kèm trễ), delay, timeout (chờ đúng timeout cấu hình trong D2 rồi ném).
- Hai cách kích hoạt:
- LiX (hệ A/B và feature gate): nhắm từ một request của một member tới một tỉ lệ member của cả cụm phía dưới.
- Invocation context (IC): cặp khoá-giá trị đi theo request qua mọi service; thêm schema dữ liệu disruption để lỗi xảy ra ngay cho request đó.
- Web app (Flask + Ember):
- Kiểm thử tự động: một service account có quyền vào mọi sản phẩm; Celery + Redis chia việc thử từng service phía dưới (theo dữ liệu call tree) cho các worker; Selenium tải trang với lỗi gắn qua cookie (chỉ chạy trong mạng nội bộ). Coi là không xuống cấp mềm nếu trang khớp mẫu trang "oops" hoặc trang trắng. Báo cáo đầy đủ và báo cáo chênh lệch (lỗi mới, hồi quy).
- Ramp theo targeting: người dùng định nghĩa failure plan rồi nhắm vào nhân viên đã opt-in (ký EULA) để CEO không tưởng site cháy. Nút "terminate" tắt experiment LiX, lỗi dừng sau vài phút.
- Chrome extension: dùng service Call Tree (dựng cây gọi từ event Kafka mà mỗi service phát) để liệt kê mọi service mà trang chạm, chọn service cần làm hỏng, tải lại trang.
- Bài học từ service account: test trang Profile Views báo mọi lỗi phía dưới đều làm hỏng trang; thực ra tài khoản test không có kết nối nên trang lỗi sẵn. Kế hoạch: cho người dùng mang tài khoản test có dữ liệu của mình.
Vì sao
- Dùng hệ targeting đã phổ biến (LiX) thay vì ZooKeeper hay cơ chế mới giảm chi phí học và không thêm hệ trùng lặp; logic lỗi phía client thì bật bằng một lần nâng version.
Bài học cho SWE
- Chaos ở mức request + targeting theo người dùng cho phép thử trên production với blast radius gần bằng không.
- Tiêu chí "xuống cấp mềm" cần định nghĩa riêng; mã 200 không có nghĩa trang ổn.
- Tài khoản test không giống người dùng thật; kết quả có thể sai vì dữ liệu test nghèo.
Liên quan
- LinkedIn 2017 · LinkedIn 2020 (LiX) · LinkedIn 2015 (call graph từ tracing)
- Kiểm thử độ tin cậy (chaos, fault injection, mô phỏng tất định)
#Failure injection#LinkedOut#Rest.li disruptor filter#error/delay/timeout#LiX targeting#invocation context#Call Tree#Celery#Selenium#service account#opt-in EULA#Chrome extension
Được nhắc tới trong
Công ty (1)
Bài tóm tắt (3)