GAE допускает различные ограничения в зависимости от того, выполняется ли код во внешнем экземпляре или в экземпляре бэкэнд. Например, он позволяет вам запускать длинные фоновые потоки на бэкэнд, тогда как это приведет к тайм-ауту и вызовет исключение во время выполнения, если код был запущен во внешнем экземпляре.
Я очень смущен тем, как разрабатывать приложение, чтобы вы знали, что только один код выполняется на экземпляре бэкэнд (а не на интерфейсе).
Мое понимание того, как работает GAE, заключается в том, что вы загружаете свое приложение (WAR файл) и масштабируетесь (создает кластерные экземпляры) этого приложения по мере необходимости или пока оно не будет превышать потолок, который вы определяете (для бюджетирования и т.д.),.
Но если я не ошибаюсь, это не позволяет вам загружать разные модули (несколько WAR) для одного и того же приложения и, таким образом, иметь 1 WAR для запуска на внешнем экземпляре, а еще одна WAR, которая будет запускаться на экземпляре бэкэнд (чтобы гарантировать, что вы используете только фоновые потоки на бэкэндах!).
Итак, мой вопрос: как вы разрабатываете, распространяете и развертываете приложения GAE, чтобы правильный код всегда выполнялся в нужном экземпляре? Тангенциально к этому относится вопрос о том, как указывать разные долгосрочные задания для конкретных бэкендов. Например, если у вас есть фоновый поток, который должен быть запущен ночью ночью в полночь, но у вас есть 10 бэкэндов, разве это не означает, что у вас будет один и тот же фоновый поток, начинающийся каждую ночь каждые десять раз? Очевидно, что есть ситуации, когда вам нужно только 1 бэкэнд для выполнения задания, а также другие случаи, когда каждый бэкэнд должен вести себя одинаково.
Опять же, все возвращается к: как вы убедитесь, что правильный код развертывается и выполняется в правильном экземпляре? Спасибо заранее!