问题标签 [node-cluster]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
node.js - 提高 Node JS 服务器应用程序吞吐量的步骤
我有一个非常简单的 nodejs 应用程序,它通过 POST 请求正文接受 json 数据(大约 1KB)。响应会立即发送回客户端,并且 json 会异步发布到 Apache Kafka 队列。同时请求的数量可以高达每秒 10000 个,我们使用在三台不同机器上运行的 Apache Jmeter 进行模拟。目标是在没有失败请求的情况下实现小于一秒的平均吞吐量。
在 4 核机器上,该应用程序每秒处理多达 4015 个请求而没有任何故障。然而,由于目标是每秒 10000 个请求,我们将节点应用程序部署在集群环境中。
实现了同一台机器上的集群和两台不同机器之间的集群(如此处所述)。Nginx 被用作负载均衡器,以轮询两个节点实例之间的传入请求。我们预计吞吐量会显着提高(如此处所述),但结果恰恰相反。成功请求的数量下降到每秒大约 3100 个请求。
我的问题是:
- 集群方法可能出了什么问题?
- 这甚至是提高 Node 应用程序吞吐量的正确方法吗?
- 我们还对 Tomcat 容器中的 Java Web 应用程序进行了类似的练习,它在单个实例中执行了预期的 4000 个请求,在具有两个实例的集群中执行了大约 5000 个成功请求。这与我们认为 nodejs 比 Tomcat 性能更好的信念相矛盾。由于每个请求模型的线程,tomcat 通常会更好吗?
提前非常感谢。
node.js - 如何查看哪个集群worker响应了nodejs?
每次向服务器发出请求时,某人如何查看哪个集群工作者响应console.log
?我正在使用快递。
node.js - How to use nodeJS cluster with mySQL pool cluster?
Quick question
If I make a node cluster application with 4 workers (4 instances of my application), should I use mySQL pool or mysql pool cluster? If I use pool it will create one pool for each application but If I use pool cluster it will create 4 pools for each application (16 total). Is this a good implementation or will it actually slow the performance?
Let's make a fake example to illustrate what I am asking. I am creating a nodeJS server app like this.
First, let's make the configuration file for the mysql database (important is the last section of this file where I make the db workers):
DBconfig.js
Then I create a global Library to use in my application where I have my database connection function
globalLib.js
app.js
and in the end I have a cluster file from where I start the server (everything here is important):
cluster.js
Let's assume that I have 4 cpus, so there will be 4 instances of my app.js. Therefore I create 4 database workers one for each cpu in each application so in the end I have:
So that leaves me with a lot of db workers ... The question is, is this a good implementation of nodeJS cluster and mySQL pool cluster? If not which is the right way?
node.js - Node.js 集群:获取所有连接
我需要计算出整个node.js
集群的所有活动连接的数量。我使用 IPC 实现了一个肮脏的解决方案,该master
过程跟踪每个人的响应worker
,然后返回总和。难道没有更简洁的方法来计算整个活动连接的数量cluster
吗?
node.js - Node.js Cluster Worker:关闭事件
考虑以下node.js
集群配置。如何打开off
回调以防止进一步的消息回调?碰巧没有off
方法。我必须用一个新的回调来更新回调,而且似乎所有旧的回调都被触发了。
node.js - NodeJS Agenda 调度程序:集群有 2 或 3 个工作人员,作业没有得到“分配”均匀
我正在使用出色的 NodeJS Agenda 任务调度程序 ( https://github.com/agenda/agenda ) 在我的 Node/Express 应用程序中安排后台作业。
议程也可以在节点集群配置中运行,但是我遇到了一个问题(也许我忽略了一些东西,因为这看起来很基本)。
所以我使用了自述文件(https://github.com/agenda/agenda#spawning--forking-processes)中的代码示例来建立一个有 N 个工作人员的集群,每个工作人员(节点集群进程)都有一个议程实例。
现在假设我有 2 个工作人员(进程)并且我从工作人员 1 调用“agenda.now()”,那么这两个工作人员中的任何一个都可以拾取(处理)它,因为他们都在监视队列,对吗?
然而,我总是看到第一个工人接手工作,其他人没有接手工作。
我在看什么?所有的工人都应该监控队列,所以他们都应该接手工作。
node.js - 共享相同 IP 地址的用户的 NodeJS 粘性会话
我们的NodeJS
(使用套接字和 HTTP)项目正在被共享相同公共 IP 地址的用户(所有人都在同一个办公室、同一个网络工作)使用。我已经放置了一个粘性会话实现,它根据用户的公共 IP 地址生成一个哈希,然后为它分配一个节点工作者。这种粘性是socket.io
工作所必需的。由于所有用户都共享相同的公共 IP 地址,因此哈希值始终相同,因此仅使用一名工作人员。所有其他工人都没有被使用:-(
由于我使用net.createServer
带有选项的非常低级别的 NodeJS 的 API pauseOnConnect
,我无法获取任何其他信息,例如标头、cookie 来为每个用户创建唯一的哈希。
问题:
真的需要这种粘性吗?我
socket.io-redis
用来广播消息。不确定此适配器是否会帮助我处理套接字连接,并且不需要管理明确的粘性。我试过这个,但似乎没有工作。是否可以从发出的连接对象中读取标头/cookie
net.createServer
?我认为这是不可能的,因为它在这个级别上没有任何 HTTP 实现。是否可以利用
http.createServer
API 并将请求对象从主进程传递给工作人员。通过这种方式,我可以读取标题/cookie 并生成唯一的哈希。最坏的情况,是否可以在代理级别(使用
nginx
)覆盖客户端的 IP 地址并为每个用户设置一些虚拟的唯一 IP 地址。
javascript - 总结工人 NodeJS 的价值
我有主人和工人并行计算一些东西。
如何总结他们的结果?
每个工人完成他的工作后,他自杀了,'res'变量没有价值,所以不可能将它累加到任何变量中。
有什么办法吗?
node.js - 使用多个服务器实例扩展 websockets/ws
我在单机上使用websockets/ws 。它工作正常。我想在多核和多个实例上水平扩展它。对于多核,我尝试使用pm2,它似乎工作得很好。
第一问:这是最好的方法还是合适的方法?这是我用 pm2 的测试代码
和客户端 websocket 实例
只需使用 pm2 运行服务器和客户端
如果您现在看到日志,pm2 logs ws-client
每个客户端每秒都会访问相同的连接(在服务器上)。因此,对于多核 ws,PM2 可以很好地工作。
第二问:如何扩展多个实例? 我刚刚看到了用于水平缩放的SocketCluster,但是它可以与 websockets/ws 一起使用,因为我已经用 ws 开发了代码。水平缩放的其他解决方案可能是什么。