Трудно подвести итог в заголовке, но у меня есть очень простое приложение Express, использующее Docker (FROM node:latest
) в Google Compute Engine. Изображение размещается в реестре контейнера. У меня есть группа и шаблон экземпляров вычислений, и я использую балансировщик нагрузки с min: 2, max: 4 экземплярами. Проверка здоровья хорошая. Я могу связаться с моим сервером, используя домен, который я подключил, и все маршруты работают как положено.
Проблема заключается в том, что каждый раз, когда я позволяю серверу «остывать» в течение примерно 20-30 минут, не отправляя ему трафик из внешних источников, экземпляр, похоже, как бы «засыпает» и при первоначальном вызове прогрев его занимает около 45 секунд, чтобы получить ответ.
После первоначального вызова все последующие вызовы занимают ожидаемое время (пару миллисекунд). Я планировал использовать этот сервер в производственной среде, но время от времени я предполагаю, что кто-то попадется на один из этих долгих звонков и сдастся. Кто-нибудь сталкивался с этим вопросом раньше? Что будет вызывать этот медленный начальный запрос? Ниже приведены некоторые скриншоты моих настроек GCP, а также мои dockerfile
:
FROM node:latest
ENV DEBIAN_FRONTEND=noninteractive
ENV appDir /var/www/app
RUN mkdir -p /var/www/app
WORKDIR ${appDir}
COPY package*.json /var/www/app/
# Install needed deps and clean up after
RUN apt-get update
RUN apt-get install -y -q --no-install-recommends \
apt-transport-https \
build-essential \
ca-certificates \
curl \
g++ \
gcc \
git \
make \
nginx \
sudo \
wget \
locales \
qtbase5-dev \
libcairo2-dev \
libpoppler-qt5-dev \
poppler-data \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get -y autoclean
COPY . .
# install npm dependencies and pm2
RUN npm install --only=production && npm install -g pm2
EXPOSE 8080
CMD ["npm", "start"]