AWS API 网关缓慢
AWS API Gateway Slowness
这让我很不安。我有一个基本的 API 网关,应该以每秒 10,000 个请求和 5,000 个请求突发为上限。然而,当连接到 Lambdas 时,我目前能达到的最好速度是每秒约 70 个请求。
我拥有的端点是使用无服务器框架 (HTTP EDGE) 创建的基本 Lambda 代理。
我知道 lambda 本身不是瓶颈,因为我用空函数替换 lambda 时遇到了同样的问题。我为 lambda 分配了 100 多个并发,但 lambda 似乎从未达到限制。
functions:
loadtest:
handler: loadtest/index.handler
reservedConcurrency: 200
events:
- http: POST load_test
我想知道我是否忽略了这里的内容。我测试 运行s 一分钟并尝试达到 200 请求/秒(与其他人一起工作正常,所以这不是我的带宽)。延迟在某些时候会增加到 20-30 秒,所以很明显有些东西正在阻塞。
如果这是一个预热问题 - 我需要 运行 这样的负载多长时间才能让一切都变得 运行 暖和?
关于在哪里查看的任何想法或我可以分享的其他信息?
[编辑] 我正在使用 node12.x,我什至尝试使用此代码:
const AWS = require('aws-sdk');
AWS.config.update({region: '<my-region>'});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
exports.handler = async (event, context) => {
return {"status":"ok", ... }
};
结果基本一样。老实说,我不确定瓶颈在哪里。我可以尝试在 lambda 端使用并发进行进一步测试,但是从 100 到 200 没有任何效果 - 对于一个空函数,完成的请求时钟在 70/s 左右。
此外,我正在使用 loadtest npm 包来执行负载测试,输出如下所示:
{ totalRequests: 8200,
totalErrors: 0,
totalTimeSeconds: 120.00341689999999,
rps: 68,
meanLatencyMs: 39080.6,
maxLatencyMs: 78490,
minLatencyMs: 427,
percentiles: { '50': 38327, '90': 70684, '95': 74569, '99': 77679 },
errorCodes: {},
instanceIndex: 0 }
下图显示了那段时间预配并发的情况。我 运行 这超过 2 分钟,目标是 200 req/sec。
看来这实际上是 WSL2 和 NodeJS 的问题。它的确切性质尚不清楚,但这不是 API 网关本身的问题。我在 MacBook 上通过 运行 演示了这一点,一切正常,请求计数很高。
有帖子暗示这是 Node HTTP 客户端和 DNS 的问题,所以也许这是一个很好的起点,但上述问题没有实际意义。
这让我很不安。我有一个基本的 API 网关,应该以每秒 10,000 个请求和 5,000 个请求突发为上限。然而,当连接到 Lambdas 时,我目前能达到的最好速度是每秒约 70 个请求。
我拥有的端点是使用无服务器框架 (HTTP EDGE) 创建的基本 Lambda 代理。
我知道 lambda 本身不是瓶颈,因为我用空函数替换 lambda 时遇到了同样的问题。我为 lambda 分配了 100 多个并发,但 lambda 似乎从未达到限制。
functions:
loadtest:
handler: loadtest/index.handler
reservedConcurrency: 200
events:
- http: POST load_test
我想知道我是否忽略了这里的内容。我测试 运行s 一分钟并尝试达到 200 请求/秒(与其他人一起工作正常,所以这不是我的带宽)。延迟在某些时候会增加到 20-30 秒,所以很明显有些东西正在阻塞。
如果这是一个预热问题 - 我需要 运行 这样的负载多长时间才能让一切都变得 运行 暖和?
关于在哪里查看的任何想法或我可以分享的其他信息?
[编辑] 我正在使用 node12.x,我什至尝试使用此代码:
const AWS = require('aws-sdk');
AWS.config.update({region: '<my-region>'});
var sqs = new AWS.SQS({apiVersion: '2012-11-05'});
exports.handler = async (event, context) => {
return {"status":"ok", ... }
};
结果基本一样。老实说,我不确定瓶颈在哪里。我可以尝试在 lambda 端使用并发进行进一步测试,但是从 100 到 200 没有任何效果 - 对于一个空函数,完成的请求时钟在 70/s 左右。
此外,我正在使用 loadtest npm 包来执行负载测试,输出如下所示:
{ totalRequests: 8200,
totalErrors: 0,
totalTimeSeconds: 120.00341689999999,
rps: 68,
meanLatencyMs: 39080.6,
maxLatencyMs: 78490,
minLatencyMs: 427,
percentiles: { '50': 38327, '90': 70684, '95': 74569, '99': 77679 },
errorCodes: {},
instanceIndex: 0 }
下图显示了那段时间预配并发的情况。我 运行 这超过 2 分钟,目标是 200 req/sec。
看来这实际上是 WSL2 和 NodeJS 的问题。它的确切性质尚不清楚,但这不是 API 网关本身的问题。我在 MacBook 上通过 运行 演示了这一点,一切正常,请求计数很高。
有帖子暗示这是 Node HTTP 客户端和 DNS 的问题,所以也许这是一个很好的起点,但上述问题没有实际意义。