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

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

در معماری نرم‌افزار، کیفیت و کارایی سیستم‌ها تا حد زیادی به ویژگی‌های کیفی آن‌ها وابسته است. ویژگی‌های کیفی مانند عملکرد، امنیت، پایداری و قابلیت نگهداری نقش مهمی در موفقیت یک نرم‌افزار ایفا می‌کنند. در اینجا به بررسی و طبقه‌بندی این ویژگی‌ها، تاثیر متقابل آن‌ها و نحوه بهینه‌سازی آن‌ها در قالب استراتژی‌های trade-off می‌پردازیم.

معماری نرم‌افزار فرایندی پیچیده است که هدف آن ایجاد ساختاری است که علاوه بر پوشش نیازهای عملکردی، ویژگی‌های کیفی مورد نظر را نیز برآورده کند.

طبقه‌بندی ویژگی‌های کیفی

ویژگی‌های کیفی یا Quality Attributes بر اساس عملکرد و اهداف مورد نظر به سه دسته اصلی تقسیم می‌شوند:

  • Operational

ویژگی‌های عملکردی که عمدتاً در زمان اجرا نمود پیدا می‌کنند.

  • Structural

ویژگی‌های ساختاری که در طراحی نرم‌افزار نقش دارند.

  • Cross-Cutting

ویژگی‌هایی که بخش‌های مختلف سیستم را تحت تاثیر قرار می‌دهند.


ویژگی‌های عملیاتی (Operational)

این دسته شامل ویژگی‌هایی است که مستقیماً بر رفتار سیستم در زمان اجرا تاثیر می‌گذارند، مانند عملکرد (performance)، در دسترس بودن (availability)، پایداری (resiliency) و قابلیت اطمینان (reliability). این ویژگی‌ها به طور گسترده‌ای توسط اندازه‌گیری‌های دقیق ارزیابی می‌شوند و برای بهبود عملکرد در محیط‌های عملیاتی مورد استفاده قرار می‌گیرند.

ویژگی‌های ساختاری (Structural)

ویژگی‌های ساختاری به مواردی مانند قابلیت نگهداری (maintainability)، قابلیت تکامل (evolvability) و قابلیت تست (testability) اشاره دارند که بر طراحی و توسعه بلندمدت سیستم اثر می‌گذارند. بهینه‌سازی این ویژگی‌ها، توسعه و بهبود نرم‌افزار در طول زمان را ساده‌تر می‌کند.

ویژگی‌های Cross-Cutting

این ویژگی‌ها به عنوان ویژگی‌های کیفی سیستم شناخته می‌شوند که بخش‌های مختلف را تحت تاثیر قرار می‌دهند. برای مثال امنیت (security) و یادگیری‌پذیری (learnability). این ویژگی‌ها اغلب در سراسر سیستم منتشر شده و چالش‌های خاصی برای تیم‌های معماری و توسعه به همراه دارند.


ویژگی‌های کیفی صریح و ضمنی (Explicit and Implicit)

ویژگی‌های کیفی در زمینه‌های مختلف ممکن است صریح (explicit) یا ضمنی (implicit) باشند. برای مثال، امنیت در یک وب‌سایت معمولی ممکن است به عنوان یک ویژگی ضمنی در نظر گرفته شود، اما در سیستم‌های حساس و حیاتی مانند سیستم‌های بانکی، امنیت به طور صریح مورد توجه قرار گرفته و به عنوان یک ضرورت طراحی تلقی می‌شود.

استراتژی‌های trade-off در ویژگی‌های کیفی

کیفیت‌های مختلف می‌توانند اثرات مثبت یا منفی بر یکدیگر داشته باشند و نیاز به بهینه‌سازی trade-off میان آن‌ها را ایجاد کنند. به عنوان مثال، افزایش امنیت ممکن است موجب کاهش عملکرد شود و بالعکس. هدف معماری نرم‌افزار، دستیابی به کم‌هزینه‌ترین ترکیب trade-off برای به حداکثر رساندن کیفیت‌ها است.

بررسی ویژگی دسترس‌پذیری (Availability)

دسترس‌پذیری یکی از ویژگی‌های عملیاتی کلیدی است که بر مبنای وقوع خطاها (faults) و شکست‌ها (failures) تعیین می‌شود. در این بخش به بررسی روش‌های جلوگیری از بروز خطا، شناسایی خطا و بهبود دسترس‌پذیری می‌پردازیم:

  • Prevent

جلوگیری از وقوع خطاها

  • Tolerate

مدیریت خطا و تحمل آن با استفاده از روش‌هایی مانند Idempotency

  • Remove

حذف عامل خطا از مدار. برای مثال خارج کردن server دارای اختلال

  • Forecast

پیش‌بینی خطاها. برای مثال پیش‌بینی زیر بار رفتن سیستم

در مورد fault، اولین و مهم‌ترین مسئله، شناسایی آن‌ها است. منظور از شناسایی این است که بدانیم چه نوع faultهایی ممکن است در سیستم رخ دهند و چگونه می‌توانیم برای آن‌ها آماده باشیم. به‌عنوان مثال، خرابی دیتابیس یا قطع شدن شبکه از جمله faultهای محتمل هستند.

در ادامه، ارزیابی ریسک و تواتر رخداد این خطاها مطرح می‌شود که برای درک عمق و احتمال تاثیرات آن‌ها ضروری است.

به طور کلی faultها به سه دسته کلی تقسیم می‌شوند:

  • Minor:

خطاهای جزئی که ممکن است کاربران را دچار ناراحتی کنند، اما باعث از کار افتادن سیستم نمی‌شوند.

  • Major:

خطاهای جدی که می‌توانند در عملکرد سیستم اختلال ایجاد کنند.

  • Critical:

خطاهایی که در صورت تبدیل به failure، ممکن است سیستم را به طور کامل از کار بیندازند.

این طبقه‌بندی به معماران سیستم کمک می‌کند تا با توجه به سطح اهمیت، برای هر نوع fault راهکارهای مناسبی جهت شناسایی و مدیریت آن‌ها تدوین کنند.


سناریوهای مختلف در دسترس‌پذیری (Availability General Scenarios)

برای سنجش دسترس‌پذیری، لازم است عوامل موثر بر سیستم و شرایط مختلف را مورد بررسی قرار دهیم:

  • Normal Operation: شرایط عادی سیستم
  • Overloaded: شرایطی که سیستم تحت بار زیاد قرار دارد
  • Special Occasions: شرایط خاص مانند راه‌اندازی، خاموشی و بازیابی سیستم
  • Degraded Operation: حالتی که عملکرد سیستم کاهش یافته و فقط بخشی از وظایف اجرا می‌شود

تکنیک‌های شناسایی و بازیابی از خطا

سیستم‌ها باید قادر به شناسایی خطاهای پیش آمده و بازیابی از آن‌ها باشند. تکنیک‌هایی مانند Heartbeat، Monitoring و Ping برای شناسایی خطا و تکنیک‌های Resiliency برای بازیابی سیستم از شکست استفاده می‌شوند.

نتیجه‌گیری

در معماری نرم‌افزار، ویژگی‌های کیفی نقش بسیار مهمی در موفقیت سیستم‌ها ایفا می‌کنند. طراحی و پیاده‌سازی این ویژگی‌ها نیازمند شناخت و درک کامل trade-offهای بین آن‌ها است.

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