A Smarter Way to Deploy Data Pipelines
Bài tóm tắt Doximity 2025 2. Tăng trưởng Độ khó: Dễ
Doximity · 2025 · 2. Tăng trưởng · Độ khó: Dễ — bài gốc
Bối cảnh
- Gần 20 team dữ liệu của Doximity dùng Airflow điều phối hơn 900 DAG đang chạy, hàng chục lần cập nhật mỗi ngày (2025). Airflow chạy trên EC2 bằng Docker Compose, dự định chuyển sang EKS.
- Cách deploy cũ: build DAG vào image Airflow trong CI/CD, gần 20 phút mỗi lần, mỗi thay đổi của bất kỳ team nào kích hoạt rebuild toàn bộ; muốn nhận thay đổi phải khởi động lại scheduler và webserver theo lịch, UI trả 503 trong lúc đó. Tổng độ trễ deploy 20–40 phút.
- Ba cách Airflow khuyên: build vào image (đang dùng), git-sync (khó với nhiều repo cho một Airflow trung tâm), mount volume (không nói cách đồng bộ vào volume). Đề xuất "Remote DAG Fetcher" (AIP-5) của cộng đồng đã bị bỏ.
Thay đổi chính
- Xuất bản DAG: CI đóng gói DAG của project lên S3, ghi metadata vào hai file YAML: project catalog (lịch sử mọi phiên bản: tên, version, đường dẫn S3, ngày tạo; chỉ append) và Airflow manifest (project nào đang được deploy ở phiên bản nào; sửa tại chỗ).
- Đồng bộ DAG: service nhỏ chạy mỗi phút tải manifest, so với volume đang mount: project mới thì tải về, project có phiên bản mới thì thay, project bị bỏ khỏi manifest thì xoá. Chạy dạng sidecar cho DAG processor và cho worker Celery (sống lâu); với Kubernetes executor (worker tạm) thì dùng init container tải đúng DAG cần trước khi task chạy.
- Lưu metadata deploy trong file trên S3 thay vì một database, để đơn giản.
Kết quả (theo Doximity)
- Độ trễ deploy từ 20–30 phút xuống khoảng một phút; không còn rebuild image hay khởi động lại dịch vụ để nhận DAG mới; tách khỏi chi tiết của Airflow nên dễ mang sang EKS.
Vì sao
- Code của người dùng (DAG) và runtime của nền tảng (image Airflow) thay đổi ở nhịp khác nhau; đóng gói chung bắt cái chậm theo cái nhanh. Tách chúng bằng artifact có phiên bản + manifest khai báo trạng thái mong muốn (Pipeline dữ liệu và analytics, Deploy và release an toàn).
Bài học cho SWE
- Khi deploy một thứ nhỏ bắt rebuild một thứ lớn, tách chúng ra thành artifact riêng.
- Manifest (trạng thái mong muốn) + vòng reconcile định kỳ là cách deploy đơn giản và tự sửa.
- Lịch sử phiên bản append-only cho phép rollback bằng cách sửa manifest.
Liên quan
- Doximity 2026 · Gojek 2020 · Shopify 2022 · Slack 2026 (bake sẵn vs đồng bộ lúc chạy)
- Pipeline dữ liệu và analytics · Deploy và release an toàn
#Airflow#DAG deploy#S3#Manifest#Project catalog#Sync sidecar#Init container#Celery executor#Kubernetes executor#Image rebuild
Được nhắc tới trong
Công ty (1)