質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.69%

WEBアプリのバックグラウンド部分で走らせるプログラムのデプロイについて

解決済

回答 1

投稿

  • 評価
  • クリップ 2
  • VIEW 737

NERO06

score 11

 前提・実現したいこと

こんにちは。
今回、初めて質問させて頂きます。一般論を尋ねる質問になり恐縮ですが、回答頂けますと幸いです。

現在、pythonを学習している一環で、webアプリを作ろうと考えています。
このwebアプリはチャートを表示する程度のものですが、バックグラウンドの部分でAPIから情報を取得しDBに反映させるプログラムを走らせようと考えています。
概念図: クライアント ⇆ WEB・APサーバ ⇆ DBサーバ ⇆ API(別途プログラムを走らせることを想定)

flaskの公式チュートリアルを通して、上記概念図においてクライアントからDBサーバの部分までの実装についてはイメージがつくのですが、それとは別にAPIから情報を取ってくるプログラムを走らせたいのですが、この場合APIから都度情報を取ってくるプログラムはどのようにデプロイするのが一般的なのでしょうか。

私の中では2通りの方法をイメージしており、一つはさくらのVPSサーバのようなものを借りて、webアプリを走らせる仮想環境(venvのようなものを想定)とAPIから情報を取得する仮想環境の2つを構築して2つを走らせてしまう方法が1つ、もう1つはWEBアプリはさくらのVPSサーバ、APIから情報をとるためのプログラムはAWSで走らせ、DBサーバと接続させておくというものです。

上記は、私のイメージになってしまうので、一般的にはどのようなやり方で行われるのかご教示いただければと思います。また参考サイトなども教えていただけるとなおありがたいです。

当チャートについては、株や為替などのリアルタイム性があるものを想定しており、APIのアクセス制限にかからない範囲でリアルタイム性を持つようなプログラムを書く予定です。

冗長かつ一般論での質問で恐縮ですが、どうぞよろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+2

どっちでもいいというのが答えのように思いますが、(DBと取得用サーバを)別サーバで走らせる長所短所を考えてみてはいかがですか?


短所から

DBと情報取得が異なるサーバ上で走ると、自身で管理している限り通信が2つ分増えます。一度取得した情報を(取得サーバから)送信して、また(DBで)受信する必要があります。
データをやり取りする量が多いのであれば、その分コスト(金銭的に、タイムラグ的に)がかさむことになります。
予算が無限なら特に考え必要がありませんが。

また、通信経路を増やすことで障害可能箇所が増えます。
それに伴って、例えば、取得サーバが死んだ時にデータがアップデートされなくなりますが、そのことをフロント側に知らせる必要があるのか、などを考えねばなりません。


長所について

サーバを分割したので、DBが載っているサーバへの負荷が低くなります。

また、DBの負荷に応じてDBへのデータ転送量を制御することができるようになります。
例えば、DBへのアクセスが増える時間帯は取得サーバとの同期回数を減らすなどができます。

取得用サーバのスケールアウトのデザインが簡単になります。


事前にサーバを分けないとダメになることが目に見えているのではない限り、個人的にはとりあえずシングル構成で作ってしまうと思います。

その際にちゃんとログを取るようにして、負荷に応じて設計を再検討するかと。

仮想化技術でポータブルに作ってしまえば、移植のコストを抑えることができるかもしれません。


ちなみにDBの負荷が激しい場合は、キャッシュサーバを検討することになります。
データはDBに入るまでは流れとしてとらえる必要があるので、(ネットワークやIOなどの)流量に着目して検討すると良いと思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/29 00:29

    丁寧な回答ありがとうございます。初心者の私でもどのようなことを念頭に置いて考えるかが具体的にイメージできる回答で大変勉強になりました。

    全くの初心者でDBの負荷や転送量についての経験的な想定がつかない状態ですので、まずはmkgerlさんが書かれているようにシングルで働く形で作り、走らせることを目指したいと思います。

    回答ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.69%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる