我在Amazon Web Services上使用Shiny Server构建了一个测验系统。当我在家中的一个或两个设备上测试时,系统可靠地运行。然而,当我在课堂上使用它时,有超过10名学生,系统崩溃了。问题和小部件正确加载,但是当学生尝试提交答案时(30-40分钟后查看它们)数据处理不正确(结果保存在csv文件中,所以我可以看到)。
据我所知,这可能有很多原因,但我想知道是否有人可能是Shiny服务器不是为处理许多同时请求而设计的。这意味着我可以忘记将Shiny用于我的目的并在其他地方寻找。对于那些对系统感兴趣的人,这里是代码:
https://github.com/witusj/CFA-2/tree/master/WK4
非常感谢!
答案 0 :(得分:3)
这取决于您的应用程序的复杂程度以及您托管它的服务器。虽然没有明确的指导方针,但其中一位开发人员here会对此进行解释。
由于您有可以测试的学生,因此您可以估计应用程序能够正确处理的用户数量,并使用此数字设置可以加入的人数限制。如果您查看the manual,您会找到"简单调度程序"去做这个。要使用本手册中的示例,如果要将已连接学生的数量限制为5,则应将simple_scheduler
添加到配置中:
location / {
# Define the scheduler to use for this location
simple_scheduler 5;
...
}
由于您有超过5名学生,请在多个不同位置设置该应用程序的多个副本。您可以使用load balancing idea of Huidong Tang或implementation of that idea by sjewo扩展此内容。
答案 1 :(得分:3)
@FvD说的是什么。但另外,请记住,如果您希望其他人以可扩展的方式托管您的应用程序,则为shinyapps.io;如果您想要使用多个R进程支持Shiny应用程序,请Shiny Server Pro。
Shiny Server本身当然可以处理大量请求(我们已经看到一个Shiny Server实例可以优雅地处理多达一千个并发用户) - 而且它还有足够的空间 - 但正如@FvD描述的那样一切都取决于你的R应用程序的扩展程度。
这里有一点需要注意:在像你这样的应用程序中进行思考会有一些复杂性。如果将所有数据写入单个.csv文件,则无法安全地同时运行应用程序的多个实例(这些进程将覆盖彼此的文件)。相反,您可以考虑将结果写入一堆不同的CSV文件,这些文件可以在以后聚合在一起,或者您可以查看使用类似关系数据库的内容来真正做到这一点。更详细地描述了这个问题here。