Экземпляр Google App Engine - может ли мой код определить данные экземпляра? - PullRequest
0 голосов
/ 11 января 2020

У меня есть Node.JS служба GAE, запущенная с процессом CRON, который отправляет сообщения. GAE раскручивает несколько экземпляров, что приводит к отправке нескольких сообщений.

В идеале мой код мог бы «видеть», что это дополнительный экземпляр, и подавлять сообщения? Есть ли способ, которым мой код может определить это? В противном случае мне придется координировать экземпляры с помощью какого-либо внешнего ресурса (разделяемая память / БД и т. Д. c) ...

1 Ответ

1 голос
/ 12 января 2020

Хотя может быть возможно получить информацию о других запущенных экземплярах (например, через метод Admin API apps.services.versions.instances.list ), одной этой информации будет недостаточно для правильной реализации логики c вы ищете - если есть несколько запущенных экземпляров в то время, когда зависимые от экземпляра "процессы CRON" запускают logi c будет давать одинаковые результаты во всех экземплярах, вам все равно потребуется некоторая координация, чтобы определить, какой из запущенных экземпляров «главный», на который следует отправлять сообщения, скорее всего, на основе какого-либо внешнего ресурса. Это не тривиально, если принять во внимание возможность смерти / запуска экземпляров в любое время, в том числе во время выполнения процессов CRON.

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

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

...