Kỹ sư dữ liệu · Bước 6/8 · 8 phút
Điều phối và DAG
Hiểu cách pipeline được lên lịch, sắp thứ tự, chạy lại và theo dõi.
Vì sao cần công cụ điều phối
Một script chạy theo hẹn giờ vẫn ổn cho đến khi bạn có hai mươi cái. Lúc đó các tác vụ phụ thuộc lẫn nhau, có cái lỗi, có cái cần chạy lại cho thứ Ba tuần trước, và bạn cần biết cái gì đã chạy, lúc nào. Công cụ điều phối (orchestrator) lo việc này.
Apache Airflow là cái tên nổi tiếng nhất, và Airflow 3 là phiên bản lớn hiện tại. Dagster và Prefect là các lựa chọn phổ biến khác, và các nhà cung cấp cloud có bản dịch vụ quản lý sẵn.
DAG
Các orchestrator mô tả công việc dưới dạng DAG, đồ thị có hướng không chu trình (directed acyclic graph). Có hướng nghĩa là mỗi mũi tên chỉ một chiều: extract trước rồi mới transform. Không chu trình nghĩa là không có vòng lặp, nên công việc luôn có điểm kết thúc.
Mỗi ô trong đồ thị là một tác vụ (task). Orchestrator chạy một task khi các task trước nó thành công, và có thể chạy song song các task độc lập.
Chạy lại, backfill và cảnh báo
Mạng chập chờn và API hết thời gian chờ, nên task nên tự thử lại vài lần, có khoảng nghỉ. Backfill là chạy lại pipeline cho các ngày trong quá khứ, ví dụ sau khi sửa lỗi. Backfill chỉ an toàn khi task có tính luỹ đẳng và nhận ngày chạy làm đầu vào thay vì tự lấy ngày hôm nay.
Cảnh báo báo cho một người biết khi có gì đó lỗi hẳn. Gửi chúng đến nơi mọi người thật sự xem, và giữ số lượng ít, nếu không sẽ bị phớt lờ.
Giữ task nhỏ và đơn giản
Để orchestrator lo lên lịch và theo dõi. Phần xử lý nặng nên để trong kho dữ liệu hoặc một engine xử lý, không nhét vào chính orchestrator. Task nhỏ với đầu vào và đầu ra rõ ràng dễ chạy lại và dễ gỡ lỗi hơn.
Thử ngay
Vẽ và rà soát một DAG
- 1.Liệt kê các task trong pipeline của bạn ở bước 3, mỗi dòng một task.
- 2.Vẽ mũi tên thể hiện task nào phải xong trước khi task khác bắt đầu.
- 3.Hỏi chatbot bằng câu lệnh bên dưới và so sánh DAG của nó với của bạn.
Đây là các task trong pipeline hằng ngày của tôi: [danh sách]. Sắp xếp chúng thành một DAG, chỉ ra task nào chạy song song được, và với mỗi task cho biết nên thử lại bao nhiêu lần và có backfill an toàn không. Sau đó viết một DAG Apache Airflow 3 tối giản bằng Python, và cho biết phần nào tôi nên đối chiếu với tài liệu chính thức.