从并行任务收集信息的最佳实践

时间:2018-10-16 11:20:17

标签: node.js

我开始在node.js世界中前进。

我决定通过构建监视器项目来了解更多信息,用户将输入一个域,监视器将对该域运行多个并行扫描。

我的问题是运行并行任务的最佳实践是什么? 运行完所有扫描后,我如何才能“知道”它们何时完成并将信息收集到中央位置,在那里我可以处理和保存信息/日志?

到目前为止,我最好的主意是对每次扫描使用Promise,然后使用Promise.all

const scan1 = require('./modules/scan1');
const scan2 = require('./modules/scan2');
const scan3 = require('./modules/scan3');

Promise.all([scan1, scan2, scan3]).then(function(values) {
    // Get the info here and final loginc
   console.log(values);
});

一个棘手的问题,如果我要扩展并运行200个域,并且每个域都有不同的扫描范围(例如正常运行时间)?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

[...]运行并行任务的最佳实践是什么? [...]

     

这个棘手的问题,如果我想扩展并运行200个域,并且每个域都   此域的扫描方式不同(例如正常运行时间)?

有关扩展的注意事项:

  

·纵向扩展:您可以通过在现有计算机上增加更多功率(CPU,RAM)来扩展。

如果您有一台强大的计算机,则可以受益于多线程,产生一个新进程,该进程将对每个要扫描的域执行特定任务(或一组任务)。 CPU功能越多,您可以同时扫描的域越多。

  

·水平扩展:您可以通过在资源池中添加更多计算机来扩展规模。

如果您要使用一组计算机,那么我建议您有一个可以充当主服务器的主机,将工作队列分配给其他主机(从机/工人)。


所以首先要确定哪种缩放方法最适合您自己的需求...

要在不同计算机上运行并行任务还是要在同一台计算机上运行并行任务

您甚至可以“无服务器”地执行某些任务(结合Google cloud functionsAWS Lambda


既然您说您对学习感兴趣: