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

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

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

کاربران سعی می‌کنند به سایت شما دسترسی پیدا کنند اما در عوض با تاخیر طولانی و کدهای خطای مخرب HTTP مواجه می‌شوند.

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

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

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

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

در Queue-it آماری از وب سایت‌ها را مشاهده کرده‌ایم که نمی‌توانند هزاران بازدیدکننده همزمان را سرویس دهی کنند. برخی از اینها ضعیف طراحی و ساخته شده‌اند. خیلی‌ها پس از صرف هزینه‌های کلان برای بهبود عملکرد، هنوز هم نمی‌توانند این موارد را مدیریت کنند.

در این مقاله 13 نکته بر اساس سال‌ها تجربه مدیر محصول Queue-it - مارتین لارسن، متخصص در توسعه وب - ذکر شده است.

1. از شبکه تحویل محتوا (CDN) استفاده کنید

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

انتقال همه منابع استاتیک به CDN ساده‌ترین راه برای دستیابی به عملکرد بیشتر از سرور است.

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

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

بسته به تنظیمات خود ممکن است محتوای CDN را از یک دامنه دیگر بارگذاری کنید (به عنوان مثال values.website.com) که به پیکربندی برنامه شما نیاز دارد. اما امروزه CDNها به شما اجازه می دهند آنها را در فرانت-اند وب سایت خود قرار دهید و سپس به شما این امکان را می‌دهند که تنظیماتی را پیکربندی کنید تا مشخص شود چه چیزی باید از CDN و چه چیزی باید از وب سرور بارگیری شود.

در اصل CDNها قبلا فقط به ارائه محتوای استاتیک کمک می‌کردند. اما امروزه آنها کارهای بیشتری انجام می‌دهند، از کش کردن محتوای پویا گرفته تا مسیریابی داده‌ها و حفاظت DDoS. برخی دیگر مانند Akamai EdgeWorkers یا Cloudflare Workers حتی پیشنهاد اجرای کد را نیز می‌دهند.

روی هم رفته این بدان معناست که می‌توانید وب سایت خود را به طور فزاینده‌ای بر روی زیرساخت سرویس‌دهنده‌های CDN بارگذاری کنید، در نتیجه دیگر فشار زیادی به سرورهایتان وارد نمی‌شود.

2. از ابزار مناسب استفاده کنید

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

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

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

با اینکه پایگاه داده رابطه‌ای یک ابزار قدرتمند است، اما تنها راه حل نیست.

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

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

اما این ترسناک‌تر از آن چیزی است که به نظر می‌رسد. چرا که مقیاس بندی پایگاه داده رابطه‌ای در واقع دشوارتر است.

3. ایجاد انعطاف پذیری در برنامه

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

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

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

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

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

بدین ترتیب با بهره گیری از مقیاس بندی افقی و تعادل بار، برنامه‌ای را دارید که مقیاس بندی آن آسان‌تر و ارزان‌تر است.

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

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

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

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

4. اجرای کدها در لبه شبکه

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

این بستری را فراهم می‌کند تا بتوانید کد خود را بدون نیاز به وب سرورهای اصلی خود اجرا کنید.

Edge computing از بسیاری سرورهای لبه CDN استفاده می‌کند. این سرورها در سراسر جهان توزیع شده‌اند و در واقع با هدف کاهش زمان تاخیر و پهنای باند مورد استفاده قرار می‌گیرند.

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

بنابراین چه نوع asset یا کدی را می‌خواهید در لبه شبکه اجرا کنید؟ در حالت ایده آل می‌خواهید چیزهایی را که نیازی به state ندارند اجرا کنید. به عبارت دیگر، برای اجرای صحیح دیگر نیازی به ارتباط مجدد با وب سرور نیست.

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

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

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

5. ویژگی‌های جایگزین

علیرغم تلاش‌های شما برای به حداکثر رساندن عملکرد، در شرایطی به سر می‌برید که کمبود منابع وجود دارد. در این مورد بهتر است یک وب سایت ریسپانسیو (واکنش گرا) و اصولی داشته باشید تا یک وب سایت با ویژگی‌های فراوان که در دسترس نیست.

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

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

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

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

ادامه مقاله را در بخش دوم دنبال کنید.

منبع

 

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

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

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

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

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

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

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

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