Google App Engine: Backend vs Frontend экземпляры

GAE допускает различные ограничения в зависимости от того, выполняется ли код во внешнем экземпляре или в экземпляре бэкэнд. Например, он позволяет вам запускать длинные фоновые потоки на бэкэнд, тогда как это приведет к тайм-ауту и ​​вызовет исключение во время выполнения, если код был запущен во внешнем экземпляре.

Я очень смущен тем, как разрабатывать приложение, чтобы вы знали, что только один код выполняется на экземпляре бэкэнд (а не на интерфейсе).

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

Но если я не ошибаюсь, это не позволяет вам загружать разные модули (несколько WAR) для одного и того же приложения и, таким образом, иметь 1 WAR для запуска на внешнем экземпляре, а еще одна WAR, которая будет запускаться на экземпляре бэкэнд (чтобы гарантировать, что вы используете только фоновые потоки на бэкэндах!).

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

Опять же, все возвращается к: как вы убедитесь, что правильный код развертывается и выполняется в правильном экземпляре? Спасибо заранее!

Ответ 1

backend адресуются непосредственно по имени, хотя они имеют один и тот же код и сервлеты с другими экземплярами обычного/внешнего интерфейса в вашем приложении.

ref: https://developers.google.com/appengine/docs/java/backends/overview

Вы можете направлять запросы, которые должны выполняться на бэкэнд, на backendname.yourapp.appspot.com/someroute

Вы также можете настроить несколько бэкендов в backends.xml(с разными именами) и использовать ту же логику, отправлять запросы, предназначенные для конкретных бэкэндов, на соответствующий uri.

По сути, один и тот же код работает во всех экземплярах, но вы можете настроить маршрутизацию на прямые запросы к именованным экземплярам backends.