Appengine Backend останавливает обработку задач из очереди push - PullRequest
0 голосов
/ 26 апреля 2018

С прошлого месяца мы начали сталкиваться с этой проблемой, когда серверная часть AppEngine случайным образом прекращает обработку любой работы. Ближайшие другие Qs, которые я видел, это это и это , но ничего бесполезного. Моя конфигурация push-очереди

<queue>
  <name>MyFetcherQueue</name>
  <target>mybackend</target>
  <rate>30/m</rate>
  <max-concurrent-requests>1</max-concurrent-requests>
  <bucket-size>30</bucket-size>
  <retry-parameters>
    <task-retry-limit>10</task-retry-limit>
    <min-backoff-seconds>10</min-backoff-seconds>
    <max-backoff-seconds>200</max-backoff-seconds>
    <max-doublings>2</max-doublings>
  </retry-parameters>
</queue>

Стандартный Java App Engine с несколькими модулями, один из которых является бэкэндом с базовым масштабированием, B4.

<runtime>java8</runtime>
<threadsafe>true</threadsafe>
<instance-class>B4</instance-class>
<basic-scaling>
  <max-instances>2</max-instances>
</basic-scaling>

Обратите внимание, просто для решения этой проблемы я пробовал следующее, но безрезультатно:

  1. Обновлен Java с 7 до 8 - не работает
  2. Изменено с более раннего B1 на B4 - (думая, что это может быть проблема с памятью, но ничего такого в журналах) - не работало
  3. Изменена скорость обработки очереди до 15 / м с размером сегмента 15.
  4. Изменено максимальное количество экземпляров с более ранних 1 на 2 в надежде, что если хотя бы один экземпляр зависнет, другой должен быть в состоянии обработать, но безрезультатно. Я заметил (сегодня), что когда возникла эта проблема, у 2-го экземпляра было только 2 запроса (у другого было более 1400), но новый экземпляр не забрал оставшиеся задачи из очереди. Задача ETA только увеличивалась.
  5. Обновлен Java Appengine sdk с более ранней версии 1.9.57 до последней версии 1.9.63

Поведение: Через некоторое время (почти один раз в день) Бэкэнд просто перестанет отвечать, и задачи в этой очереди останутся как есть. Единственный способ продолжить - убить внутренний экземпляр из консоли, после чего новый экземпляр начинает обрабатывать задачи. Эти задачи являются простыми http-вызовами для получения данных. Очередь обычно имеет от 1 задачи до 15-20 в любое время. Заметил, что даже при 3-4, он иногда останавливается.

В журналах вообще ничего не показано, ничего не прокручивается. Только когда удален внутренний экземпляр, журнал покажет, что / задача была прервана через консоль. Нет нехватки памяти, нет сбоев, нет 404.

Более ранние логи и скриншоты, которые я сделал: Requests by type Traffic

Я не могу добавить больше изображений, но вот для Использование , Использование памяти & Самое недавнее использование памяти , после чего я удалил Экземпляр и задачи возобновились.

Этот и другие недавние события потрясли мою веру в Google App Engine. Что я делаю неправильно? (Эта точная настройка бэкэнда B1 с настройкой очереди работала много лет назад!)

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