【问题标题】:Will Docker suffice for a Shiny app with ~100 connections or do I need Shiny Proxy?Docker 是否足以满足大约 100 个连接的 Shiny 应用程序,还是我需要 Shiny Proxy?
【发布时间】:2020-04-26 05:59:40
【问题描述】:

我正在寻找一个免费的开源选项,以便同时为我的大约 100 名学生提供一个闪亮的应用程序。我尝试使用 Shiny Server Open 来执行此操作,但它受到了限制。用户收到类似的消息

Too Many Users

Sorry, but this application has exceeded its quota of concurrent users. Please try again later.

搜索该错误消息后,我现在知道我可以增加并发连接的数量,但我担心由于 R 的单线程性而出现瓶颈。我知道 Shiny Proxy 并且我一直在对此进行试验,但似乎它可能包含我不需要的额外复杂层。

我之前使用 Docker 提供过 Shiny 应用程序(但不是针对这么多观众),所以我想知道这是否足够。

我的问题是:如果我不需要身份验证(用户登录),Docker 是否足以支持约 100 个同时连接的单页应用程序?还是我真的需要 Shiny Proxy?


推论:我如何测试它并确保它能够正常工作(除了面对 100 名学生的班级和即时测试)?

【问题讨论】:

标签: r docker shiny shiny-server shinyproxy


【解决方案1】:
  • 您是否关心它们是否都共享相同的底层 R 进程?

    shiny-server 的开源版本允许您为应用程序提供服务,但它们都共享一个 R 进程。因此,如果您的应用程序有一个长时间运行的模拟,当一个用户运行它时,它会占用您的 R 线程并阻塞其他用户,直到它完成运行。

    如果您不介意它们如上所述共享 R 进程,我不知道并发连接有限制。您可以尝试增加simple_scheduler 设置,请参阅shiny-server.conf 文档中的第 3.1.2 节简单调度程序(通常位于 /etc/shiny-server/)。

  • 如果你不关心它们都在同一个 URL,你可以只使用开源闪亮服务器的多个实例,例如在你机器上不同端口上托管的 docker 容器中。

  • 如果您想在应用程序实例之间进行负载平衡(在单个 URL 后水平扩展),您将需要 Shiny-server pro、ShinyProxy,或者使用带有粘性会话的负载平衡器。这是因为闪亮的应用程序在 R 会话中处理内存中的状态,所以如果您尝试将您的学生发送到一个 URL,并且该 URL 由您的应用程序的 n 个实例支持,但没有粘性保证,而不是单个学生的操作不一定每次都在同一个实例上,并且应用程序不会按您预期的那样运行。

    Shiny-Server pro 和 ShinyProxy 使用 cookie 和标头为您处理这种粘性。根据您的云服务提供商,他们可能支持浏览器 cookie,只要您不需要学生能够打开具有不同实例的应用程序的多个选项卡,该 cookie 就可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 2021-06-19
    • 1970-01-01
    相关资源
    最近更新 更多