了解ShinyServer上托管的RShiny应用程序的可伸缩性

我正在为一个项目构建一系列互动闪亮的网络应用程序,我正在考虑将其转变为一家公司。 我的背景是数据科学,在网络应用/服务器方面我没有太多的经验,但这些对我来说是重要的方面,需要考虑我的项目。 我目前已经安装了Amazon Linux AMI EC2实例,并安装了ShinyServer(免费,开放源代码),并且目前我正在托管我的Web应用程序的早期版本。 到目前为止,一切正常,但我还没有公布这些链接。

我的第一个问题是,是否有人知道我将不可避免地遇到使用RShiny应用程序和ShinyServer的某些限制(可伸缩性限制,与数据库限制的集成,安全/身份验证限制等)? 我还没有听说过许多成功的,超流行的Web应用程序,这些应用程序是ShinyServer上托管的闪亮应用程序,但我的感觉是,ShinyServer主要用于托管RShiny应用程序,这些应用程序仅由少数人共享(即在团队中共享一家公司的成员)。 通过此线程 - R-Server或Shiny Server是否为每个用户创建一个新的R进程/实例? - 我特别担心我的应用程序无法同时处理数千个用户,因为无论应用程序的并发用户数是多少,都只为应用程序创建一个R进程。 如果我打算扩展比成千上万的用户还要多,通过ShinyServer pro 10-20个进程可能无法解决问题。 我还注意到ShinyServer Pro会让我每年的运行成本不能忽略不计1万美元。

我的第二个问题是RShiny应用程序是否可以使用其他服务器技术进行部署,例如heroku。 我遇到了这个github页面(https://github.com/virtualstaticvoid/heroku-buildpack-r/tree/heroku-16),但还没有深入研究它。 有人告诉我,heroku可以轻松更新发布到代码位于github上的应用(git push heroku:master)等等。

我的第三个问题涉及我的某些具体考虑。 特别是,我目前正在研究一个从API查询数据的脚本,并将该数据写入我的(尚未设置)数据库。 这是我的应用程序使用的数据,我希望在数据库更新时实时更新应用程序,而不需要用户刷新网页。 我的一个好友建议AJAX用于这种类型的异步行为,看起来像R这样的东西可能是这样(https://github.com/daattali/advanced-shiny/tree/master/api-ajax) 。

对不起,这是一个加载的问题,但我希望它不会被关闭,因为我认为它是相当有教育意义的。 任何建议/来源/指向我在正确的方向将不胜感激。


Canovice,

我建议你看看下面的RStudio / AWS支持文章。 要扩展一个闪亮的服务器,您需要查看使用负载平衡器:

  • RStudio

  • https://shiny.rstudio.com/articles/scaling-and-tuning.html
  • https://support.rstudio.com/hc/en-us/articles/220546267-Scaling-and-Performance-Tuning-Applications-in-Shiny-Server-Pro
  • https://support.rstudio.com/hc/en-us/articles/217801438-Can-I-load-balance-across-multiple-nodes-running-Shiny-Server-Pro-
  • AWS

  • https://aws.amazon.com/blogs/big-data/running-r-on-aws/
  • 博客文章:

  • http://mgritts.github.io/2016/07/08/shiny-aws/
  • Shiny是一个很棒的平台,他们的支持非常棒。 我建议你给他们打电话 - 他们一定会帮你回答你的问题。

    这就是说,如果您的计划是要创建一个可扩展的网站,将支持数千或数十万人,那么我的感觉就是建议您也回顾并考虑将D3.js与react.js或Angular.js结合使用,而不是忘记提及node.js.

    我的感觉是,您正在查看连接到逻辑引擎和可视化前端的后端数据库。 如果你正在寻找一个很好的使用概览,请看下面的网页和git repo [有点过时但有用]:

  • https://anmolkoul.wordpress.com/2015/06/05/interactive-data-visualization-using-d3-js-dc-js-nodejs-and-mongodb/
  • https://github.com/anmolkoul/node-dc-mongo
  • 我希望以上指出你在正确的方向。


    我想提供一些与第二个问题相关的注释:是的,您可以使用提到的回写在heroku上部署闪亮的应用程序。

    我和你有类似的情况(问自己可以以可扩展的方式提供Shiny应用程序的方式),并决定采用“heroku方式”。

    使用上面提到的buildpack将应用程序部署到heroku时,您可能会发现这些提示很有用:

  • Heroku试图“猜测”如何执行你的应用程序。 但是您也可以将一个名为Procfile的特殊文件添加到您的应用程序中,以控制您要为应用程序执行的进程命令。 在我的例子中,我使用了web: R -f ~/run.R --gui-none --no-save ,这意味着一个名为run.R的文件将被传递给Web服务器进程的R可执行文件

  • heroku上的堆栈基于Ubuntu。 如果您需要额外的deb包,您可以创建另一个名为Aptfile特殊文件并在其中添加包名,然后heroku会自动为您安装这些文件(我需要它用于RPostgreSQL

  • 您可以添加另一个名为init.R特殊文件,并根据需要安装所有R包,就像您习惯的那样,即使用install.packages等。您还可以在此文件中添加初始配置资料。

  • 作为一个运行的例子,下面是我为自己写的一个示例玩具应用程序,用于记住“完整堆栈”闪亮应用程序的样子,包括与heroku的兼容性。

    链接地址: http://www.djcxy.com/p/40991.html

    上一篇: Understanding the scalability of RShiny apps hosted on ShinyServer

    下一篇: Template and overloads