Part 13 · CI/CD, Git & Cloud
15 tình huống deploy nhiều microservice
Mỗi câu phải xét mixed versions, schema/data compatibility, rollback window và deployment evidence.
1. v2 cần column mới nhưng v1 pods vẫn chạy?
Expand schema trước bằng nullable/default-compatible column. v2 đọc/write tương thích; backfill và contract sau khi v1 biến mất.
2. Rename column trong migration làm v1 fail?
Không rename trực tiếp. Add new column, dual-compatible read/write, backfill, switch, rồi drop old ở release sau.
3. Jenkins có cần deploy tất cả service cùng lúc?
Không. Mỗi service có artifact/pipeline riêng. Deploy downstream capability trước, upstream usage sau qua compatibility và feature flag.
4. API mới thêm request field bắt buộc?
Provider phải default/derive hoặc tạo version mới; deploy consumer support theo staged rollout. Không làm old callers fail giữa rollout.
5. Producer event v2 deploy trước consumer v2?
Chỉ khi schema additive/tolerant. Breaking event cần publish v1/v2 song song rồi migrate consumers và retire v1 theo telemetry.
6. Backfill 500 triệu rows giữ pipeline nhiều giờ?
Tách thành workflow riêng: batches, checkpoint, throttle và resume. App vẫn chạy trên schema compatible; monitor DB/replica lag.
7. Flyway chạy trên mọi pod cùng lúc?
Lock có thể serialize nhưng startup/readiness khó đoán. Migration rủi ro/lâu nên singleton Job/pipeline stage; migration nhỏ vẫn phải compatible.
8. Canary v2 lỗi nhưng đã write format dữ liệu mới?
Rollback image chỉ an toàn nếu v1 đọc được format mới. Nếu không, stop rollout và forward fix/data conversion; đây là lý do dual-read compatibility.
9. Contract migration drop column chạy quá sớm?
Old pods fail. Contract phải dựa inventory/telemetry xác nhận không consumer cũ, sau rollback window và approval riêng.
10. Feature cần Order v2 và Inventory v2?
Inventory v2 deploy trước nhưng giữ API cũ; Order v2 deploy flag off; canary flag rồi retire old API sau. Không cần atomic deployment.
11. Pod v1 đang xử lý request khi bị terminate?
Mark unready, drain LB, preStop/grace period và idempotent retry. Long request cần deadline/cancellation rõ.
12. Consumer pod bị kill trước ack?
Message redelivery; Inbox/idempotent effect. Stop polling và drain; visibility timeout/ack semantics phải phù hợp.
13. maxUnavailable=0 có bảo đảm zero downtime?
Không. Readiness sai, insufficient surge capacity, schema incompatibility hoặc downstream saturation vẫn gây downtime.
14. Shared library breaking change trong monorepo?
Publish compatible version, dependency graph fan-out tests và consumers upgrade độc lập. Shared library không được ép lockstep deployment.
15. Khi nào chấp nhận maintenance window?
Khi invariant/destructive migration không thể giữ online an toàn và planned downtime ít rủi ro hơn. Cần backup, rehearsal, fencing và communication.
Follow-up chung
- Trong rollout có version nào cùng tồn tại?
- Old code đọc được data mới không?
- Rollback cutoff nằm ở đâu?
- Contract removal dựa evidence nào?
- Canary gate có business metric gì?