是否有服务或框架或任何方式允许我运行Node JS进行大量计算,让我选择核心数量?
我将更具体一点:假设我想为每个用户运行一些昂贵的计算,我有20000个用户。 所以我想在单独的线程/核心/计算机上为每个用户运行昂贵的计算,这样我就可以更快地完成所有用户的计算。
但是我不想处理低级别的服务器配置,所有我想要的东西都类似于AWS Lambda,但是对于高性能计算,即让我随意扩展(也许我想要1000个核心)。
我使用AWS Lambda模拟了这一点,它有一个“主”lambda,它接收所有20000个用户的数据,然后为每个用户调用“计算”lambda。问题是,使用AWS Lambda我无法同时发出20000个请求并等待它们的回调(我的请求限制超出了错误)。
通过一些设置,我可以使用Amazon HPC,Google Compute Engine或Azure,但它们只能达到64个内核,所以如果我需要更多内核,我仍然需要设置我需要的所有机器,并用Open MPI之类的方式编排它们之间的通信,处理主机和计算实例的不同低级设置(通过ssh访问等)。
那么有什么服务我可以粘贴我的Node JS代码,可能选择内核数量并运行(不必关心操作系统,或者我的群集中有多少台计算机)?
我正在寻找可以接受该代码的东西:
var users = [...];
function expensiveCalculation(user) {
// ...
return ...;
}
users.forEach(function(user) {
Thread.create(function() {
save(user.id, expensiveCalculation(user));
});
});
并在一个单独的核心上运行每个线程,以便它们可以同时运行(因此更快完成)。
答案 0 :(得分:1)
我认为您的问题是您觉得需要在同一台机器上同时处理20000个输入。你有没有看过亚马逊的SQS?也许您将这20000个输入推送到SQS,然后从该队列中拉出一组服务器并单独处理每个输入。
使用此方法,您可以根据需要添加任意数量的服务器,进程或添加任意数量的AWS Lambda调用。您甚至可以使用3的组合来查看更便宜或更快的内容。添加资源只会减少完成计算所需的时间。然后,您不必等待20000个请求或任何事情完成。该过程可以通过在完成后发送一些通知来告诉您何时完成计算。
基本上,你可以拥有一个简单的应用程序,它一次只能抓取其中的10个输入并对它们进行计算。完成后,您可以将此过程从SQS中删除并在某处发送通知(可能是SNS?)以通知用户或其他系统他们已完成。然后它会重复这个过程。
之后,您可以水平扩展该过程,您不需要超级计算机来处理它。因此,您可以获得一个EC2实例集群,这些实例会运行其中几个应用程序,或者定期调用Lambda函数,以便将项目从SQS中提取出来并进行处理。
修改强>
要开始使用EC2实例,我会查看文档here。首先,我会选择最小,最便宜的实例(我认为是T2.micro),并将所有内容保留为默认值。除了用于SSH的端口之外,不需要打开任何端口。
一旦设置并登录,您需要做的第一件事是运行aws configure
来设置您的配置文件,以便您可以从实例访问AWS资源。之后安装Node并使用git或其他东西在那里获取应用程序。一旦设置完毕,转到EC2控制台,在“操作”菜单中,将有一个从实例创建图像的选项。
创建映像后,您可以转到Auto Scaling组并使用该AMI创建启动配置。然后,它将允许您指定要运行的实例数。
我觉得使用他们的容器服务也可以更容易地做到这一点,但老实说我还不知道如何使用它。