Parallel Run Pattern - A Migration Technique in Microservices Architecture
Bài tóm tắt Zalando 2021 4. Điều chỉnh Độ khó: Dễ
Zalando · 2021 · 4. Điều chỉnh · Độ khó: Dễ — bài gốc
Bối cảnh
- Ở Zalando microservices là chuẩn, nhưng theo bài: "microservice hôm qua thành monolith hôm nay". Team Returns phải tách logic trả hàng ra khỏi một monolith sắp thành legacy.
- Vì sao test là chưa đủ: đọc code cũ dễ sót logic; có phần không có test; ứng dụng quan trọng nên không được downtime.
Thay đổi chính
Parallel Run (theo Sam Newman): gọi cả hai bản cài đặt, so sánh kết quả, nhưng chỉ một bên là nguồn sự thật (bên cũ) cho tới khi bên mới đáng tin.
-
Luồng:
- Monolith trả lời client ngay (không làm chậm user);
- sau đó POST bản sao request + response sang endpoint
/consistency-checkscủa service mới, nhận ngay 202 (xử lý bất đồng bộ, monolith không phải chờ); - service mới tự gọi endpoint thật của chính nó, so sánh với response của monolith, phát metric và log.
-
Metric theo từng endpoint (Prometheus/Grafana):
- matched;
- unmatched (khác status, header hoặc body);
- failed (lỗi tạm thời 5xx, không tính).
Mỗi endpoint có ngưỡng nhất quán riêng, vì sửa vài phần trăm cuối thường tốn hơn giá trị nó mang lại.
-
Rollout: chuyển từng endpoint qua proxy Skipper (mã nguồn mở của Zalando); rollback chỉ cần đổi proxy, không phải deploy lại.
-
Dọn dẹp: gỡ ~700 dòng code và ~1.300 dòng test của cơ chế so sánh.
Vì sao (ưu và nhược theo Zalando)
- Ưu: test bằng dữ liệu thật; rollout và phát triển theo từng endpoint; rollback dễ; lộ cả bug của monolith; biết được hiệu năng thật của service mới trước khi chạy chính thức.
- Nhược:
- tải tăng (có thể gấp đôi);
- phải tinh chỉnh phép so sánh (bỏ qua header không liên quan; PDF khác metadata; thứ tự collection khác nhau);
- GDPR: không được lưu dữ liệu cá nhân, nên khó điều tra chỗ lệch;
- chỉ dùng được cho endpoint idempotent;
- tốn công dựng, không phải cách làm nhanh.
Bài học cho SWE
- Cùng họ với shadow traffic của Grab (Grab 2016) và Scientist của GitHub (GitHub 2021). Điểm thêm của Zalando: gửi bất đồng bộ sau khi đã trả lời, nên không thêm latency cho user.
- Đặt ngưỡng nhất quán theo từng endpoint, không đòi 100% ở mọi nơi.
- Ràng buộc pháp lý (GDPR) cũng ảnh hưởng tới kỹ thuật migration.
- Theo Zalando, chỉ đáng làm khi phần thay đổi có rủi ro cao.
Liên quan
Được nhắc tới trong
Công ty (1)