Развертывание NodeJS, Puppeteer и Angular в Google Cloud

У меня следующая установка:

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 дней. Мне нужно найти более дешевый способ выполнить эту программу.


person Moshe    schedule 16.11.2017    source источник


Ответы (1)


Я не совсем уверен, как работает биллинг в Google Cloud. Если это пропускная способность сообщений, то запуск Chrome без головы будет дорогостоящим, несмотря ни на что, поскольку он отправляет запросы через WebSockets (что, скорее всего, требует затрат).

Это то, что безбраузерно разработано снизу вверх для: безголовых браузеров в облаке. Я также открыл здесь базовые образы докеров, если вам интересно.

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

person browserless    schedule 17.11.2017
comment
Большое спасибо за ваш ответ, да, облако Google не так дружелюбно, как кажется. У меня был счет на 250 долларов за приложение и запрос на получение - person Moshe; 24.12.2017