Как предотвратить лазурное выделение дополнительных экземпляров, пока они не будут готовы?

У нас возникают проблемы с Azure Application Service. Один из наших веб-сервисов (MVC) кэширует данные из базы данных при запуске (Application_Start) - это занимает примерно 3 минуты. Пока это не будет готово, мы не сможем обрабатывать запросы.

Это известно, поэтому мы устанавливаем его "всегда включен" и будем стремиться только перезапускать его в нерабочее время, если это необходимо.

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

Как мы можем настроить Azure на задержку с использованием нового экземпляра, пока он не будет готов? (или мы должны использовать, например, AWS?).

В некоторых документах указывается на использование настраиваемого зонда Load Balancer Probe, но в основном он говорит о VM, тогда как мы используем PAAS.

Ответ 1

Вы можете сделать это в Azure с другим типом ресурса, отличным от классической виртуальной машины, такой как служба приложений. Службы приложений расширяются и уменьшаются с экземплярами, которые совместно используют один и тот же пул памяти и пул потоков.

Ответ 2

В ссылке https://www.jan-v.nl/post/warming-up-your-app-service, которая была включена в один из комментариев, содержится много полезной информации.

На основании этой информации требуемые вам функции недоступны на уровне бесплатного пользования.

Я бы подошел к проблеме по-другому. Почему загрузка данных из базы данных занимает 3 минуты? Поскольку он загружается только при запуске, это должны быть данные, которые не часто меняются.

Не могли бы вы:

  • Оптимизировать чтение данных из базы данных?
  • Уменьшить объем данных, которые вы читаете из базы данных?
  • Экспортировать данные в файл и читать его из файла?