Медленная отправка сообщения в SQS с использованием лямбды с низким объемом памяти - PullRequest
0 голосов
/ 26 июня 2018

Мы создали несколько лямбд-примеров для проверки производительности вставки 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;
    }
}

1 Ответ

0 голосов
/ 27 июня 2018

SQS не ведет себя по-разному в зависимости от вашего размера лямбды, код, который вы запускаете в Lambda, меняет свою производительность в зависимости от выделенной памяти / ЦП.

...