У меня следующая установка:
Angular Front-end
база данных MongoDb
NodeJS / Express backend для API (+ puppeteer)
шаги по развертыванию:
1. ng build -prod -> создает dist в /server
2. Развертывание приложения gcloud (конфигурация Node.js + Express + Puppeteer + Dockerfile *)
Потому что кукловод в основном хром; некоторые библиотеки, которые мне не предоставлены, пришлось загрузить. Нет проблем, Докер спешит на помощь.
FROM node:8-slim
MAINTAINER Eric Bidelman <ebidel@>
RUN apt-get update && apt-get install -y wget --no-install-recommends \
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
&& apt-get update \
&& apt-get install -y google-chrome-unstable \
--no-install-recommends \
&& rm -rf /var/lib/apt/lists/* \
&& apt-get purge --auto-remove -y curl \
&& rm -rf /src/*.deb
COPY . /app/
WORKDIR app
# Install deps for server.
RUN yarn
ARG CACHEBUST=1
RUN yarn add puppeteer
RUN groupadd -r pptruser && useradd -r -g pptruser -G audio,video pptruser \
&& mkdir -p /home/pptruser/Downloads \
&& chown -R pptruser:pptruser /home/pptruser \
&& chown -R pptruser:pptruser /app
USER pptruser
EXPOSE 8080
CMD ["yarn", "start"]
это было взято из репозитория github "try-puppeteer" (https://github.com/ebidel/try-puppeteer)
Теперь интерфейс - это частный сайт, на котором максимум 2 человека. Как развернуть Angular так, чтобы NodeJS не решал эту проблему? Кто-то предложил "Google Cloud Bucket за 0,09 доллара в месяц", и это круто.
Теперь экземпляр MongoDB использует механизм облачных вычислений Google. В базе данных содержится коллекция из 400 документов размером 11 КБ каждый. Все еще на бесплатных ресурсах здесь.
Функциональность на сайте: для всех (отфильтрованных) документов -> выполнить действие, которое требует от нас загрузки pupeteer (). Then (res.send (results))
Это означает, что в среднем 200 запросов API от внешнего интерфейса обрабатываются одним ударом. Несмотря на то, что NodeJS справляется с этим хорошо (один за другим, синхронно), я думал о добавлении дополнительных «клонов NodeJS», и, может быть, я смогу обрабатывать одновременные запросы таким образом?
- Это заставляет меня задуматься, есть ли у меня сервер NodeJS для 300 клиентов одновременно; как обрабатываются запросы? Как я не чувствую "остановку" между запросами? Есть ли очередь, которая идет 1 на 1; или это ограничение AJAX?
Другими словами, как я могу развернуть это так, чтобы справиться с этим водопадом запросов?
Я читал о «nginx» и «навсегда», но я больше думаю о загрузке, возможно, 10 экземпляров кукловода (даже из одной виртуальной машины, например вкладок или окон), где все они могут работать одновременно.
Вот где я застрял: я понимаю, что могу развернуть клоны узлов; но как бы я сделал это с помощью облака Google, где я могу масштабироваться за счет разделения и завоевания. (200 запросов при 2 запросах «за тик» вдвое быстрее, чем 200 запросов при 1 запросе «за такт».)
Я делаю это неправильно? Выполнение 200 запросов к бэкэнду вместо выполнения одного запроса с 200 объектами - еще одна проблема - боязнь тайм-аута. На выполнение каждого запроса требуется 40 секунд.
App.yaml для "по умолчанию" (развертываются вместе):
runtime: custom
env: flex
service: default
automatic_scaling:
max_num_instances: 1
resources:
cpu: 1
memory_gb: 1
disk_size_gb: 10
skip_files:
- node_modules/
- test*.js
- ^(.*/)?.*\.md$
Примечание: точный app.yaml из репо увеличил мои расходы до 250 долларов за 13 дней. Мне нужно найти более дешевый способ выполнить эту программу.