У нас есть Java-приложение Google App Engine с 50–120 запросами в секунду в зависимости от часа дня.
Наш интерфейс appengine-web.xml выглядит так:
<instance-class>F1</instance-class>
<automatic-scaling>
<min-idle-instances>3</min-idle-instances>
<max-idle-instances>3</max-idle-instances>
<min-pending-latency>300ms</min-pending-latency>
<max-pending-latency>1.0s</max-pending-latency>
<max-concurrent-requests>100</max-concurrent-requests>
</automatic-scaling>
Обычно одному экземпляру внешнего интерфейса удается обработать около 20 запросов / с. Время запуска составляет около 15 с.
У меня есть несколько вопросов :
- Когда я меняю версию интерфейса по умолчанию, я получаю тысячи ошибок 500 - Запрос был прерван после слишком долгого ожидания попытки обслуживания вашего запроса. Чтобы этого избежать, я переключаюсь с одной версии на другую. Используя функцию разделения трафика по IP-адресу, от 1 до 100% с шагом 5%, требуется около 5 минут, чтобы сделать это правильно и избежать 500 массовых ошибок. Более того, эта функция кажется доступной только для модуля внешнего интерфейса по умолчанию.
-> Есть ли лучший способ переключать версии?
- Чтобы избежать тысяч ошибок 500 - Запрос был прерван после слишком долгого ожидания попытки обслуживания вашего запроса. Мы должны использовать как минимум 3 резидентных (минимальных) экземпляра. И по мере того, как наш трафик растет, даже с 3-мя, мы иногда все равно получаем огромную ошибку 500. Я должен идти к 4-м жителям? Я думал, что App Engine - это хорошо, потому что вы платите только за используемые экземпляры, поэтому, если для правильной работы нам понадобится хотя бы половина наших запущенных экземпляров в режиме ожидания, это же не здорово, не так ли? Это не совсем рентабельно, так как при низкой нагрузке 4 простаивающих экземпляра - большая трата :( Странно то, что они, кажется, ждут всего 10 секунд, прежде чем ответить 500: pending_ms = 10248
-> Есть ли у вас советы, чтобы этого избежать?
- Довольно часто мы также получаем тысячи ошибок 500 - Возникла проблема с процессом, обработавшим этот запрос, что привело к его завершению. Это может привести к использованию нового процесса для следующего запроса к вашему приложению. Если вы часто видите это сообщение, возможно, во время инициализации вашего приложения возникают исключения. (Код ошибки 104). Я не понимаю, никаких исключений нет, и мы получаем их сотни за несколько секунд.
-> Есть ли у вас советы, чтобы этого избежать?
Заранее большое спасибо за вашу помощь! ;)