如何为托pipe在Amazon ECS上的服务器运行Node.js工作?

我们在Amazon ECS上有一个节点服务器,每秒钟可以达到100次左右。 由于JavaScript是单线程的,我们不想阻塞事件循环。 所以我们需要创build一个定期从数据库中提取数据并将数据加载到内存中的工作者。 这可能需要一段时间,所以我们要创build一个工作人员,所以有一个不同的事件循环。 我们怎样才能用ECS做到这一点? 我们可以只使用一个npm,或者我们必须做一些特别的事情,比如在亚马逊的控制台上设置额外的东西来build立一个单独的工作者?

首先,您可以使用集群模块利用多核系统,这将改善服务器可以承受的负载。

基本集群的例子

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

您可以使用将在多个EC2实例之间进行负载平衡的AWS Elastic Load Balancing 。 然后,您可以通过自动缩放自动缩放 EC2容量。

当您的服务器达到特定阈值时,自动扩展将启动N个负载均衡器将向其发送stream量的实例。 这样你有多个EC2实例为请求服务。

所以我们需要创build一个定期从数据库中提取数据并将数据加载到内存中的工作者。

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

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

在这里输入图像说明

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