کیارش آذرنیا
کیارش آذرنیا
خواندن ۳ دقیقه·۴ سال پیش

بهبود پیوسته‌ی کارایی نرم‌افزار

مقدمه

در مطلب قبلی به این سوال پاسخ دادیم که «چگونه معماری نرم‌افزار را بهبود دهیم؟». در این مطلب روی یکی از جنبه‌های معماری تمرکز کرده‌ایم: کارایی (Performance). می‌خواهیم ببینیم با رویکردی که توضیح دادیم چطور می‌توان این نیازمندی کیفی مهم را بهبود داد.

چطور می‌توان کارایی را اندازه گرفت؟ یک سناریوی کارایی چه شکلی است؟ در ادامه باز سراغ کتاب معماری نرم‌افزار در عمل (Software Architecture in Practice) می‌رویم و ترجمه‌ی قسمتی از آن را می‌خوانیم.


کارایی از دیدگاه معماری نرم‌افزار

کارایی حکایت از زمان دارد و همچنین توانایی سیستم برای ارضا نیازمندی‌های زمان‌بندی.

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

باری، همه‌ی سیستم‌ها نیازمندی‌های کارایی دارند، هرچند آشکار نباشد. مانند یک ویرایشگر متنی که باید در کسر مشخصی از ثانیه تغییر را نمایش دهد وگرنه باعث آزار کاربر خواهد شد. کارایی همچنان یک شاخصه‌ی کیفیت اساسی است برای همه‌ی نرم‌افزارها.

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

الگوهای یک سناریوی کارایی

یک سناریوی کارایی با ورود یک رویداد به سیستم آغاز می‌شود. پاسخدهی صحیح به این رویداد نیازمند مصرف منابعی، شامل زمان، خواهد بود. همزمان با این روند،‌ سیستم ممکن است در حال سرویس دادن به رویدادهای دیگری نیز باشد.

رویدادها می‌توانند با الگویی قابل پیشبینی یا یک توضیع ریاضی و یا با به شکلی غیرقابل پیشبینی وارد آیند. الگوی رویدادها می‌تواند به سه دسته‌ی متناوب، آماری و کاتوره‌ای تقسیم شود؛

  • الگوی متناوب (Periodic): به طور منظم با یک فاصله‌ی زمانی ثابت رخ می‌دهد. الگوی متناوب بیش از همه در سامانه‌های بی‌درنگ اتفاق می‌افتد.
  • الگوی آماری (Stochastic): بیانگر رویدادهایی است که با یک توزیع احتمالاتی مشخص رخ می‌دهند.
  • الگوی کاتوره‌ای (Sporadic): نشانگر رویدادهایی است که نه متناوب‌اند و نه با یک توزیع احتمالاتی قابل مدل‌سازی هستند. البته گاه می‌توان قواعدی برای آن‌ها تعریف نمود؛ مثلا این که هیچ دو رویداد متوالی کمتر از صد میلی ثانیه اختلاف نخواهد داشت، هر چند چنین قواعدی مفید هستند، همچنان پیشبینی دقیقی از رویدادها به دست نمی‌‌دهند.
توضیح مترجم: این تقسیم‌بندی امروز شاید کمی کلی باشد. ابزارهای جدید آزمون کارایی مثل k6 این قابلیت را دارند که با تعریف سطوح (stages) مختلف، الگوهای متنوعی (مثلا به شکل پله‌کانی) از بار کاری تولید کنند که با نگاه این کتاب همه زیرمجموعه‌ی الگوی آماری خواهد بود. ارزش این نوشته، بیشتر نگاه آن به مساله است نه لزوما راهکارهای آن.

سنجه‌ی پاسخ کارایی

پاسخی که سیستم به یک محرک در همبافت کارایی می‌دهد با سنجه‌های زیر قابل بیان است:

  • تاخیر (Delay):‌ زمان ما بین ورود محرک به سیستم و تولید پاسخ آن.
  • ضرب‌العجل‌ها (Deadline) در پردازش.
  • گذرداد سیستم (Throughput): تعداد ترکانش‌ها در یک بازه‌ی زمانی معین.
  • جیتر (Jitter): بازه‌ی قابل تحمل تغییرات در تاخیر.
  • نرخ خطا (Error Rate):‌ تعداد رویدادهایی که به علت شلوغی سیستم پردازش نشدند.

جمع‌بندی سناریوی کلی کارایی

در ادامه‌ی این بحث، کتاب سناریو کلی کارایی را به این نحو صورت‌بندی می‌کند:

  • منبع تحریک: تحریک از منابع یا منابعی خارجی وارد سیستم می‌شود.
  • محرک: رسیدن هر رویداد محرک محسوب می‌شود. الگوی محرک‌ها بر حسب زمان می‌تواند متناوب، آماری یا کاتوره‌ای باشد.
  • سازه (Artifact):‌ کل سیستم یا بخشی است که می‌خواهیم کارایی آن را بسنجیم.
  • محیط: سیستم می‌تواند در شرایط عملیاتی گونه‌گونی باشد؛ مانند شرایط معمولی، اورژانسی، حداکثر بار یا اضافه بار.
  • پاسخ: سیستم باید رویداد وارد شده را پردازش کند. این پردازش ممکن است سبب تغییر در محیط شود (برای مثال ممکن است محیط از حالت بار معمولی وارد حالت اضافه‌بار شود).
  • سنجه‌ی پاسخ: سنجه‌ی پاسخ می‌تواند زمانی باشد که صرف پردازش یک محرک می‌شود (تاخیر)، همچنین؛ تغییراتی که در تاخیر رخ می‌دهد (جیتر)، تعداد رویدادهایی که در بازه‌ی مشخصی از زمان پردازش می‌شوند (گذرداد) و در نهایت تعداد رویدادهایی که پردازش نمی‌شوند (نرخ خطا).

در جدول زیر یک سناریوی عمومی کارایی تلخیص شده است:

خلاصه‌ی عناصر سناریوی عمومی سنجش کارایی
خلاصه‌ی عناصر سناریوی عمومی سنجش کارایی

امیدوارم در مطالب بعدی یک مثال عملی از این رویکرد پیاده‌سازی کرده و با جزئیات بیشتر آن را توضیح دهم.

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