【发布时间】:2014-04-02 03:54:02
【问题描述】:
我们正在构建一个具有 Node.js 服务器和 Express 的基础架构。
在服务器中,发生的情况如下:
- 服务器接受来自客户端的传入 HTTP 请求。
- 服务器生成两个文件(这个操作可以“比较长”,也就是0.1秒左右)
- 服务器将生成的文件(每个约 20-200 KB)上传到外部 CDN
- 服务器响应客户端,其中包括 CDN 上文件的 URI
目前服务器对每个请求都按顺序执行此操作,并且效果很好(Node/Express 可以自动处理并发请求)。但是,随着我们计划的增长,并发请求的数量可能会越来越高,我们相信对我们来说最好实现一个队列来处理请求。否则,我们可能会面临同时运行的任务过多以及与 CDN 的打开连接过多的风险。快速响应客户无关紧要。
我的想法是在节点服务器中有一个单独的部分,其中包含 一些“工人”(2-3,但我们将进行测试以确定同时操作的正确数量)。 因此,新流程看起来像:
- 服务器接受客户端的请求后,将操作添加到队列中。
- 有 2-3 个(待测试)工作人员从队列中取出元素并执行所有操作(生成文件并将其上传到 CDN)。
- 当worker处理完操作(如果在队列中停留比较久也没关系),通知Node服务器(回调),服务器响应客户端(一直在等待同时)。
您如何看待这种方法?你认为它是正确的吗?
最重要的是,这如何在 Node/Express 中实现?
感谢您的宝贵时间
【问题讨论】:
标签: node.js concurrency express queue