Shiny-Serverあれこれ

11,031 views
11,463 views

Published on

JapanR 2013での発表資料です。Shiny-Serverに関することとか

Published in: Education
0 Comments
25 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
11,031
On SlideShare
0
From Embeds
0
Number of Embeds
5,383
Actions
Shares
0
Downloads
0
Comments
0
Likes
25
Embeds 0
No embeds

No notes for slide

Shiny-Serverあれこれ

  1. 1. Shiny-Severあれこれ 2013/12/07 Japan.R 2013@ヤフー株式会社 和田 計也 サイバー系
  2. 2. サイバー系 はじめに ※この発表は個人の見 解であり、所属する組 織の公式見解ではあり ません。 2013/12/07 2
  3. 3. サイバー系 自己紹介 u 和田 計也(@wdkz) u 静岡県袋井市出身 u サイバー系企業でデータマイニングエンジニア職 u 最近はPCオーディオのベストソリューションを模索しています u 長いことバイオ業界にいた u バイオマーカ探索してたり u 枯草菌の研究してたり 2013/12/07 3
  4. 4. サイバー系 いきなりですが u皆さん、Shiny使ってますか?? u プチBIツールとして u BIツールで描画できないものとか 2013/12/07 4
  5. 5. サイバー系 Shinyとは? u Rのコーディングだけでブラウザ上で動く、まるで javascriptで作ったような動的なアプリ(webページ)が 作れます! u 実際に分析してる人ならこれがいかにキラーアプリかわか ると思います。 詳細はここら辺 参考にして下さい 2013/12/07 5
  6. 6. サイバー系 Shinyアプリの配布について u (後述する)Shiny-Serverを利用してサーバーにデプロイ u @hoxo_mさん作成のOpenShinyを利用してユーザに上手 いことShinyアプリを配布 u.Netで作られてるのでWindowsマシン限定→弊社は断念 u(Mono使ってMacOSXでも動くといいなぁ) 2013/12/07 6
  7. 7. サイバー系 Shiny-Server uShiny-Server使ってますか?? u拠点が離れてたり uユーザ多かったり  すると配布が困りますよね... 2013/12/07 7
  8. 8. サイバー系 Shiny-Serverとは? u Shinyのサーバ版(ほぼnode.js) u Shinyアプリをサーバにデプロイしておけば、ユーザは ブラウザから該当のurlにアクセスすれば使える u アプリ配布の問題解消したね!! 2013/12/07 8
  9. 9. サイバー系 Shiny-Serverの憂鬱 uところが、複数ユーザ の同時接続にめっちゃ 弱いという致命的な何 かがある 今やるの? バカでしょ!! 2013/12/07 9
  10. 10. サイバー系 作者もわかってる (Shiny-Mailing Listより) テキスト ↓ここは大丈夫 Node.js (Shiny-server) R ↑ここがネック 2013/12/07 10
  11. 11. サイバー系 作者もわかってる・和訳 ①Shiny-Server+Rを(複数のサーバで)プロセス起動 させて、その前にロードバランサーを立てて負荷分散する Node.js R (Shiny-server) Node.js R (Shiny-server) ロードバランサー Node.js R (Shiny-server) ②Shiny-Serverの後ろに複数Rプロセス起動させる R Node.js (Shiny-server) R R 2013/12/07 11
  12. 12. サイバー系 孫さん風 やりま しょう 2013/12/07 12
  13. 13. サイバー系 ②node.jsの後ろに複数Rプロセスの場合 u Shiny-Serverのコード(Node.js)に手を入れる必要あり u 近いうちに@mtknnktmさんがどこかできっと発表してくれます! R Node.js (Shiny-server) R R この人 2013/12/07 13
  14. 14. サイバー系 ①ロードバランサー的なの使う場合 u nginxのリバースプロキシを使う u version1.3.13からwebsocketのリバースプロキシ対応 になったのでShiny-Serverでも使える Node.js (Shiny-server) Node.js (Shiny-server) Node.js (Shiny-server) R R R ・処理性能 ・高い並行性 ・メモリ使用量の小ささ が特長のオープンソースのWebサーバ (Apache HTTP Serverみたいなの) 2013/12/07 14
  15. 15. サイバー系 ①ロードバランサー的な u Shiny-ServerとRのサーバを用意(Ubuntuの場合) #Rのインストール これ sudo apt-get update sudo apt-get install r-base Node.js (Shiny-server) #shinyライブラリのインストール R sudo su -         -c "R -e "install.packages('shiny', repos='http://cran.rstudio.com/')"" #shiny-serverのインストール sudo apt-get install gdebi-core wget http://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-0.4.0.8amd64.deb sudo gdebi shiny-server-0.4.0.8-amd64.deb #ここに好きな名前でフォルダ作成してファイル(server.R, ui.R)を入れる /srv/shiny-server/ 今回の例だと、このShiny-Server+Rサーバを3台 用意する。AWSだったら環境構築後にAMIを保存 #confファイルはデフォルトのまま して、そのイメージを指定してインスタンス起動 すれば良いから楽 2013/12/07 15
  16. 16. サイバー系 ①ロードバランサー的な u nginxのリバースプロキシ用のサーバを用意(Ubuntuの場合) これ 設定ファイルの中身 upstream app {   server aaa.aaa.aaa.aaa:3838;   server bbb.bbb.bbb.bbb:3838; server ccc.ccc.ccc.ccc:3838; } #nginxのインストール server{ listen 80; sudo apt-get install nginx server_name yyy.yyy.yyy.yyy; #設定 location / { sudo vi /etc/nginx/conf.d/ virtual.conf proxy_pass http://app; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; #起動 proxy_set_header Connection "upgrade"; } sudo start nginx & } 2013/12/07 16
  17. 17. サイバー系 できた Shiny-Server+Rを(複数のサーバで)プロセス起動さ せて、その前にロードバランサーを立てて負荷分散する Node.js (Shiny-server) Node.js (Shiny-server) Node.js (Shiny-server) R http://aaa.aaa.aaa.aaa:3838/your_app_name R http://bbb.bbb.bbb.bbb:3838/your_app_name R http://ccc.ccc.ccc.ccc:3838/your_app_name http://yyy.yyy.yyy.yyy/your_app_name 2013/12/07 17
  18. 18. サイバー系 ついでに(Basic)認証も nginxのサーバに認証機能を持たせる これ 設定ファイルの中身 upstream app {   server aaa.aaa.aaa.aaa:3838;   server bbb.bbb.bbb.bbb:3838; server ccc.ccc.ccc.ccc:3838; } #設定 sudo vi /etc/nginx/conf.d/ virtual.conf server{ listen 80; server_name yyy.yyy.yyy.yyy; #Apache付属のhtpasswdコマンドで location / { #パスワードファイル作成 auth_basic "Restricted"; htpasswd -c /etc/nginx/.htpasswd wdkz New password:入力(不可視) auth_basic_user_file "/etc/nginx/.htpasswd"; Re-type new password:再入力(不可視) proxy_http_version 1.1; proxy_pass http://app; proxy_set_header Upgrade $http_upgrade; #起動 proxy_set_header Connection "upgrade"; } sudo start nginx & } 2013/12/07 18
  19. 19. サイバー系 ついでに(Basic)認証も_Shiny-Server側 Shiny-Server+Rのサーバは認証を通ったnginxから のみアクセスを受け付けるようにする これ #Shiny-Serverの設定 sudo vi /etc/shiny-server/shiny-server.conf Node.js (Shiny-server) #起動 R sudo shiny-server & run_as shiny; nginxのIP server {   listen 3838 yyy.yyy.yyy.yyy; 設定ファイルの中身 2013/12/07   location / {     site_dir /srv/shiny-server;     log_dir /var/log/shiny-server;     directory_index on;   } } 19
  20. 20. サイバー系 その後 u commercial versionだってー!! node.jsの後ろに複数Rプロセス的な 2013/12/07 20
  21. 21. サイバー系 その後のその後 2013/11中旬にProのBetaサイトオープン で、いくらなの? なお、RStudio Server Proは1サーバ あと数週間で価格出るって!! 2013/12/07 $9,995/yearの模様 21
  22. 22. サイバー系 その後のその後のその後(2013/12/04) 価格キター 同時接続10で $9,995/server/year 100で$24,995/server/year 2013/12/07 22
  23. 23. サイバー系 その後のその後のその後(2013/12/04) 認証 スケーリング モニタリング 2013/12/07 23
  24. 24. サイバー系 最後にスケーリングの設定を紹介(Pro) u フリーのは1アプリ1Rプロセスなんだけど、 Proは1アプリ複数Rプロセス使える 1アプリあた り利用するR プロセス数の MAX 1Rプロセスあたり接続する数 1RプロセスのCPU使用率がこ れ(x100)以上になったら、新 規にRプロセス起動するよ 2013/12/07 24

×