В API Gateway иногда появляются ошибки 5XX в рабочей среде - PullRequest
0 голосов
/ 28 сентября 2018

Наши API Gateway и Lambdas регулярно используются и работают в большинстве случаев просто отлично, однако время от времени мы наблюдаем всплеск ошибок 5XX, что вызывает скачок жалоб клиентов и другие проблемы.Когда я просматриваю логи за это время, я вижу поток следующей ошибки:

Execution failed due to configuration error: Malformed Lambda proxy response

Других подробностей кроме этого нет.Через 10 или 15 минут он уйдет вместе с жалобами клиентов.Я читал, что это может произойти, если вы превысите свой лимит параллелизма, но, глядя на панель мониторинга, не похоже, чтобы мы когда-либо превышали 150 одновременных выполнений.

Сами вызовы, на которые выполняются вызовы, также работают последовательноКроме этих случайных всплесков в 5XX.

Что еще может быть причиной этого несоответствия?

Просматривая журналы, чтобы попытаться выяснить это.Я сделал журналы максимально подробными, и там ничего нет.У нас будет нормальный вызов с ответом об успешном завершении, а через несколько минут эта ошибка появится без других журналов, только одна ошибка.Через несколько минут после этого у нас появляются журналы для следующего успешного вызова.

10:25:42 Successfully completed execution
10:25:42 Method completed with status: 200
10:42:01 Execution failed due to configuration error: Malformed Lambda 
proxy response
12:21:21 Successfully completed execution
12:21:21 Method completed with status: 200

Запись в журнал не может идти дальше, потому что лямбды даже не выполняются.Таким образом, у нас нет подробных данных о полезной нагрузке, отправленной на него, или о какой-либо внутренней регистрации для вызова и т. Д. Он просто сразу дает сбой на уровне шлюза API.

Редактировать: Мы все еще получаем эти всплески, но мы работаем надрасщепляя лямбды больше.У нас есть приложение ExpressJS, которое обрабатывает львиную долю всех запросов.Таким образом, мы разбиваем больше, особенно запросы с большим трафиком, на их собственные лямбды, чтобы посмотреть, поможет ли это.В случае, если существует проблема, из-за которой контейнер слишком перегружен или истекает время ожидания, потому что он обрабатывает долго выполняющиеся запросы (которые занимают более 20 с), а также блокируется запросами, которые заканчиваются <500 мс. </p>

ДругоеТеория заключается в том, что, возможно, существует ошибка, которая запускается где-то, что убивает процесс или что-то еще, и этот контейнер является плохим, пока он не будет уничтожен и возрожден.Как эти всплески, а затем уходят через несколько минут.Таким образом, увеличение количества лямбд должно уменьшить вероятность ошибок от одного каскадирования и повлиять на все остальные запросы.

Мы также увеличиваем ресурсы лямбда-функции, чтобы посмотреть, поможет ли это в обработке такого большого количества запросов.

1 Ответ

0 голосов
/ 29 сентября 2018

Обычно это происходит, когда время ожидания вашего вызова истекло, и если есть задержка выполнения лямбды.

Если вы обращаетесь к внешнему ресурсу, такому как RDS, или к внешнему сетевому вызову, оберните егообещание и справиться с таймаутом.Таким образом, вы можете определить, какой ресурс имеет узкое место или занимает много времени для выполнения.

exports.handler = function(event, context, callback) { 

var response = {}; // set the response object
var err = "An error occured";

setTimeout(function () {                                                                                
            callback(err, response);                                                             
        }, 3000); // 3000 ms is the timeout
}

// Actual code here

};

Кроме того, проверьте наличие недостающих обратных вызовов.Это также приведет к этой проблеме.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...