网站首页 > 技术教程 正文
了解有关扩展 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-11 Nginx自定义数据结构之字符串(String)数组(Array)链表(List)
- 2024-10-11 那些你不知道的?——支付宝架构师眼中的高并发架构
- 2024-10-11 脚本语言,node在前端都有什么作用?
- 2024-10-11 什么是Java开发人员的Node.js?(java node是什么)
- 2024-10-11 提高 kubernetes 集群管理工具 kubectl 使用生产力
- 2024-10-11 Docker 快速部署一个 node App(docker如何部署)
- 2024-10-11 基于阿里云的 Node.js 稳定性实践
- 2024-10-11 从静态到node再到负载均衡,你知道多少?【前端篇】
- 2024-10-11 高效管理 Kubernetes 集群之道(kubernetes集群应用部署的哪些功能)
- 2024-10-11 Vue 项目部署到服务器的问题解决方法
你 发表评论:
欢迎- 最近发表
-
- Linux新手必看:几种方法帮你查看CPU核心数量
- linux基础命令之lscpu命令(linux中ls命令的用法)
- Linux lscpu 命令使用详解(linux常用ls命令)
- 如何查询 Linux 中 CPU 的数量?这几个命令要知道!
- 在linux上怎么查看cpu信息(linux如何查看cpu信息)
- 查看 CPU 的命令和磁盘 IO 的命令
- 如何在CentOS7上改变网卡名(centos怎么改网卡名字)
- 网工必备Linux网络管理命令(网工必备linux网络管理命令是什么)
- Linux 网络命令知多少(linux 网络 命令)
- Linux通过命令行连接wifi的方式(linux命令行连接无线网)
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)