Airflow, một nền tảng nguồn mở, được dùng để sắp xếp, phát triển, lập lịch và giám sát các workflows. Shopify đã sử dụng Airflow trên production trong hai năm cho nhiều workflows khác nhau, bao gồm trích xuất dữ liệu, machine learning model training, bảo trì các bảng trong Apache Iceberg và data modeling với DBT.
Với việc scale nhanh các workflows chạy trên Airflow, Shopify đã gặp phải một số thách thức, bao gồm việc truy cập file chậm, thiếu khả năng kiểm soát đối với các DAGs, lưu lượng traffic không đồng đều và tranh chấp tài nguyên giữa các workflows.
Qua bài viết, tác giả muốn chia sẻ một số bài học Shopify đã học được và các giải pháp họ đã xây dựng để vận hành Airflow trên quy mô lớn:
- Khi số lượng các file DAG tăng lên đáng kể, tốc độ truy cập và parse các files này ở Airflow Scheduler sẽ bị ảnh hưởng đáng kể. Việc lưu trữ trên Cloud Storage (GCS, S3) là một giải pháp phổ biến, tuy nhiên cần một thiết kết hợp lý cho quá trình sync files từ Cloud đến môi trường nơi Airflow chạy. Sự kết hợp giữa Cloud Storage (GCS, S3) và NFS cho phép quản lý tệp hiệu quả và dễ sử dụng.
- Cần xác định retention policy (thời gian tồn tại) cho metadata của Airflow. Khi có nhiều DAGs và chạy được một thời gian dài trên Airflow, lượng metadata lưu trong SQL database sẽ tăng lên đáng kể. Việc này ảnh lượng tiêu cực đến performance của Airflow, đặc biệt đối với Airflow Web-server và quá trình upgrade Airflow.
- Khi chạy Airflow trong môi trường multi-tenant, điều quan trọng là có thể xác định ownership của một DAG, điều này giúp chúng ta dễ dàng tìm ra owner khi một DAG có vấn đề xảy ra. Lưu trữ DAG ở chung một Git repo có thể dễ dàng tìm ra owner thông qua Git blame. Tuy nhiên việc này sẽ cản trở sự chủ động trong quá trình release của từng team. Một giải pháp Shopify đưa ra là Airflow Namespaces. Users phải đăng kí namespace cho DAGs của họ thông qua một file YAML.
- Các policies cho Airflow DAGs rất hữu ích để thực thi các tiêu chuẩn và giới hạn của các jobs. Shopify tạo ra các policies để validate các DAGs, giúp nâng cao tiêu chuẩn và chất lượng cho các DAGs, từ đó khi chúng chạy ổn định, tối ưu hơn.
- Việc đảm bảo schedule workloads một cách đồng đều là rất khó đặc biệt khi chúng ta có khuynh hướng schedule job các khung giờ tròn và có nhiều DAG được tạo tự động. Điều này tạo ra một lượng lớn traffic trong một khoảng thời gian ngắn, có thể làm quá tải Airflow Scheduler. Để giải quyết vấn đề này, Shopify sử dụng khoảng thời gian lịch biểu ngẫu nhiên để xác định cho tất cả các DAG được tạo tự động.
- Có rất nhiều điểm có thể xảy ra tranh chấp tài nguyên trong Airflow, việc sử dụng các tính năng có sẵn như Pools, Priority Weight, Celery Queues, Isolated Workers, … rất hữu ích cho việc quản lý tài nguyên.
(by MS)