节点JS工作者 - 他们需要什么?

Guy*_*den 20 message-queue node.js

原谅我的无知,但是来自Django/Python背景我可以看到让Celery队列在后台运行较慢进程的巨大好处,同时尽可能快地更新Web界面.

但是,由于Node异步工作,队列系统的用例是否会大大减少?

例如:

1 - 用户向网站发布内容,2 - 网站响应,然后邮寄管理员.

在Django中,您将管理邮件发送到任务,稍后执行,然后响应请求.芹菜在后台发送邮件.

在Node中,您调用邮件程序,然后回复请求.然后邮件程序发送回叫以表示DONE与否,此时用户已经在查看响应.

那么我为什么要使用Node队列呢?我猜测事情比这更复杂 - 似乎对于像交易邮件那样的琐碎事情,它没有必要......

或者我误解了它的运作方式!?

And*_*dyD 7

你是对的,节点中的延续非常好,如果你在单个节点进程中运行所有东西,就不需要立即进行队列.但是,由于节点是单线程的,节点在忙于发送该电子邮件或处理该任务时(如果它是一个CPU密集型任务)将无法处理任何新的传入请求

因此,如果您的任务需要一段时间来处理CPU,那么使用外部队列和单独的进程处理这些任务/消息可能仍然是值得的.如果您的任务非常密集并需要一段时间,因为他们正在等待来自其他服务器的响应,那么由于节点处理好io,因此不再需要.

如果你有一个cpu密集型任务,但你不想部署一个队列,你可以创建更多的节点进程和机器实例以及它们之间的负载平衡,所有这些都让他们处理这些任务.这种方法的缺点是您无法单独扩展网站和后台处理.(例如,5个处理Web请求的实例和2个工作者实例)

  • (边缘)清晰度的改述:如果您的并行执行涉及大量等待HTTP或文件系统请求返回,那么节点的内置异步I/O将为您提供足够的并行性.如果您的并行执行涉及在本地运行大型计算(转码视频;运行模拟),那么节点的单线程性质将阻止您,如果可能,您将需要将工作转移给工作人员. (3认同)