Mohsen Farokhi - محسن فرخی
Mohsen Farokhi - محسن فرخی
خواندن ۳ دقیقه·۱ سال پیش

مبانی معماری نرم افزار - بخش سوم

در بخش قبلی به مفهوم availability و ابعاد مختلف آن پرداختیم. در این بخش، به جزئیات بیشتری از مفهوم fault و تاثیرات آن بر سیستم‌ها پرداخته می‌شود.

همانطور که اشاره شد، fault به دلیل بروز اختلالاتی پدید می‌آید؛ به‌عنوان‌مثال، باگ در طراحی یا قطعی برق سرور عملیاتی می‌تواند به عنوان یک fault تلقی شود. Faultها می‌توانند ناشی از نفوذ یک فرد به سیستم یا ناآگاهی توسعه‌دهنده باشند و به این دلیل نباید آن‌ها را صرفاً به معنای «حادثه» (Accident) در نظر گرفت.

ویژگی‌های کیفی و تاثیر Fault بر آن‌ها

عمده Quality Attributeها در حوزه Operational، مشخصه‌هایی هستند که در زمان اجرا و عملیات سیستم نمود پیدا می‌کنند. برخی از این مشخصه‌ها عبارتند از:

  • Availability:

میزان در دسترس بودن سیستم

  • Reliability:

تداوم سرویس‌دهی سیستم

  • Resiliency:

توانایی سیستم در بازیابی از failureها یا کاهش تأثیر آن‌ها

  • Performance:

کارایی سیستم تحت تأثیر Fault

به طور کلی، faultها می‌توانند این ویژگی‌ها را مستقیم یا غیرمستقیم تحت تأثیر قرار دهند.


ابعاد مختلف Fault

برای بررسی بهتر faultها، می‌توان آن‌ها را از ابعاد مختلف دسته‌بندی کرد:

  • Nature:

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

  • Cause:

شامل دو نوع Physical و Human است. Physical faultها مانند قطعی شبکه، خرابی دیسک، یا قطع برق می‌باشند.

  • Boundary:

به مرزهای failure اشاره دارد و به دو دسته Internal و External تقسیم می‌شود. حملات خارجی، به عنوان External و مشکلات داخلی سیستم مانند down شدن پایگاه داده به عنوان Internal در نظر گرفته می‌شوند.

  • Phase of Creation:

به مرحله‌ای که fault رخ داده است، اشاره می‌کند و به دو دسته Design و Operational تقسیم می‌شود. خطاهای طراحی (Design faults) معمولاً دائمی هستند و منشا داخلی و انسانی دارند.

  • Persistence:

به ماندگاری fault اشاره دارد و به دو نوع Permanent و Temporary تقسیم می‌شود. برای مثال، physical faultها مانند خرابی قطعات نیازمند مداخله برای رفع هستند و معمولاً Permanent تلقی می‌شوند.


بررسی ویژگی‌های کیفی مرتبط با Failure

سیستم‌ها عموماً دو حالت Valid و Invalid دارند. انتقال از حالت Valid به Invalid به عنوان failure شناخته می‌شود و بازگشت به حالت Valid را restoration می‌نامیم.

مشخصه Availability، نشان‌دهنده میزان دسترسی‌پذیری سیستم است و مشخصه Reliability، به تداوم سرویس‌دهی سیستم اشاره دارد. این دو ویژگی به شدت به یکدیگر وابسته هستند، زیرا استمرار سرویس‌دهی زمانی معنا پیدا می‌کند که سیستم آماده و در دسترس باشد.

مشخصه Safety، موضوع اعتماد به سیستم را در بر می‌گیرد. عدم وجود این ویژگی باعث کاهش اعتماد به نرم‌افزار می‌شود.

مشخصه Resiliency، ویژگی بازگشت به حالت عادی پس از failure و کاهش تأثیر آن است. با گسترش cloud computing و فاصله گرفتن از ساختار monolithic، اهمیت این ویژگی افزایش یافته است.

مدیریت Fault در سیستم‌های Resilient

یک سیستم resilient می‌تواند failure را بپذیرد و بیشتر به بعد از وقوع آن توجه داشته باشد تا اقدامات پیشگیرانه. طراحی سیستم‌های توزیع‌شده باید بر مبنای پذیرش وقوع خطا و تمرکز بر بازیابی و کاهش اثرات آن باشد.


ویژگی resiliency در واکنش به faultها به پنج طبقه تقسیم می‌شود:

  • Recognize:

شناسایی failureها.

  • Isolate:

کاهش تأثیر failureها؛ برای مثال، ارتباطات ناهمزمان (Async Communication) به‌عنوان یک tactic برای ایزوله‌کردن استفاده می‌شود.

  • Protect:

جلوگیری از تأثیر failure؛ به عنوان مثال Circuit Breaker.

  • Mitigate:

مقابله با failure.

  • Resolve:

اطمینان از اجرای صحیح اقدامات مقابله با failure.

نتیجه‌گیری

با توجه به اهمیت و پیچیدگی مدیریت Fault در سیستم‌های عملیاتی، بهبود ویژگی‌های کیفی مانند Availability، Reliability، Safety، و Resiliency از اصول اصلی در طراحی سیستم‌های مدرن به‌ویژه سیستم‌های توزیع‌شده و مبتنی بر cloud است.

معماری نرم افزارsoftware architectureFaultfailureمحسن فرخی
شاید از این پست‌ها خوشتان بیاید