在节点上加载一个负载

我们有一个C#Web API服务器和一个Node Express服务器。 我们从C#服务器发出数百个请求到节点服务器上的路由。 节点服务器上的路由确实需要大量工作,并且通常不会返回6-8秒。

同时做出数百个这样的请求似乎会导致节点服务器失败。 节点服务器输出中的错误包括socket hang upECONNRESET 。 从C#方面的错误说

由于目标机器主动拒绝,所以不能build立连接。

处理不可预知数量的请求后发生此错误,这导致我认为它只是重载服务器。 在C#端使用Thread.Sleep(500)可以让我们获得更多的请求,并且在等待时摆弄或多或less的成功,但是线程hibernate很less有正确的答案,我认为这种情况是没有例外。

我们是不是把太多的压力放在Node服务器上? 这只能通过负载均衡或某种forms的集群来解决吗? 如果还有其他的select,它会是什么样子?

我开始探索的一条path是node-toobusy模块。 如果我返回503,下面的代码应该是什么过程? 我应该Thread.Sleep ,然后重新提交请求?

这听起来像你的node.js服务器越来越重。

节点服务器上的路由确实需要大量工作,并且通常不会返回6-8秒。

这是一个难闻的气味 – 如果你的节点进程正在进行紧张的计算,它将暂停事件循环,直到计算完成,并将无法处理任何其他请求。 你应该可以让它在一个工作进程中进行这个计算,如果可以的话,它将在另一个cpu核心上运行。 cluster是内置节点模块,可以让你做到这一点,所以我会指出你。

我开始探索的一条path是node-toobusy模块。 如果我返回503,下面的代码应该是什么过程? 我应该Thread.Sleep,然后重新提交请求?

这取决于您的应用程序和您的预期负载。 如果在这段时间内可能会有足够的冷却,您可能需要刷新一次或两次,但是对于您的API,您可能只想在C#中返回一个503(最好是让客户端知道服务器太忙并让它们作出自己的决定,然后代表它保持清爽。