محتوای آموزشی وبلاگ نتآرام
برنامهٔ Node.js شما روی لپتاپ خوب کار میکند، اما وقتی چند نفر همزمان وارد سایت میشوند، پاسخها کند میشود. اولین فکر معمولاً این است: «هاست ضعیف است؛ یک سرور مجازی بگیرم.» گاهی این تصمیم درست است، ولی گاهی برنامه روی سرور قویتر هم همان مشکل را دارد. در این آموزش میخواهیم قبل از خرید، بفهمیم برنامه واقعاً به چه چیزی نیاز دارد.
اگر تازه شروع کردهاید، لازم نیست همهٔ اصطلاحات این صفحه را حفظ کنید. دو سؤال اصلی داریم: آیا برنامه برای انجام کارها منتظر میماند؟ و آیا حافظهٔ کافی برای اجرای آن داریم؟ نتیجهٔ این دو بررسی کمک میکند بین هاست Node.js و سرور مجازی انتخاب بهتری داشته باشید.
هاست Node.js چه فرقی با سرور مجازی دارد؟
در هاست Node.js معمولاً بخشی از کارهای ادارهٔ سرور را میزبان انجام میدهد. برنامه را مطابق امکانات پنل اجرا میکنید و به اندازهٔ محدودیت پلن، منابع و دسترسی دارید. برای یک سایت یا API ساده، این روش میتواند دردسر کمتری داشته باشد. پیش از خرید باید نسخهٔ Node.js، روش اجرای برنامه، محدودیت حافظه و امکان دیدن خطاها را بپرسید؛ نام سرویس بهتنهایی این اطلاعات را مشخص نمیکند.
در سرور مجازی دست شما برای نصب برنامهها و تنظیم سرویسها بازتر است. مثلاً میتوانید برنامهٔ وب، Redis و یک پردازش جدا برای ارسال ایمیل داشته باشید. در مقابل، بهروزرسانی، امنیت و مراقبت از سرویسها هم باید توسط شما یا مدیر سرورتان انجام شود. آزادی بیشتر زمانی مفید است که واقعاً به آن نیاز داشته باشید.
چرا گاهی یک کار سنگین، همهٔ درخواستها را معطل میکند؟
Node.js برای هماهنگکردن بسیاری از کارها از سازوکاری به نام Event Loop استفاده میکند. تصور کنید مسئول پذیرش یک دفتر باید نوبت همه را مدیریت کند. اگر همان مسئول مجبور شود یک محاسبهٔ طولانی انجام دهد، رسیدگی به بقیه هم عقب میافتد.
در برنامه هم کارهایی مانند پردازش طولانی داده با JavaScript یا استفاده از بعضی دستورهای همزمان میتوانند این اتفاق را ایجاد کنند. اما اگر برنامه منتظر پاسخ دیتابیس باشد، علت و راهحل ممکن است متفاوت باشد. به همین دلیل «صفحه دیر جواب داد» بهتنهایی ثابت نمیکند CPU یا هاست ضعیف است.
اگر توسعهدهندهٔ برنامه هستید، کد زیر را یک بار در فایل شروع همان برنامهٔ در حال اجرا قرار دهید. اجرای آن در یک فایل جدا، وضعیت سایت شما را اندازه نمیگیرد:
کد / دستورconst { monitorEventLoopDelay } = require('node:perf_hooks');
const delay = monitorEventLoopDelay({ resolution: 20 });
delay.enable();
setTimeout(() => {
const memory = process.memoryUsage();
console.log({
loopDelayP99Ms: Math.round(delay.percentile(99) / 1e6),
rssMiB: Math.round(memory.rss / 1024 / 1024),
heapMiB: Math.round(memory.heapUsed / 1024 / 1024)
});
delay.disable();
}, 60000).unref();
این نمونه برای برنامههایی است که از
require استفاده میکنند. اگر پروژهٔ شما با import نوشته شده، توسعهدهنده باید همان بخش واردکردن ابزار را با ساختار پروژه هماهنگ کند. نتیجه بعد از یک دقیقه در خروجی برنامه یا بخش لاگ پنل ظاهر میشود. در آن یک دقیقه، کارهای معمول سایت را انجام دهید؛ آزمایش در زمان بیکاری تصویر کامل استفادهٔ واقعی را نمیدهد.عدد
loopDelayP99Ms تأخیری را نشان میدهد که ۹۹ درصد نمونههای این دوره از آن بیشتر نبودهاند. آن را با دورهٔ خلوت و شلوغ خودتان مقایسه کنید، نه با یک عدد جادویی برای همهٔ سایتها. مستند ابزار اندازهگیری Node.jsحافظهٔ مورد نیاز را چطور حساب کنیم؟
در خروجی،
rssMiB میزان حافظهٔ مقیم فرایند است؛ یعنی بخش مهمی از مصرف واقعی برنامه در حافظه. heapMiB فقط حافظهٔ بخشی از دادههای JavaScript است. برای انتخاب پلن، تکیهکردن به عدد دوم میتواند مصرف را کمتر از واقع نشان دهد.مثلاً اگر برنامهٔ وب هنگام کار ۲۵۰ مگابایت مصرف میکند و پردازش ارسال ایمیل هم ۱۵۰ مگابایت میخواهد، فقط همان ۲۵۰ مگابایت را حساب نکنید. این اعداد صرفاً مثالاند. اگر چند نسخه از برنامه اجرا میکنید، باید مصرف همه، سرویسهای دیگر و فضای لازم برای افزایش موقت مصرف را در نظر بگیرید. محدودیت واقعی پلن را هم از میزبان بپرسید.
حالا کدام سرویس مناسبتر است؟
اگر برنامه کوچک است، به سرویسهای اضافه نیاز ندارد و داخل محدودیتهای اعلامشده جا میشود، هاست Node.js میتواند شروع سادهتری باشد. اگر اجرای پردازشهای جدا، تنظیمات خاص یا کنترل بیشتری لازم دارید، بررسی سرور مجازی منطقی است.
اما اگر هنگام کندی، تأخیر Event Loop زیاد میشود، ابتدا همان کار سنگین را در برنامه پیدا کنید. اگر حلقهٔ رویداد آرام است ولی پاسخ دیتابیس دیر میرسد، مسیر دیتابیس را بررسی کنید. اطلاعات مفید برای توسعهدهنده یا پشتیبانی، زمان کندی، کاری که کاربر انجام داده، لاگ همان زمان و مصرف حافظه است؛ با این شواهد، خرید سرویس جدید از یک حدس به تصمیمی قابل توضیح تبدیل میشود.
برچسبها:
اشتراکگذاری:
لینکدینتلگرامایکس
مقاله قبلی
مقاله قبلی وجود ندارد.
مقاله بعدی
دیدگاهها (۰)
دیدگاههای تاییدشده و پاسخهای تیم نتآرام
