معرفی
آپاچی ایرفلو (Apache Airflow) یک ابزار متنباز برای تعریف، زمانبندی و پایش گردشکارها (Workflows) است. در ایرفلو، مراحل یک فرایند به شکل یک گراف جهتدار غیرمدور یا همان DAG تعریف میشوند. بنابراین تیم مشخص میکند هر وظیفه چه زمانی اجرا شود، به کدام وظایف وابسته است و در صورت بروز خطا چه رفتاری داشته باشد.
کاربرد اصلی ایرفلو در مهندسی داده، هماهنگکردن مراحل خط لوله داده است. برای نمونه استخراج روزانه داده از API، انتقال آن به فضای ذخیرهسازی، اجرای تبدیلها، کنترل کیفیت داده و بهروزرسانی گزارشها. ایرفلو معمولاً خودِ پردازش سنگین داده را انجام نمیدهد، بلکه اجرای ابزارها و اسکریپتهای مسئول پردازش را مدیریت و ارکستریت میکند.
ایرفلو زمانی انتخاب مناسبی است که چند Job وابسته و تکرارشونده دارید، شکست هر مرحله باید قابل ردیابی باشد و اجرای دوباره یک بازه تاریخی (Backfill) اهمیت دارد. برای مثال، میتواند اجرای Jobهای Apache Spark را هماهنگ کند، داده را از PostgreSQL بخواند یا در آن بنویسد، و پس از آمادهشدن دادههای Kafka مرحلهای دیگر را آغاز کند.
معیار انتخاب
ایرفلو فقط یک کتابخانه ساده Python نیست و بهرهبرداری پایدار از آن به استقرار و نگهداری Scheduler، پایگاه داده فراداده (Metadata DB)، Executor و محل ثبت لاگها نیاز دارد. تیم همچنین باید ظرفیت اجرا، ارتقای نسخه، دسترسیها، هشدارها و بازیابی خطاها را مدیریت کند. اجرای آن با Docker برای محیط توسعه و استقرار آن روی Kubernetes برای مقیاسپذیری و مدیریت چند اجراکننده رایج است، اما هر دو گزینه به دانش عملیاتی اضافه نیاز دارند.
این سربار معمولا برای تیمی موجه است که چندین خط لوله مهم، وابستگیهای پیچیده، اجرای زمانبندیشده و نیاز جدی به مشاهدهپذیری دارد. برای یک یا چند اسکریپت ساده روزانه، راهکار سبکتر ممکن است هزینه نگهداری کمتری داشته باشد. Prefect میتواند برای تیمهایی مناسب باشد که تجربه توسعهدهنده و اجرای منعطفتر گردشکارها را میخواهند. Dagster برای تیمهایی که بر داراییهای داده، کیفیت و مشاهدهپذیری آنها تمرکز دارند، گزینه قابل بررسی است. ابزارهای رویدادمحور و پردازش جریانی نیز برای جریانهای با تأخیر کم مناسبتر از زمانبندی دورهای ایرفلو هستند.
تمایز با ابزارهای CI/CD و وضعیت بازار کار
Jenkins در فهرست گزینههای قابل بررسی آمده است، اما جایگزین مستقیم ایرفلو برای ارکستراسیون داده نیست. Jenkins عمدتا برای یکپارچهسازی و تحویل مستمر نرمافزار مناسب است؛ مثلاً ساخت، تست و انتشار یک سرویس. اگر مسئله اصلی شما وابستگی زمانی داده، Backfill و پایش DAGها است، ایرفلو گزینه مناسبتری محسوب میشود.
مهندسان داده، تیمهای تحلیل داده، مهندسان یادگیری ماشین و تیمهای پلتفرم از ایرفلو استفاده میکنند. در ایران نیز عنوان «مهندس داده» برای نقشهای مرتبط با خط لوله داده رایج است، اما این معرفی ادعای الگوی استخدامی یکسان برای همه شرکتهای ایرانی ندارد. در آگهیها و پروژههای واقعی، نیاز به ایرفلو معمولاً در کنار Python، SQL، ابزارهای پردازش داده و زیرساخت اجرا سنجیده میشود.
این ابزار را با نامهای دیگری نیز میشناسند:
- ایرفلو
- آپاشی ایرفلو
- Airflow
ویژگیهای کلیدی
برای آشنایی بهتر با این ابزار، توجه به موارد زیر میتواند مفید باشد.
-
تعریف گردشکار با DAG
وظایف و وابستگیهای آنها در فایلهای Python تعریف میشوند. این ساختار ترتیب اجرا را شفاف میکند و مانع آغاز شدن یک مرحله پیش از آمادهشدن ورودی آن میشود.
-
زمانبندی و اجرای دستی
میتوانید DAG را برای زمانهای مشخص اجرا کنید یا اجرای دستی آغاز کنید. زمانبندی برای Jobهای روزانه، ساعتی یا رویدادهای عملیاتی کاربرد دارد.
-
مدیریت خطا و Retry
برای هر وظیفه میتوان تعداد تلاش مجدد، فاصله میان تلاشها و سیاست خطا تعیین کرد. این قابلیت برای خطاهای موقت شبکه یا سرویسهای بیرونی مفید است.
-
Backfill دادههای گذشته
ایرفلو میتواند اجرای یک بازه زمانی گذشته را مدیریت کند؛ مثلاً وقتی دادههای چند روز قبل باید پس از رفع اشکال دوباره پردازش شوند.
-
اتصال به سرویسها و ابزارهای بیرونی
از طریق Providerها و Connectionها میتواند اجرای پرسوجوی پایگاه داده، فراخوانی API، انتقال فایل یا اجرای Job در سامانههای دیگر را هماهنگ کند.
-
رابط پایش اجراها
رابط وب وضعیت DAGها، زمان اجرا، لاگ وظایف، شکستها و وابستگیها را نشان میدهد تا عیبیابی Jobهای ناموفق سریعتر انجام شود.
کاربردها
موارد زیر تصویری کلی از این بخش برای این ابزار ارائه میکنند.
-
اجرای روزانه خط لوله ETL یا ELT
استخراج داده از چند منبع، بارگذاری در انبار داده، اجرای تبدیلها و کنترل نتیجه در یک گردشکار زمانبندیشده.
-
هماهنگی پردازشهای Apache Spark
ارسال Jobهای Spark پس از رسیدن فایلهای ورودی و آغاز مرحله بعد فقط پس از موفقیت پردازش توزیعشده.
-
بهروزرسانی دادههای داشبورد
اجرای تبدیلهای لازم، اعتبارسنجی داده و تازهسازی جدولهای گزارشگیری پیش از شروع ساعت کاری تیم.
-
اجرای دورهای فرایندهای یادگیری ماشین
هماهنگی دریافت داده جدید، آمادهسازی داده، آموزش یا ارزیابی مدل و ثبت خروجیها در یک فرایند قابل پایش.
-
اجرای مجدد دادههای تاریخی
پردازش دوباره یک بازه تاریخی پس از اصلاح منطق تبدیل یا رفع اختلال منبع داده، بدون تغییر دستی تاریخ هر Job.
ابزارهای جایگزین
ابزارهای زیر نزدیکترین جایگزینها برای آپاچی ایرفلو به شمار میروند.
پرسشهای رایج درباره آپاچی ایرفلو
در این بخش، به تعدادی از پرسشهای رایج درباره این ابزار پاسخ داده شده است.
آیا برای کار با آپاچی ایرفلو باید Python بلد باشم؟
برای نوشتن، تغییر و نگهداری DAGها معمولاً باید Python بدانید؛ بهویژه توابع، ماژولها و مدیریت خطا. اما کاربری که فقط از رابط وب وضعیت اجراها را پایش میکند یا اجرای دستی آغاز میکند، الزاماً به Python نیاز ندارد.
آیا ایرفلو ابزار پردازش داده است؟
خیر. ایرفلو بیشتر اجرای مراحل پردازش را هماهنگ و پایش میکند. پردازش واقعی ممکن است با SQL، Python، Apache Spark، dbt یا ابزارهای دیگر انجام شود.
DAG در ایرفلو چیست؟
DAG نقشه یک گردشکار است. در آن وظایف، ترتیب وابستگی و برنامه اجرا تعریف میشود؛ برای مثال ابتدا دریافت داده، سپس تبدیل و در پایان کنترل کیفیت.
ایرفلو برای چه نوع Jobهایی مناسب نیست؟
برای پردازشهای بسیار کوتاه و لحظهای، یا جریانهای رویدادمحور با تأخیر بسیار کم، ابزارهای پردازش جریانی یا سامانههای صف پیام معمولاً انتخاب مناسبتری هستند.
تفاوت ایرفلو با Jenkins چیست؟
Jenkins عمدتاً برای یکپارچهسازی و تحویل مستمر نرمافزار بهکار میرود. ایرفلو برای وابستگیهای زمانی و عملیاتی گردشکارهای داده، اجرای مجدد بازههای گذشته و پایش DAGها طراحی شده است.