در مسیر مهندسی داده ها
💣 وقتی پایپلاین منفجر میشه: تفاوت حیاتی بین Fault و Failure
تا حالا شده نصف شب با آلارم Airflow از خواب بپرید و ببینید کل ETL قرمز شده؟ 😫
توی دنیای مهندسی داده، ما هر روز با خراب شدن جابها (Jobs) سروکار داریم. اما یه نکته ظریف وجود داره که Junior رو از Senior جدا میکنه: درک تفاوت بین Fault و Failure.
بیایید یک بار برای همیشه پروندشو ببندیم! 👇
🔹 مفهوم Fault (عیب/نقص):
فالت اون "شرایطِ بد" یا "نقص اولیه" است. اون ترکِ ریز روی لوله آبه که هنوز نترکیده. Fault ممکنه نرمافزاری باشه (باگ توی کد) یا سختافزاری (داغ کردن سرور).
نکته کلیدی: وجود Fault لزوماً به معنی توقف سیستم نیست!
🔹 مفهوم Failure (شکست):
وقتی سیستم دیگه نمیتونه سرویس بده. این همون لحظهایه که پایپلاین کرش میکنه و دیتایی به دست بیزینس نمیرسه.
💡 رابطه این دوتا:
Fault (علت) ➡️ Error (حالت اشتباه داخلی) ➡️ Failure (نتیجه نهایی)
---
🏗 مثال واقعی در دنیای Data Engineering:
فرض کنید دارید با Spark یا Pandas دیتا پردازش میکنید.
1️⃣ سناریوی Fault:
شما توی کد فرض کردید که ستون User_ID همیشه عدده. اما یهو از سمت سورس (مثلاً API) یه دیتای کثیف میاد که توش User_ID برابر با "Unknown" هست.
👈 این یعنی یک Fault در منطق کد شما یا دیتای ورودی وجود داره.
2️⃣ سناریوی Error:
کد شما سعی میکنه این رشته رو به عدد تبدیل کنه (Casting). اینجا وضعیت داخلی برنامه بهم میریزه و Exception تولید میشه.
3️⃣ سناریوی Failure:
اگر این خطا رو هندل نکرده باشید، کل جاب Spark متوقف میشه (Failed Status).
👈 اینجا Failure رخ داده.
---
🛡 چرا این درک مهمه؟ (هنر Fault Tolerance)
ما به عنوان مهندس داده نمیتونیم جلوی تمام Faultها رو بگیریم (شبکه قطع میشه، دیسک پر میشه، دیتای کثیف میاد).
هنر ما اینه که سیستم رو Fault Tolerant طراحی کنیم. یعنی چی؟
✅ یعنی اگر Fault رخ داد (دیتای کثیف اومد)، سیستم Failure نده!
✅ راهکار: استفاده از Dead Letter Queue (اون ردیف خراب رو بفرست یه جای دیگه لاگ کن، ولی بقیه دیتا رو پردازش کن).
✅ نکته: کاهش احتمال وقوع خطا (Fault) به صفر غیرممکن است؛ بنابراین معمولاً بهترین کار طراحی مکانیزمهای تحمل خطا است که مانع از تبدیل شدن خطاها به شکست (Failure) شوند.
#DataEngineering #FaultTolerance #BigData #ETL #Pipeline #SoftwareArchitecture #مفاهيم
✅ @DataEngineerIr
1 · 146 ·