首页 > 解决方案 > nodejs express server api - 大量请求 - 事件循环卡住了吗?

问题描述

因此,假设我有 2 个相互通信的微服务 - MS1 和 MS2。

所以对于这个例子,MS1 有 150 个从 MS2 获取的请求,我使用 Promise.all 来发送它们。

对于来自 MS1 的每个请求,MS2 都会对我无法控制的另一台服务器进行 axios.get 调用。这个服务器的反应时间非常慢——比如每次调用最多 10 分钟。

因此,在等待其他服务器时,MS2 正在接受下一个请求。

所以,我有 150 个请求,每次我们等待慢速服务器时,我猜测 API 开始处理下一个请求。

我的服务器还有一个用于 kubernetes 的 /health 端点,在收到所有这些请求时,MS2 停止响应或对 /health 响应非常缓慢,这导致 kubernetes 终止并重新启动我的 pod。

这是因为对 MS2 的过多请求阻塞了事件循环吗?还是我在这里错过了其他东西?

添加代码:MS1:API


const express = require('express');
const router = express.Router();
var axios = require('axios')
var test = require('./test')


module.exports = router.get('/placeHolder', async (req, res, next) => {

    console.log("im working");

    // test();

    // console.log("test done");
    try {


        var x = await test();

        res.status(200);

        res.json({
            test: x
        });
    }
    catch (err) {

        res.status(500)

        res.json(err)

    }




});


MS test.js:

var axios = require('axios')
module.exports = async () => {

    try {

        var x = await axios.get("http://localhost:8096/placeholder_services/placeholder2")

        return x
    }
    catch (err) {

        console.log(err.message);


        return err

    }



}

MS2 API:


const express = require('express');
const router = express.Router();




module.exports = router.get('/placeHolder2', async (req, res, next) => {

    console.log("im working");




    setTimeout(() => {

        console.log("im done");

        res.status(200);

        res.json({
            test: "ok"
        });
    }, "60000");



});


假设我同时通过邮递员发送 150 个请求

谢谢 :)

标签: node.jskubernetesaxiosevent-loop

解决方案


推荐阅读