Версия App Engine, обслуживаемая "по умолчанию", кажется непоследовательной и трэш в течение периода после изменения версии по умолчанию

наше приложение служит конечной точке, которая просто сообщает ОС.environ ['CURRENT_VERSION_ID']. Мы используем это для типа мониторинга, который отслеживает, какая версия в настоящее время установлена как "версия по умолчанию".

начиная с полудня 5 марта, мы заметили странное поведение при выполнении запросов к этой конечной точке. Вскоре после того, как мы изменим версию по умолчанию (через "appcfg.py set_default_version"), повторные запросы к этой конечной точке будут переключаться между предыдущим значением по умолчанию и новый дефолт. Это сохраняется в течение примерно 10 минут, после чего все последующие запросы всегда будут сообщать о новой, правильной версии по умолчанию. Таким образом, кажется, что в течение этого 10-минутного окна запросы к нашему обычному URL-адресу по умолчанию будут непоследовательно сообщать либо старую версию, либо новую.

Это, по-видимому, изменение в поведении. Предыдущее изменение версии по умолчанию для нашего приложения произошло 1 марта, а все остальные версии изменились до этого дейт не демонстрировал такого поведения.

(вопрос, похищенных из мой товарищ по команде ' s сообщить об ошибке)

1 ответов


сначала немного фона:

  • App Engine запускает ваше приложение в распределенной инфраструктуре: чем больше трафика получает ваше приложение, тем больше экземпляров (appservers), которые будут запускать ваш код в любой момент времени
  • по масштабируемости / простоте и многим другим причинам App Engine не реализует клиентскую липкость appserver; в результате любой запрос к версии приложения по умолчанию может быть обработан любым appserver

после изменения версия приложения по умолчанию, либо путем изменения версии, помеченной как версия по умолчанию с помощью консоли администратора, либо путем развертывания той же основной версии, что и в настоящее время, информация об этом изменении распространяется через инфраструктуру App Engine. Когда appservers узнают о новой версии, они начинают загружать новую версию кода приложения. Как только данный appserver будет готов, он начнет обслуживать новую версию вашего кода.

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

мы всегда работаем над тем, чтобы сократить время, которое занимают эти изменения версии, но наша главная забота-обеспечить плавный переход. Если приложение имеет большое количество экземпляров, обслуживает в предыдущей версии App Engine необходимо обеспечить достаточную емкость (расчесывание старых и новых серверов приложений) для обслуживания всего текущего трафика. В предыдущих и новых версиях приложения может потребоваться разное количество серверов приложений (из-за различий в производительности между версиями), что является еще одной причиной, по которой переход не может быть безопасно выполнен "мгновенно".

Если вы хотите больше контроля над процессом, вы можете использовать App Engine в Разделение Трафика особенность. Шаг за шагом вы можете увеличить процент трафика пользователя, который вы хотите направить на новую версию. Затем App Engine предоставит липкость версии на основе IP-адреса клиента или файла cookie (для веб-приложений). Вы также можете использовать разделение трафика для "канарейки" новой версии приложения на некоторый процент (скажем, 1%) клиентов.