performance - 使用内存不足的 Lambda 向 SQS 缓慢发送消息
问题描述
我们创建了一些示例 lambda 来测试 SQS 插入性能。起初,我们使用 128MB 的 lambda,平均插入 7KBytes 包的时间为 40ms。当我们将 lambda 升级到 256MB 时,我们得到了 20 毫秒的平均插入时间,当我们升级到 512MB 时,我们甚至得到了 11 毫秒的平均插入时间。
我们想知道为什么 lambda 的更大内存/cpu 会在 SQS 上获得更好的插入速度,因为我们认为 sqs 插入不应该与内存或 CPU 容量相关。综上所述:sqs客户端发送操作里面有没有需要好的CPU/Memory才能更好执行的操作?
谢谢!
这是我们的测试代码: public class Function {
public async Task<string> FunctionHandler(ILambdaContext context)
{
var client = new AmazonSQSClient();
var request = new SendMessageRequest
{
MessageAttributes = new Dictionary<string, MessageAttributeValue>(),
MessageBody = "7kbyte String here...",
QueueUrl = "https://our_account/sqs-test-queue "
};
//Just desconsidering the first 2 sent messages, to desconsider the initial connection overhead
var elapsed00 = await SendMessageResponse(client, request, -2);
var elapsed0 = await SendMessageResponse(client, request, -1);
double totalTime = 0;
const int totalIterations = 1000;
for (int j = 0; j < totalIterations; j++)
{
var elapsed = await SendMessageResponse(client, request, j);
totalTime += elapsed;
}
Console.WriteLine("$$$$$AVERAGE:" + ((double)(totalTime / totalIterations)));
return "End test";
}
private async Task<long> SendMessageResponse(AmazonSQSClient client, SendMessageRequest request, int i)
{
var stopwatch = new Stopwatch();
stopwatch.Start();
var response = await client.SendMessageAsync(request);
stopwatch.Stop();
//Console.WriteLine("&&&#####" + i + "Elapsed ms:" + stopwatch.ElapsedMilliseconds + ". For message ID '" +
// response.MessageId + "':");
i++;
return stopwatch.ElapsedMilliseconds;
}
}
解决方案
SQS 的行为与您的 lambda 大小没有什么不同,您在 Lambda 中运行的代码正在根据分配的内存/CPU 改变它的性能。
推荐阅读
- azure - 如何强制 Azure 数据工厂数据流使用 Databricks
- javascript - 将值从表单传递到另一个组件
- ios - 用于匹配带有小写和破折号的特定 URL 的正则表达式
- android - RecyclerView中没有数据时过滤错误空指针
- java - 在没有架构的情况下在 Avro 中序列化
- c++ - 在编译时断言 sizeof(obj) 并在实际大小不匹配时打印 (c++98)
- php - 带有 JQuery AJAX 请求的 WordPress codex 错误
- swift - force String to be of a certain struct type in func params in swift
- python - 安装 numpy、matplotlib、pandas、IPython 和 seaborn 时出错
- typescript - 错误消息:“接口只能扩展对象类型或对象类型与静态已知成员的交集”