了解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
AWS
博客文章:
Shiny是一个很棒的平台,他们的支持非常棒。 我建议你给他们打电话 - 他们一定会帮你回答你的问题。
这就是说,如果您的计划是要创建一个可扩展的网站,将支持数千或数十万人,那么我的感觉就是建议您也回顾并考虑将D3.js与react.js或Angular.js结合使用,而不是忘记提及node.js.
我的感觉是,您正在查看连接到逻辑引擎和可视化前端的后端数据库。 如果你正在寻找一个很好的使用概览,请看下面的网页和git repo [有点过时但有用]:
我希望以上指出你在正确的方向。
我想提供一些与第二个问题相关的注释:是的,您可以使用提到的回写在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