3

我正在寻找一个免费和开源的选项,可以同时为我的大约 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 名学生面前进行测试并进行即时测试)?

4

1 回答 1

2
  • 您是否关心它们是否都共享相同的底层 R 进程?

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

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

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

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

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

于 2020-01-29T17:01:12.220 回答