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


در گذشته Monitoring جزو شرح وظایف شغلی تیم‌های دوآپس بود اما امروزه به دلیل ماهیتی که صنعت توسعهٔ نرم‌افزار پیدا کرده است، توسعه‌دهندگان نیز می‌باید در این حوزه دست به کسب یکسری مهارت‌ها بزنند که در همین راستا در ادامه قصد داریم نکاتی را برشمریم که می‌توانند برای دولوپرهای علاقمند به این حوزه مفید واقع گردند.

اولین کسی باشید که به این سؤال پاسخ می‌دهید

چرا نیاز به مانیتورینگ نرم‌افزار داریم؟

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

وقتی صحبت از مانیتورینگ به میان می‌آید، از یک دید کلی می‌توان دو مُدل را متصور شد که عبارتند از مانیتورینگ Black Box و مانیتورینگ White Box به طوری که منظور از اصلاح اول آن است که ببینیم نحوهٔ‌ تعامل یک کاربر با سیستم چگونه است و چه تجربهٔ‌ کاربری برایش رقم می‌خورد اما وقتی صحبت از White Box به میان می‌آید، منظور آن است که خودِ سیستم (سورس‌کد) را جهت یافتن مشکلات احتمالی مورد آزمون و بررسی قرار دهیم.

مانیتورینگ زیرساختی

آنچه در ادامه مطرح می‌کنیم مرتبط با زیرساخت نرم‌افزار است که معمولاً تحت عنوان IaaS شناخته می‌شود که برای کسب اطلاعات بیشتر می‌توانید به مقالهٔ Infrastructure as a Service یا به اختصار IaaS چیست؟ مراجعه نمایید.

مانیتورینگ شبکه بخشی از پروسهٔ مانیتورینگ زیرساختی است که بسیار پایه‌ای بوده بدان معنا که نسبت به سایر فرآیندهای مانیتورینگ ارجحیت دارد. وقتی که صحبت از مانیتورینگ شبکه به میان می‌آید، منظور آن است که ببینیم چه روندهایی باعث کاهش پرفورمنس سیستم و یا از دست خارج شدن آن می‌شوند و در صدد رفع آن‌ها برآییم. به طور مثال، رصد کردن میزان استفاده از پهنای‌باند حاصل از فرآیند‌های I/O می‌تواند اطلاعات خوبی در این زمینه در اختیارمان قرار دهد.

در واقع، این لایه از مانیتورینگ تضمینی ایجاد می‌کند که سیستم تا حد امکان در دسترس باشد و نیاز به توضیح نیست که در دسترس نبودن یک سرویس آنلاین هزینه‌های گزافی را بسته به اینکه چه کسب‌وکاری داشته باشیم تحمیل خواهد کرد که در همین راستا توصیه می‌کنیم به مقالهٔ Cost of Downtime: درآمدی بر هزینه‌های از دسترس خارج شدن کسب‌وکارهای آنلاین مراجعه نمایید.

تیم‌های فنی/مهندسی جهت اطمینان حاصل کردن از انعطاف‌پذیری نرم‌افزار خود از مفهومی تحت عنوان Chaos Engineering بهره می‌گیرند. به طور خلاصه، این اصطلاح حاکی از مجموعه اقداماتی است که تیم‌های توسعهٔ نرم‌افزار را قادر می‌سازند تا اپلیکیشن را در محیط واقعی زیر بار فشارهای مختلفی قرار دهند تا در نهایت دریابند که اپلیکیشن تا چه حد تحمل شرایط غیرمنتظره را دارا است و بدین ترتیب می‌توانند قبل از آنکه با آن شرایط مواجه شوند، خود را برای پایدار نگاه داشتن سرویس‌شان آماده سازند که جهت کسب اطلاعات بیشتر در این خصوص، می‌توانید به مقالهٔ Chaos Engineering چیست؟ مراجعه نمایید.

مانیتورینگ نرم‌افزاری

وقتی که صحبت از Application Monitoring به میان می‌آید، این موضوع را می‌توان از جنبه‌های مختلفی تحلیل کرد که در ادامه مهم‌ترین آن‌ها را برخواهیم شمرد.

- مانیتورینگ میزان پایداری نرم‌افزار: این مُدل از مانیتورینگ حاکی از آن است که کلیهٔ ارورهایی که ممکن است کاربران با آن‌ها مواجه شوند را بررسی کرده و مشخص می‌کند آستانه‌ای که در آن بازه پس از رخدادن ارورها به تجربهٔ کاربری لطمه نخواهد خورد چه‌قدر است.

- مانیتورینگ میزان پرفورمنس نرم‌افزار: در لایهٔ اپلیکیشن، مانیتورینگ پرفورمنس یا کارایی نرم‌افزار داده‌هایی مبنی بر میزان سرعت اجرای اپلیکیشن در اختیار تیم فنی می‌گذارد. واژهٔ «سریع» مفهومی کاملاً نسبی دارد و بسته به اینکه از یک شبکهٔ اجتماعی با میلیون‌ها ریکوئست در ثانیه صحبت می‌کنیم و یا یک فروشگاه آنلاین معمولی با ده‌ها ریکئوست در ثانیه، مفهومی کاملاً متفاوت دارد اما آنچه فارغ از نوع کسب‌وکار آنلاینی که داریم یکسان می‌باشد این است که هرگونه تأخیر در هندل کردن ریکوئست‌ها در سمت سرور و یا حتی در سمت کاربر منجر به رقم خوردن تجربهٔ کاربری نامطلوبی می‌گردد. که در همین راستا توصیه می‌کنیم به مقالات زیر مراجعه نمایید:

Performance Bugs: یکی از بدترین انواع باگ‌های برنامه‌نویسی
ابتدا سریع کد بزنید سپس به منظور بهبود پرفورمنس، شروع به ریفکتورینگ کنید!
آشنایی با استراتژی‌هایی به منظور کوتاه‌تر کردن زمان لود سایت
معرفی ابزارهایی اپن‌سورس جهت بررسی پرفورمنس اپلیکیشن‌‌های تحت وب
چگونه تصاویر وب‌سایت را به‌ منظور بهبود پرفورمنس بهینه کنیم؟

به طور کلی وقتی از پرفورمنس نرم‌افزار صحبت می‌کنیم، باید با دو اصطلاح RUM و SUM آشنا شویم. Real User Monitoring یا به اختصار RUM شرایط واقعی که کاربران سایت یا اپلیکیشن با آن دست‌وپنجه نرم‌ می‌کنند را ترسیم می‌کند. به عبارتی، اینکه سایت‌مان در چند ثانیه لود می‌شود ارتباط تنگاتنگی با تجربهٔ‌ کاربری مخاطبین دارد اما در عین فراموش نکنیم که سرعت اینترنت کاربر و همچنین قدرت سیستمی که از آن برای مشاهدهٔ وب‌سایت‌مان استفاده می‌کند نیز تأثیر مستقیمی بر این متریک دارد. همچنین Synthetic User Monitoring یا به اختصار SUM به پروسهٔ جمع‌آوری دیتایی همچون سرعت اینترنت، نوعِ مرورگر کاربر، سیستمی که از آن استفاده می‌کند و ... اشاره دارد و نیاز به توضیح نیست که جمع‌آوری چنین داده‌هایی خیلی هم کار آسانی نیست و می‌باید از پلتفرم‌های تخصصی‌ این کار که به منظور شبیه‌سازی رفتار کاربر مورد استفاده قرار می‌گیرد بهره جست.

جمع‌بندی
علاوه بر Monitoring که فرآیندی ادامه‌دار و دائمی است که اطلاعات مفیدی در ارتباط با عملکرد اپلیکیشن در اختیارمان می‌گذارد، در پایان نیاز است تا با مفهوم دیگری تحت عنوان Profiling نیز آشنا شویم که به موجب آن می‌توانیم قبل از دیپلوی نرم‌افزار آن را از دیدِ پرفورمنسی (همچون میزان مصرف مموری، زمان اجرای اسکریپت و غیره) مورد بررسی قرار داده و پس از شناسایی گلوگاه‌ها در صدد رفع آن‌ها برآییم که این کار در نهایت منجر به بهبود نتایج در پروسهٔ مانیتورینگ خواهد شد.

منبع