رازهای High Performance در NestJS و Go

رازهای High Performance در NestJS و Go
شما یک سیستم بکاند با NestJS ساختهاید و همه چیز عالی کار میکند. اما ناگهان ترافیک بالا میرود و سرور شما شروع به کندی میکند. چرا؟ چون Node.js از یک Event Loop تکرشتهای استفاده میکند. اگر یک عملیات CPU-Bound (مثل پردازش تصویر یا رمزنگاری سنگین) انجام دهید، کل سرور قفل میشود.
🚀 راهحل چیست؟ ترکیب NestJS و Go!
NestJS برای مدیریت APIها و منطق کسبوکار فوقالعاده است. اما برای پردازشهای سنگین، میتوانیم از Go (به خاطر Goroutines و سرعت بالا) استفاده کنیم.
معماری پیشنهادی:
- NestJS (API Gateway): دریافت درخواستها، احراز هویت و اعتبارسنجی.
- RabbitMQ: صف پیام برای انتقال دادهها.
- Go (Worker Service): دریافت پیام از صف و انجام پردازشهای سنگین.
💻 چطور این کار را انجام دهیم؟
۱. NestJS پیام را در صف میگذارد:
// در کنترلر NestJS
await this.rabbitClient.send('heavy_task', { fileId: 123, operation: 'resize' });
return { message: 'در حال پردازش...' };
۲. سرویس Go پیام را میخواند و پردازش میکند:
// در سرویس Go
msgs, _ := ch.Consume("heavy_task", "", true, false, false, false, nil)
for msg := range msgs {
// پردازش سنگین (مثلاً تغییر سایز ۱۰۰۰ عکس)
processImage(msg.Body)
}
🛠 بهینهسازیهای کلیدی در NestJS
حتی اگر از Go استفاده نکنید، این تکنیکها سرعت NestJS را چند برابر میکند:
استفاده از Connection Pooling: در typeorm.config.ts، حتماً max و min اتصال به دیتابیس را تنظیم کنید.
کش کردن با Redis: برای درخواستهای GET که تغییر نمیکنند، از کش استفاده کنید (همانطور که در سایت خودم پیادهسازی کردم).
جلوگیری از awaitهای بیمورد: اگر به پاسخ یک عملیات نیاز ندارید، از Promise.all یا اجرای موازی استفاده کنید.
استفاده از Fastify به جای Express: در فایل main.ts، اگر از Fastify استفاده کنید، سرعت پاسخدهی تا ۲ برابر افزایش مییابد.