node.js - 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 个请求
谢谢 :)
解决方案
推荐阅读
- python - 在一个数据框中合并多个 XLSX 工作表
- ios - movesense iOS 中的 Meas/ECG NOT_FOUND
- powershell - AD 用户导出/导入
- openscad - Openscad:从左括号中获取错误消息;为什么我不能重新分配数组变量?
- python - 如何检查我的 TensorFlow 代码是否正确?
- elixir - 有没有办法直接从 Elixir 中的元组返回一个值?
- android - 如何制作仅检测特定蓝牙设备的 Android 应用
- google-cloud-platform - 如何立即删除 GCP 项目?
- c# - 第二次登录 AAD 后,后续尝试失败
- reactjs - 为什么我们不能在不调用 setState() 的情况下更改 React 中的状态