web-dev-qa-db-ja.com

ShinyServerでホストされているRShinyアプリのスケーラビリティを理解する

会社になることを検討しているプロジェクトのために、一連のインタラクティブな光沢のあるWebアプリを構築しています。私のバックグラウンドはデータサイエンスであり、Webアプリ/サーバー側の経験はあまりありませんが、これらは私のプロジェクトで検討する重要な側面です。現在、ShinyServer(無料のオープンソース)がインストールされたAmazon Linux AMI EC2インスタンスがあり、現在、そこでWebアプリの初期バージョンをホストしています。これまでのところすべてが正常に機能していますが、リンクはまだ公開していません。

  1. 私の最初の質問はRShinyアプリとShinyServerの使用に必然的に遭遇する特定の制限(スケーラビリティの制限、データベースとの統合の制限、セキュリティ/認証の制限など)があるかどうか誰かが知っているかどうかです。 成功した​​超人気のウェブアプリがShinyServerでホストされている光沢のあるアプリであるとは聞いたことがありませんが、ShinyServerは主にRShinyアプリをホストするために使用されています。少数の人(つまり、会社のチームメンバー間で共有されます)。このスレッドごと--- R-ServerまたはShiny Serverはユーザーごとに新しいRプロセス/インスタンスを作成しますか? -アプリが数千人のユーザーを同時に処理できないことを特に懸念しています。 1 Rプロセスは、アプリの同時ユーザー数に関係なく、アプリ用に作成されます。 ShinyServer proを介して10〜20のプロセスを使用しても、数百または数千のユーザーを超えてスケ​​ーリングする場合でも、おそらく問題は解決しません。また、ShinyServerProが私に年間1万ドルを実行することにも気づきました。

  2. 2番目の質問は、RShinyアプリをHerokuなどの他のサーバーテクノロジを使用して展開できるかどうかです。このgithubページ( https://github.com/virtualstaticvoid/heroku-buildpack-r/tree/heroku-16 )に出くわしましたが、まだ深く掘り下げていません。 herokuを使用すると、コードがgithub(git Push heroku:master)にあるアプリのリリースを簡単に更新できると言われています。

  3. 私の3番目の質問には、私の特定の考慮事項が含まれます。特に、私は現在、APIからデータを照会し、そのデータを私の(まだセットアップされていない)データベースに書き込むスクリプトに取り組んでいます。これは私のアプリが使用するデータであり、ユーザーがWebページを更新しなくても、データベースの更新時にアプリをリアルタイムで更新することに関心があります。私の仲間は、このタイプの非同期動作に対してAJAXを提案しました。これは、Rで次のようなもので可能になる可能性があります( https://github.com/daattali/Advanced-shiny/tree/master/api-ajax )。

非常に多くの質問ですが、かなり教育的だと思うので、閉鎖されないことを願っています。どんな提案/情報源/私を正しい方向に向けることはこれに関して大いに感謝されるでしょう。

19
Canovice

チャノヴィツェ、

以下のRStudio/AWSサポート記事をご覧になることをお勧めします。光沢のあるサーバーをスケーリングするには、ロードバランサーの使用を検討する必要があります。

シャイニーは素晴らしいプラットフォームであり、彼らのサポートは素晴らしいです。私はあなたがそれらを鳴らすことをお勧めします-彼らはあなたの質問に答えるのを確実に助けるでしょう。

とはいえ、数千または数十万の人々をサポートするスケーラブルなWebサイトを作成する計画の場合は、 D3.js と組み合わせて使用​​することも検討および検討することをお勧めします react.js または Angular.js 、忘れずに node.js

私の感覚では、ロジックエンジンと視覚化フロントエンドに接続されたバックエンドデータベースを見ているということです。使用法の概要をお探しの場合は、次のWebページとgit repo [少し古いですが便利です]をご覧ください。

上記があなたを正しい方向に向けてくれることを願っています。

5
Technophobe01

2番目の質問に関連するいくつかのメモを提供したいと思います:はい、前述の buildback を使用して、herokuに光沢のあるアプリケーションをデプロイできます。

私はあなたと同じような状況にあり(Shinyアプリケーションをスケーラブルな方法で提供するための可能な方法について自問しました)、「herokuの方法」を採用することにしました。

上記のビルドパックを使用してアプリをherokuにデプロイする場合、これらのヒントが役立つ場合があります。

  • Herokuは、アプリケーションの実行方法を「推測」しようとします。ただし、Procfileという名前の特別なファイルをアプリケーションに追加して、アプリケーションに対して実行するプロセスコマンドを制御することもできます。私の場合、web: R -f ~/run.R --gui-none --no-saveを使用しました。これは、run.Rという名前のファイルがWebサーバープロセスのR実行可能ファイルに渡されることを意味します。

  • HerokuのスタックはUbuntuに基づいています。追加のdebパッケージが必要な場合は、Aptfileという名前の別の特別なファイルを作成し、そこにパッケージ名を追加すると、herokuが自動的にこれらをインストールします(RPostgreSQLに必要でした)

  • init.Rという名前の別の特別なファイルを追加し、必要に応じて、つまりinstall.packagesなどを使用して、必要に応じてすべてのRパッケージをインストールできます。 。

実行例として、 here は、herokuとの互換性を含め、「フルスタック」の光沢のあるアプリがどのように見えるかを思い出すために自分で作成したおもちゃアプリケーションの例です。

1
Robin Neumann