آموزش های ویدئوییویدیوهای آموزشی

همروندی و مدیریت تراکنش‌ها در Airflow: تجربه عملی از Postgres تا MinIO

🔹 در ادامه‌ی کارگاه‌های عملی مدرسه مهندسی داده سپهرام، یک ویدئو آموزشی یک‌ساعته آماده شده است که به یکی از مسائل بسیار مهم در طراحی پایپ‌لاین‌های داده با ایرفلو (Apache Airflow) می‌پردازد: موضوع همروندی (Concurrency).

در این ویدئو یک دگ (DAG) کاربردی را در ایرفلو نسخه ۳٫۱ بررسی می‌کنیم که وظیفه‌اش انتقال تراکنش‌ها از پستگرس (Postgres) به MinIO است.

فعالیت‌هایی که در این کارگاه آموزشی به کمک ایرفلو انجام می ‌شود :

🔰سنسور برای انتظار تراکنش‌های جدید.

🔰تسک پردازش (Transform) برای استخراج تراکنش‌های خام از پایگاه داده.

🔰ذخیره‌سازی در MinIO به صورت JSON برای استفاده در مراحل بعدی (مثل ذخیره در Lakehouse).

🔰به‌روزرسانی وضعیت تراکنش‌ها در پستگرس به‌عنوان “پردازش‌شده”.

❓ اما چالش کجا پیش می‌آید؟

وقتی چند بار این دگ را همزمان اجرا کنیم، هر بار ممکن است مجموعه‌ی مشابهی از تراکنش‌ها انتخاب شود و چندین بار پردازش شود. این همان مشکل اجرای ناخواسته‌ی موازی (Duplicate Processing) است.

برای حل این مسئله، در ویدئو چند راه‌حل بررسی شده است:

🟠 راه‌حل‌های محدود کردن همروندی

✨ گزینه depends_on_past: ایرفلو دگ یا تسک بعدی را تنها در صورتی اجرا می‌کند که اجرای قبلی همان تسک از دگ‌های قبلی تکمیل شده باشد.

✨ گزینه max_active_runs: می‌توانیم تعیین کنیم که حداکثر چند اجرای همزمان از یک دگ فعال باشد (مثلاً فقط یک اجرای فعال در لحظه).

✨ گزینه pool (در این دگ خاص بررسی نشد): ابزاری برای محدود کردن تعداد اجرای همزمان یک تسک مشخص.

🟢 راه‌حل‌های واقعی برای موازی‌سازی

اگر بخواهیم اجرای موازی واقعی برای سناریوی فوق (ترکیب ایرفلو و یک دیتابیس رابطه‌ای)، داشته باشیم، باید به سراغ تکنیک‌های سطح دیتابیس برویم. یکی از مهم‌ترین آنها:

  • قفل‌گذاری موقت هنگام انتخاب سطرها با دستور FOR UPDATE SKIP LOCKED: با این تکنیک می‌توانیم در لحظه‌ی انتخاب رکوردها (SELECT) ردیف‌های انتخاب‌شده را قفل کنیم تا پردازش‌های دیگر نتوانند آنها را همزمان بردارند. این کار نیاز دارد که انتخاب (SELECT) و به‌روزرسانی (UPDATE) در همان تراکنش انجام شود تا رفتار اتمیک تضمین گردد.

💡 نکته‌ی اصلی این کارگاه این بود که:
طراحی پایپ‌لاین‌های داده با ایرفلو تنها به نوشتن چند تسک و اتصال آنها به هم خلاصه نمی‌شود. بلکه باید همه‌ی شرایط مرزی، اجرای همزمان دگ‌ها، قفل‌های دیتابیس و حتی طراحی ذخیره‌سازی (مثل MinIO یا Lakehouse) را با دقت بررسی کنیم.

📌 کدهای کامل این دگ در گیت‌هاب موجود است:

👉 https://github.com/sepahram-school/workshops/tree/main/2-Airflow-Concurrency-Control-SQL

🎥 امیدوارم این ویدئو برای تمام کسانی که در پروژه‌های واقعی با ایرفلو کار می‌کنند و دغدغه‌ی پایداری و دقت پایپ‌لاین‌های داده دارند، مفید و الهام‌بخش باشد.

کانال تلگرام مدرسه مهندسی داده سپهرام : https://t.me/sepahram_school

کانال تلگرام BigData.IR – وب‌سایت مهندسی داده : https://t.me/bigdata_ir

دوره‌های تخصصی سپهرام : https://sepahram.ir/courses

آدرس ویدئو در یوتیوب :

https://www.youtube.com/watch?v=sS6Ma40sngU

مجتبی بنائی

دانشجوی دکترای نرم‌افزار دانشگاه تهران (yun.ir/smbanaie)، مدرس دانشگاه و فعال در حوزه توسعه نرم‌افزار و مهندسی داده که تمرکز کاری خود را در چند سال اخیر بر روی مطالعه و تحقیق در حوزه کلان‌داده و زیرساخت‌های پردازش داده و تولید محتوای تخصصی و کاربردی به زبان فارسی و انتشار آنها در سایت مهندسی داده گذاشته است. مدیریت پروژه‌های نرم‌افزاری و طراحی سامانه‌های مقیاس‌پذیر اطلاعاتی از دیگر فعالیتهای صورت گرفته ایشان در چند سال گذشته است.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

دکمه بازگشت به بالا