【发布时间】:2019-12-13 02:34:22
【问题描述】:
我在虚拟机上的闪亮代理服务器上托管了我的 dockerized shiny 应用程序(16G 内存和 100G 磁盘空间)。 该应用程序适用于 20 多个并发用户。据我所知,shinyproxy 的工作方式是为每个用户创建一个 docker 实例。所以理论上它们不应该互相干扰。
我的问题是关于并发用户如何消耗服务器的内存和磁盘空间。
为了使应用程序更具响应性,我的应用程序将我的所有数据加载到内存中。每个实例都有自己的数据副本吗?假设我加载的数据为 100 mb。对于 20 个并发用户,服务器内存至少要 2GB 才能加载数据?如果每个 docker 实例为 1GB,那么对于 20 个并发用户,服务器上的总内存至少需要 20GB?是这样的吗?
闪亮的服务器专业版怎么样?如果我在闪亮的服务器专业版上托管我的应用程序,而不是闪亮代理,服务器上的应用程序是否只加载一次数据,每个用户都可以通过自己的会话访问数据?当打开一定数量的并发会话时,用户是否会看到他们的会话变慢?
我是闪亮应用部署的新手。如果有人能就这些概念向我澄清,不胜感激。
【问题讨论】:
-
不能代表 Shinyproxy,但在闪亮的服务器上,
Global.R中加载的所有数据都在实例级别加载。在server.R中加载的数据处于会话级别。取决于许多因素,用户体验可能会变慢。 1.代码是怎么写的,你用futures和promises吗。 2. 每个实例连接了多少用户? 3.每次操作需要多长时间?rstudio.github.io/promises/articles/shiny.html,shiny.rstudio.com/articles/scaling-and-tuning.html. -
有人可以评论我关于 Shinyproxy 的第一个问题吗?
-
我不确定,但您可以尝试使用
tracemem(),有关共享内存分析,请参阅帮助页面中的示例部分。但是,这是在同一会话中。我手头没有闪亮代理服务器,所以我无法测试它。我会争辩说,如果tracemem在用户之间返回相同的值,则强烈表明它是共享的。但它不会反过来争论,... -
如果不想建立数据库的一个选项:将数据作为原始数据放在一个包中,并且只使用
sqldf之类的东西访问它的相关部分。 -
etl包可能也很有趣:github.com/beanumber/etl
标签: r shiny shiny-server shinyproxy