gpt4 book ai didi

javascript - 如何为 Amazon ECS 上托管的服务器运行 Node.js 工作线程?

转载 作者:太空宇宙 更新时间:2023-11-04 00:24:05 24 4
gpt4 key购买 nike

我们在 Amazon ECS 上有一个 Node 服务器,每秒受到大约 100 次命中。由于 javascript 是单线程的,我们不想阻塞事件循环。因此,我们需要创建一个工作线程,定期从数据库中获取数据并将数据加载到内存中。这可能需要一段时间,因此我们想要创建一个工作线程,以便有一个不同的事件循环。我们如何使用 ECS 来做到这一点?我们可以只使用 npm 还是必须做一些特殊的事情,比如在 Amazon 控制台上设置额外的东西来拥有一个单独的工作人员?

最佳答案

首先,您可以使用cluster模块利用多核系统,这将提高服务器可以承受的负载。

基本集群示例

const cluster = require( 'cluster' );
const express = require( 'express' );

const port = 3000;
const numCPUs = require('os').cpus().length;

if (cluster.isMaster) {
console.log(`Master ${process.pid} is running`);

// Fork workers.
for (let i = 0; i < numCPUs; i++) {
cluster.fork();
}

cluster.on('exit', (worker, code, signal) => {
console.log(`worker ${worker.process.pid} died`);
});

} else {
let app = express();

app.get('/', (req, res) => {
res.send('Hello World!');
});

app.listen(port, () => {
console.log(`App listening on port ${port}!`);
});
}

AWS

您可以使用AWS Elastic Load Balancing这将在多个 EC2 实例之间进行负载平衡。然后,您可以使用 auto scaling 自动扩大或缩小 EC2 容量。 .

当您的服务器达到特定阈值时,自动扩展将启动 N 个实例,负载均衡器会将流量发送到这些实例。这样您就有多个 EC2 实例来处理请求。

So we need to create a worker that periodically fetches data from a database and loads the data into memory.

您可以拥有一个工作 EC2 实例(该实例不会接受请求,因此您不应将其添加到负载均衡器),它将执行您可能拥有的繁重任务,并将它们加载到 Redis 中。 ,亚马逊也支持 Amazon ElastiCache 。然后您的 Web 服务器实例将从 Redis 读取该数据。

这个工作实例只是一个普通的 EC2 实例。您可以像创建其他 EC2 实例一样创建它,您可能应该标记不同的标签,如下所示:

enter image description here

注意:这是执行您所要求的多种方法之一,我列出的所有服务都有替代方案,但为了保持“简单”,我只提供了您正在使用的 AWS 产品。

关于javascript - 如何为 Amazon ECS 上托管的服务器运行 Node.js 工作线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43531506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com