13 نکته ضروری برای بهبود عملکرد برنامه‌های وب - بخش دوم

آفلاین
user-avatar
عرفان حشمتی
24 شهریور 1400, خواندن در 10 دقیقه

در بخش اول این مقاله 5 مورد از نکات بهبود عملکرد برنامه‌های وب شامل استفاده از شبکه تحویل محتوا (CDN)، بهره گیری از ابزارهای مناسب، ایجاد انعطاف پذیری در برنامه، اجرای کدها در لبه شبکه و به کارگیری روش‌های جایگزین را مورد بحث و بررسی قرار دادیم. در این قسمت به 8 مورد بعدی خواهیم پرداخت. پس تا انتهای این مقاله با ما همراه باشید.

6. منابع خود را به اشتراک بگذارید

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

Sharding به این معنی است که کمبود منابع در یک سرور پایگاه داده، بر کارکردن سایر سرورهای پایگاه داده تأثیر نمی‌گذارد.

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

7. تاخیر را به حداقل برسانید

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

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

زبان‌های برنامه نویسی مدرن به برنامه اجازه می‌دهد تا از نخ‌ها (threads) در هنگام انتظار برای ورودی/خروجی استفاده مجدد کند. بهره گیری از این مدل برنامه نویسی ناهمزمان در مواردی که برنامه از وابستگی‌هایی مانند پایگاه داده استفاده می‌کند، واقعا کاربردی است.

تا جایی که ممکن است از حافظه کش استفاده کنید - در بسیاری از موارد، منطق برنامه به داده‌های کاملا به روز شده احتیاج ندارد و تأخیر هنگام افزودن یک مرحله کش می‌تواند به طور قابل توجهی کاهش یابد.

سرانجام می‌توانید زیرساخت‌ها را به مواردی با زمان پاسخ سریعتر تغییر دهید. اگر هم با داده‌های گذرا (transilient) کار می‌کنید، از پایگاه داده حافظه‌ای به جای پایگاه داده SQL استفاده نمایید.

8. استفاده از یک ابزار مدیریت عملکرد را بیاموزید

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

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

اما آیا مشکل از thread است؟ کوئری SQL بهینه نشده؟ پیچیدگی نمایی کد و الگوریتم‌های ناکارآمد؟ تاخیر شبکه؟ علت‌های احتمالی تقریبا بی نهایت هستند. پس از کجا شروع کنیم؟

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

به همین دلیل نظارت بر عملکرد برنامه‌ها (APM) با کاربردهای مدرن توزیع شده و معماری میکروسرویس‌ها اهمیت بیشتری پیدا می‌کند. ابزارهای APM به شما امکان می‌دهند تا ارتباط و تأخیر بین سرویس‌ها و داده‌های ذخیره شده را کشف کرده و سپس رفع مشکل کنید.

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

9. تست‌های load را انجام دهید

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

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

در سال‌های اخیر انجام تست load با ابزارهای منبع باز مانند Apache JMeter و Gatling و هنگام اجرا در کلاد با استفاده از سرویسی مانند RedLine13 آسان و ارزان شده است.

اگر قصد فروش محصول یا سرویس دهی خاصی با ترافیک بالا را دارید، بسیار مهم است که مراحل تست load را هر چه زودتر شروع کنید.

همچنین به خاطر داشته باشید که نوشتن کد جدید می‌تواند محدودیت‌های جدیدی را ایجاد کند، بنابراین مهم است که تست‌های خود را به طور منظم اجرا کنید.

10. میزان بازدیدکنندگان را در جایی که سایت شما بهتر عمل می‌کند، حفظ کنید

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

اما اگر بازدیدکنندگان وب سایت یا برنامه شما افزایش چشمگیری داشته باشد، بعید است بتوانید عملکردی را که مشتریان انتظار دارند ارائه دهید. به قول معروف "در مقیاسهای بزرگ همه چیز خراب می‌شود".

برای حفظ میزان بازدیدکنندگان در جایی که وب سایت یا برنامه بهترین عملکرد را دارد، به راه حلی برای مدیریت ورودی ترافیک نیاز دارید.

وب سایت‌ها و برنامه‌ها با فرض میزان ترافیک معمول خود ساخته می‌شوند. مقیاس پذیر ساختن سایت بر اساس تقاضا از نظر فنی چالش برانگیز است و می‌تواند پرهزینه باشد. حتی بزرگترین سایت‌های جهان هم تحت قرارگیری زیر بار سنگین شکست می‌خورند. بنابراین بدین منظور باید جریان ترافیک را مدیریت کنید.

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

11. بدانید که مرورگر ماشین مجازی قدرتمندی است

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

مرورگرهای مدرن مانند گوگل کروم قابلیت‌هایی دارند مانند اجرای جاوااسکریپت، فضای ذخیره سازی مداوم، پشتیبانی از HTML5 و دسترسی به تمام منابع که همیشه به آنها نیاز خواهید داشت. برخی از افراد حتی یک شبیه ساز کامل لینوکس در جاوااسکریپت ساخته‌اند که قادر است برنامه‌های C را کامپایل و اجرا کند. اما یک وب سایت معمولی، جاوااسکریپت را به انجام اعتبارسنجی ورودی و نمایش یک یا دو پنجره محدود می‌کند.

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

۱۲- در قوانین کسب و کار خود تجدید نظر کنید

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

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

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

آیا وقتی کالایی را به سبد خرید خود اضافه می‌کنیم، می‌توانیم آن را بدون اجازه کارت اعتباری تکمیل کنیم؟

به همین خاطر اغلب تصمیم گیرندگان با آگاهی از عواقب، قوانین را تغییر می‌دهند.

13. از خود بپرسید: چه چیزی باعث افزایش کارایی خواهد شد؟

همیشه قبل از ایجاد هر پروژه، "چرا" باید قبل از "چگونه" در نظر گرفته شود.

به عبارت دیگر، قبل از صرف زمان و هزینه زیاد برای طراحی سیستم به منظور افزایش بازدیدکنندگان، ابتدا نیاز کسب و کار خود را ارزیابی کنید.

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

بنابراین قبل از صرف زمان و هزینه زیاد برای طراحی مجدد سیستم، ابتدا نیاز تجارت خود را در نظر بگیرید.

در چنین شرایطی اگر سایت شما دارای ظرفیت بالا باشد، بسیار خوب است. اما اگر درگاه را باز بگذارید و به افراد بیشتری برای خرید بلیطهای موجود اجازه دهید، تقریبا کاربران خود را از دست خواهید داد.

جمع‌بندی

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

اگر همه 13 مرحله ضروری را در پروژه خود لحاظ کنید، در مسیر خوبی قرار می‌گیرید.

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
عرفان حشمتی @heshmati74
مهندس معماری سیستم های کامپیوتری، طراح و توسعه دهنده وب سایت
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو