NestJS — Node.js للمؤسسات

الأداء و Keep-Alive والإيقاف اللطيف

18 دقيقة الدرس 78 من 80

الأداء و Keep-Alive والإيقاف اللطيف

الأداء ليس سرعة الإطار فقط. يشمل إعادة استخدام الاتصالات، وحجم الحمولة، واختيار المحول، وسلوك الإيقاف، وتنظيف الموارد، وكيف يستجيب التطبيق عندما تطلب Kubernetes أو systemd إيقافه.

الفكرة الأساسية

تدور هذه الميزة حول التحكم في كيفية تنظيم التطبيق وسلوكه وقت التشغيل. النقاط التالية هي ما يجب أن يعرفه المطور قبل استخدامها في مشروع حقيقي:

  • تقلل اتصالات keep-alive تكلفة مصافحات TCP/TLS للاتصالات المتكررة.
  • يسمح الإيقاف اللطيف لـ Nest بتشغيل خطافات دورة الحياة وإغلاق عملاء قاعدة البيانات وRedis والوسيط.
  • تربط enableShutdownHooks() إشارات العملية بأحداث دورة حياة Nest.
  • قد يحسن Fastify الإنتاجية، لكن تصميم الحمولة والتخزين المؤقت وزمن الخدمات التابعة غالباً أهم في الأداء الحقيقي.
  • ينبغي غالباً تنفيذ الضغط والتخزين المؤقت قرب الحافة للحركة العامة.

مثال عملي

يوضح المثال التالي الشكل العملي للفكرة داخل مشروع NestJS. ليست الغاية حفظ الكود، بل فهم مكانه في المعمارية:

async function bootstrap() { const app = await NestFactory.create(AppModule); app.enableShutdownHooks(); await app.listen(3000); } @Injectable() export class PrismaService extends PrismaClient implements OnModuleDestroy { async onModuleDestroy() { await this.$disconnect(); } }
ملاحظة تصميمية: التطبيق السريع الذي يسقط الطلبات الجارية أثناء النشر ليس جاهزاً للإنتاج. يجب أن يشمل عمل الأداء الإقلاع والحالة المستقرة والإيقاف.

قائمة تطبيق إنتاجية

  • فعّل خطافات الإيقاف في الخدمات المنشورة.
  • أغلق عملاء قاعدة البيانات وRedis وHTTP والوسيط في خطافات الإتلاف.
  • استخدم keep-alive agents لاتصالات HTTP الخارجية عالية الحجم.
  • قس p95/p99 قبل تحسين محول الإطار.
قاعدة عملية: إذا جعلت الميزة الحدود أوضح والاختبارات أسهل فهي اختيار جيد. إذا أخفت التبعيات أو صعّبت التتبع، فأعد التصميم.

الخلاصة

يغطي هذا الدرس جزءاً متقدماً من NestJS يجب فهمه عند بناء تطبيقات مؤسسية. ركّز على الحدود الواضحة، والسلوك القابل للاختبار، واختيار الأداة المناسبة للسياق بدلاً من استخدام كل ميزة في كل مكان.