Управление временем простоя в запросе API из лямбда-функции AWS - PullRequest
2 голосов
/ 28 апреля 2019

Я пытаюсь создать чат-бота на AWS Lambda.

Однако 90% моей продолжительности Lambda теряется во время ожидания запросов.

Для каждого взаимодействия пользователя с моимChatbot, я отправляю примерно 3 запроса (1 для Dialogflow и 2 для Messenger).Я должен ждать, пока эти запросы не будут выполнены, потому что:

  • для Dialogflow, мне нужен ответ
  • для Messenger, мне нужно убедиться, что предыдущее сообщение было отправлено перед отправкойследующий

Запросы занимают приблизительно 400ms, поэтому при каждом вызове API моей функции Lambda я "теряю" большую часть своего времени ожидания ...

aws request duration

Есть ли у вас какие-либо подсказки о том, как мне избежать ожидания 4000 мс каждый раз?Возможно, мне следует перейти к более распространенному экземпляру ec2.

Сначала я действительно заинтересовался безгражданством и Lambda, потому что я думал, что это будет иметь смысл для чат-бота, но чем больше я добавлю функцию в свой проект, тем больше проблемЯ получаю (соединение с базой данных очень долго ...)

Ответы [ 2 ]

0 голосов
/ 28 апреля 2019

AWS Lambda может быть неэффективным в подобных случаях.

Чтобы оптимизировать стоимость, вы можете рассмотреть следующие вопросы:

  1. Максимально используйте асинхронные запросы.
  2. Уменьшить объем памяти лямбды.Это также заставит его работать медленнее, поэтому оптимизированное значение обычно можно найти методом проб и ошибок.В вашем случае, снижение его до минимально возможного может быть наиболее подходящим.Проверьте этот пример.

  3. Пакетируйте несколько событий в один вызов и обрабатывайте их асинхронно.Например, в вашем случае вы можете объединить несколько взаимодействий разных пользователей, используя такие службы, как Kinesis Data Streams и SQS, обрабатывать их в одном вызове и отправлять отдельный ответ для каждого из них.

0 голосов
/ 28 апреля 2019

Звучит так, словно вы застряли.Возможно, вы могли бы попытаться сделать как можно больше асинхронных вызовов параллельно.Похоже, ваш поток в настоящее время выглядит следующим образом:

Event -> Dialogflow -> Messenger -> Messenger -> Finish

Вы можете попробовать объединить некоторые из этих вызовов и выполнить их параллельно:

Event -> Messenger -> Messenger -> Finish
      -> Dialogflow ->
...