Мы создали несколько лямбд-примеров для проверки производительности вставки SQS.
Сначала мы использовали 128 МБ лямбды и получили в среднем 40 мс для вставки пакетов по 7 КБ.
Когда мы обновили лямбду до 256 МБ, мы получили среднее значение 20 мс, а при обновлении до 512 МБ мы даже получили среднее время вставки 11 мс.
Мы хотели знать, почему большая память / процессор лямбды получает лучшую скорость вставки в SQS, потому что мы думали, что вставка sqs не должна быть связана с объемом памяти или процессором. Итак, есть ли какая-либо операция внутри отправки клиента sqs, для которой требуется хорошая производительность процессора / памяти?
Спасибо!
Вот наш тестовый код:
Функция публичного класса
{
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;
}
}