Nest.js 集群
服务器集群是将多台服务器组成一个集群的方法,该集群由一组服务器组成,它们像一个单一系统一样运行。它与负载均衡不同。负载均衡是指将工作负载分配到多个计算资源上,例如计算机、服务器集群、网络链路等。
一般来说,集群可以最大限度地发挥服务器的处理器性能。如果你有8核处理器,可以将其全部配置成集群运行;即使你只需要2核处理器,也可以进行配置。
这次,我将讲解如何为 NestJS 创建集群。如您所知,NestJS 是一个可以用来构建 REST API 等应用程序的框架。我不会详细讲解其概念,而是直接进入正题,介绍它的工作原理。
安装
关于 Nestjs 的安装,您可以查看文档。完成所有步骤后,app-cluster.service.ts在src/目录中创建文件。
import * as cluster from 'cluster';
import * as os from 'os';
import { Injectable } from '@nestjs/common';
const numCPUs = os.cpus().length;
@Injectable()
export class AppClusterService {
static clusterize(callback: Function): void {
if(cluster.isMaster){
console.log(`Master server started on ${process.pid}`);
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}
cluster.on('exit', (worker, code, signal) => {
console.log(`Worker ${worker.process.pid} died. Restarting`);
cluster.fork();
})
} else {
console.log(`Cluster server started on ${process.pid}`)
callback();
}
}
}
然后,你可以main.ts在src/目录中调用它。
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { AppClusterService } from './app_cluster.service';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
//Call app-cluster.service.ts here.
AppClusterService.clusterize(bootstrap);
现在,使用 nodemon 或 pm2 运行你的应用程序。我使用 PM2 运行了项目。`.`pm2 start dist/main.js -i max用于-i max指示我们将使用多少个核心。如果 ` max.`,则表示我们将使用所有核心。或者,你可以直接将 `.` 替换max为指定的数字。(注意:运行 `npm run npm run builddev` 生成 dist 目录。)
如果其中一个工作进程崩溃或终止,服务器将准备一个新的工作进程来替换崩溃的工作进程,并将崩溃的工作进程自动转移到运行中的工作进程。
Github 仓库:https://github.com/danudenny/nestjs-cluster
我想就此进行更深入的探讨,或许我的某些说法有误,或者或许可以提出一些更有效率的建议。
文章来源:https://dev.to/danudenny/clustering-nest-js-2mj7

