2017-11-16 9 views
0

I次のセットアップがあります。GoogleクラウドにデプロイするNodeJS、人形遣い、および角度

角度フロントエンドを
のMongoDBデータベース
NodeJS/ExpressのバックエンドAPI(+人形遣い)展開に

手順について:
1 ngのビルド-prod - >作成/server
2のgcloudアプリのデプロイでDIST(Node.jsの+エクスプレス+人形遣い+ Dockerfileの設定*)

人形は基本的にクロームですので、私に与えられていないいくつかの図書館はアップロードされなければならなかった。問題はない、ドッカーが救助する。

FROM node:8-slim 

MAINTAINER Eric Bidelman <[email protected]> 


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"] 

これは今のフロントエンドが上のプライベートサイト、最大2人で "試す-人形遣い" をgithubのレポ(https://github.com/ebidel/try-puppeteer

から取られました。 NodeJSがそれを解決する必要がない方法でAngularをどのように配備すればよいですか?誰かが「Google Cloud Bucket for $ 0.09/mo」を提案した。

これで、MongoDBインスタンスはgoogleクラウドコンピューティングエンジンを使用しています。データベースには、それぞれ11kbのサイズの400個の文書のコレクションがあります。まだ無料のリソースがあります。

サイト上の機能:全て(フィルタリング)ドキュメントの場合 - >(pupeteerをロードするために私たちを必要とするアクションを行う)、その後(res.send(結果))

これは平均的があることを意味しますフロントエンドからの200のAPI要求のうちの1つが一気に処理されます。 NodeJSがこれを(1つずつ、同期して)処理するとしても、私はもっと "NodeJS-clones"を追加することを考えていました。

- これは、一度に300クライアント用のNodeJSサーバーを持っていれば不思議です。どのようにリクエストが処理されていますか?リクエスト間に「停止」を感じるのはどうですか? 1つずつ進むキューがありますか?これはAJAXの制限ですか?

つまり、私はこのリクエストを処理できる方法でどのように展開できますか?

私は "nginx"と "forever"を読んだことがありますが、私は、おそらく10人の人形のインスタンス(タブやウィンドウのような同じVMからでも)同時に働きます。

ここで私は立ち往生しています: ノードクローンを展開できます。私は分裂と征服を経てスケールできるGoogleの雲でそれをどうやって行うのだろうか。 (1回のリクエストで2回のリクエストで200回のリクエストが1回のリクエストで200回のリクエストより2倍速くなります)

これは間違った方法ですか? 200個のオブジェクトで1つの要求を行うのではなく、バックエンドに200個の要求を行うこと。もう1つの問題はタイムアウトの恐れです。各リクエストは完了するのに40秒かかります。

app.yamlをが "デフォルト" のために(+ FEは一緒に展開すること):

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をは$ 13分の250日に私のコストを運転しました。私はこのプログラムを実行するための安価な方法を見つける必要があります。

答えて

1

Google Cloudで請求がどのように行われているかわかりません。それがメッセージスループットなら、ヘッドレスのChromeを実行すると、WebSocketを介して要求を送信してから(コストがかかる可能性が高い)何があっても高価になります。

これは、browserlessがボトムアップ向けに設計されたものです。クラウドのヘッドレスブラウザ。興味があればopen-sourced the underlying docker images hereもあります。

私は、多くの/ほとんどのプロバイダが実際にブラウザのように実行するバイナリを処理するための設定があまり良くないと考えています。彼らの展開方法が難しくなったり、課金の背後にある方法論によってコストが高くなったりします。請求と透明性に関する問題が私が遭遇した最初のものではないと私が言うと私は信じています。

+0

ありがとうございます。Googleのクラウドは、表示されるほど友好的ではありません。私はアプリとリクエストを得るために250ドルの請求書を持っていました – Moshe

関連する問題