Облачные задачи + Облачные функции - дублированные исполнения - PullRequest
1 голос
/ 25 января 2020

Я совместно использую облачные задачи Google и облачные функции для параллельного выполнения множества задач.

  • Облачная функция развернута с помощью триггера HTTP.
  • I ' m создание нескольких целевых задач HTTP в одной очереди для вызова одной и той же облачной функции для нескольких различных входных данных.
  • Задача, выполняемая облачной функцией, включает вызов API-интерфейсов HTTP, которые иногда могут завершаться сбоем и требуют повторной попытки. По этой причине очередь задач имеет maxAttempts = 10.
  • Этот процесс выполняется один раз в день и генерирует около 11 тысяч задач в течение примерно 30 минут.

Это Кажется, в большинстве случаев работает хорошо, но я несколько раз видел неожиданное поведение: иногда Cloud Tasks думает, что функция завершилась с ошибкой, и повторяет ее, даже если функция еще не завершила работу и в конечном итоге преуспела. Когда это происходит, я вижу это в журналах очереди (очередь была создана с помощью --log-sampling-ratio=1.0):

  • Cloud Tasks создает задачу.
  • Предпринята попытка отправки 1.
  • Запуск облачной функции 1 начинается.
  • Сбой выполнения облачной функции 1. Журнал очереди показывает, что попытка 1 завершилась неудачно с состоянием «НЕДОСТУПЕН», и отправка 2 выполняется, как и ожидалось.
  • Запускается выполнение облачной функции 2.
  • Даже если выполнение 2 еще не завершено Тем не менее, журнал очереди показывает, что попытка отправки 2 завершилась неудачно с состоянием «НЕДОСТУПЕН», затем попытка отправки 3.
  • Запускается выполнение облачной функции 3.
  • Выполнение облачной функции 3 заканчивается со статусом 200 .
  • Выполнение облачной функции 2 завершается со статусом 200.

Таким образом, облачная функция в итоге выполнялась с успехом 2 раза.

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

...