网站首页 > 精选教程 正文
了解有关扩展 Node JS 应用程序的更多信息。
每当我们构建一个很棒的产品时,我们首先将它独立构建,但迟早它会吸引更多用户,然后我们的大脑开始考虑如何容纳更多用户,并且需要扩展应用程序。通常,扩展意味着为应用程序提供更大的弹性,使其能够承受大量用户并平稳运行而不会出现任何故障。
软件可扩展性是工具或系统根据用户需求增加其容量和功能的属性。可扩展的软件可以在适应变化、升级、大修和资源减少的同时保持稳定
因此,我们需要正确的软件协议和硬件来满足每分钟的大量请求 (RPM)。软件应用程序可以以一种可以正常工作的方式编写。另一方面,它的编写方式可以考虑到软件的可扩展性、维护性和弹性。
可扩展性可以通过水平或垂直缩放两种方式发生。
垂直扩展意味着为您的服务器增加更多的能力,比如更多的内存,增加 CPU 强度 等等,以便它处理更多的并发请求 ,但是垂直扩展的问题是在某个点上它有一些限制,比如你会进入资源匮乏状态。我们的第二个选项是水平扩展,在多台服务器上运行服务,每当请求到来时,它会在这些服务器之间进行负载平衡并提供响应。有关详细信息,请参阅此视频。
在这篇博客中,我们将主要关注水平扩展,我们将构建一个小型 Node JS 应用程序,然后将其水平扩展。
先决条件:
- 节点版本:v14.19.0
- npm 版本:v6.14.16
- Docker 安装在您的机器上:Docker 版本 20.10.12。和 docker-compose 安装在您的机器上。
我创建了一个节点 JS 应用程序,下面是 index.js 文件中编写的代码。
JavaScript
const http = require(‘http’);
const port = process.env.PORT || 5000;
const os = require(‘os’);
const handler = (request, response)=> {
if(request.method === ‘GET’ && request.url === ‘/’) {
return response.end(`Hello world! My hostname/container ID is: ${os.hostname} and no of core s : ${os.cpus.length}`);
}};
const server = http.createServer(handler);
server.listen(port, ()=> {
console.log(`Application listening on port ${port}`);
});
在上面的index.js 中, 我创建了一个在5000 端口上运行的简单节点 js 应用程序,为了启动节点 js 服务,只需运行以下命令
壳
node index.js
并且可以通过localhost:5000访问节点服务。
我们确实创建了一个简单的节点 JS 服务,但这里的问题是它对它可以处理的请求数量有限制,如果假设节点服务崩溃了,那么我们的服务将处于我们从未想要的不可访问状态发生。所以为了解决这个问题,我想出了一个处理这个问题的计划,在这里我将容器化应用程序,以便在单个服务器中我们可以运行节点 JS 服务的多个实例,并在实例之上添加一个负载均衡器,因此在接收请求时,负载均衡器将根据负载均衡算法路由到任何可用实例。所以要容器化节点服务,我们需要创建一个镜像并基于创建的镜像启动一个容器。我创建了一个Dockerfile,将从中创建一个 docker 映像。
Dockerfile
FROM node:17-alpine3.14
USER root
RUN mkdir /home/appWORKDIR /home/app
COPY — chown=node:node package.json ./
RUN npm install
COPY — chown=node:node . .
CMD [“node”, “src/index.js”]
运行容器需要以下步骤。
1. 运行docker build --tag="node-app-1" .
2. 运行。 docker run --publish 5000:5000 node-app-1
现在节点服务在容器内运行,可以通过 localhost:5000 访问该服务。
现在我们需要创建多个实例并向它们添加负载均衡器。为了创建多个实例,我们将借助 docker-compose 来帮助我们有效地启动容器并停止它们的容器。对于负载平衡,我将使用 NGINX。现在我们需要创建一个docker-compose.yaml 文件。
有关 docker-compose 的更多信息,请访问官方网站。
在这里,我们从 Nginx 中创建了一个Nginx容器:最新图像引用了这个并创建了一个Nginx.conf文件,我们在其中设置了负载平衡规则,并且当Nginx侦听HTTP 端口 80时,我们的节点应用程序也将侦听端口 80但在内部,它将负载平衡到可用的节点 JS 服务实例。
在这里,我们设置了上游部分,其中我们提到了 4 个服务器实例,并且每当服务器访问 http://localhost:80 时,它都会对请求进行负载平衡。
现在我们几乎已经完成了设置部分,只需要启动服务即可。现在我们需要使用以下命令运行应用程序
docker-compose up -d — 缩放 app=4
上面的命令将创建 4 个 Node App 实例和 Nginx 容器,它们将加载和平衡请求。
哇 !!!现在我们已经成功地扩展了我们的 Node 应用程序,并且请求由任何基于负载均衡器原理的可用 Node 实例提供服务。
整个代码可在Github Repository上找到。https://github.com/piyush-repo/scaling-nodejs-services-loadbalancing
感谢您阅读此博客。保持学习。
谢谢大家阅读,喜欢的朋友请关注点赞转发,带你了解最新技术趋势。
猜你喜欢
- 2024-10-05 如何基于搭建Nginx+Keepalived双机热备环境?
- 2024-10-05 如何在 Nginx 服务器中配置 GZip 压缩?
- 2024-10-05 JS SDK需求文档&设计文档 js sdk怎么写
- 2024-10-05 php宝塔搭建短网址生成自定义链接密码php源码
- 2024-10-05 php宝塔搭建实战网站本地目录列表程序php源码
- 2024-10-05 Nginx安装-Centos7 NGINX安装教程
- 2024-10-05 JVM性能调优监控工具jps、jstack、jmap、jhat、jstat使用详解
- 2024-10-05 Keepalived+Nginx高可用安装部署(含Nginx+Tomcat负载均衡)
- 2024-10-05 Nginx的安装以及反向代理和负载均衡
- 2024-10-05 centos7系统下Nginx配置搭建 centos7系统下nginx配置搭建手册
你 发表评论:
欢迎- 最近发表
-
- 我的世界光影MOD下载(我的世界光影mod下载安装)
- 我的世界1.7/1.8VoxelMap小地图MOD下载
- 我的世界1.7.10多世界 整合包(我的世界1.7.10forge整合包)
- 我的世界1.8最好用的修改器下载(我的世界1.8最好用的修改器下载安装)
- 我的世界更多弯曲动作MOD下载(我的世界更多弯曲动作mod下载手机版)
- 我的世界龙珠MOD下载(我的世界龙珠模组整合包下载)
- 我的世界1.7.10以太2 下载(我的世界以太2mod1.12.2)
- 我的世界虚拟人生MOD下载分享(我的世界虚拟人生下载安装)
- 我的世界无正版账号的简单联机方法(非网易版,仅适用于局域网)
- “我的语言极限,即是我的世界的极限。” ——《On Java》书籍推荐
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)