Хватит ли Docker для приложения Shiny с ~ 100 подключениями или мне нужен Shiny Proxy? - PullRequest
2 голосов
/ 08 января 2020

Я ищу бесплатную опцию с открытым исходным кодом для одновременной подачи блеска на ~ 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, и я экспериментировал с этим, но, похоже, он может содержать дополнительный уровень сложности, который мне не нужен.

Я раньше обслуживал приложения Shiny с Docker (но не для этой большой аудитории), поэтому мне интересно, будет ли этого достаточно.

Мой вопрос таков: если мне не нужна аутентификация (логины пользователей), Docker будет достаточно для одностраничного приложения для ~ 100 одновременных подключений? Или мне действительно нужен Shiny Proxy?


Следствие: как я могу проверить это и убедиться, что оно будет работать (не входя в класс из 100 учеников и тестируя на лету)

1 Ответ

1 голос
/ 29 января 2020
  • Вас волнует, все ли они используют один и тот же базовый процесс R?

    Версия блестящего сервера с открытым исходным кодом позволяет вам обслуживать приложения, но все они совместно используют один R обработать. Так что, если ваше приложение имеет длительную симуляцию, когда один пользователь запускает ее, оно будет ie повышать ваш поток R и блокировать других пользователей, пока оно не завершит работу.

    Я не знаю, существует ли ограничение для одновременных соединений, если вы не возражаете против того, чтобы они разделяли процесс R, как описано выше. Вы можете попробовать увеличить настройку simple_scheduler, см. Раздел 3.1.2 Simple Scheduler, в документации для iny-server.conf (обычно в /etc/shiny-server/).

  • Если вас не волнует, что все они имеют один и тот же URL-адрес, вы можете просто использовать несколько экземпляров сервера с открытым исходным кодом блестящим, например, в docker контейнерах, размещенных на вашем компьютере, на разных порты.

  • Если вы хотите сделать что-то вроде баланса нагрузки между экземплярами вашего приложения (горизонтальное масштабирование за одним URL-адресом), вам понадобится либо глянцевый сервер pro, ShinyProxy, либо используйте балансировщик нагрузки с sticky-сессиями. Это связано с тем, что блестящие приложения обрабатывают состояние в памяти в сеансе R, поэтому, если вы пытаетесь отправить своих студентов по URL-адресу, и этот URL-адрес поддерживается n экземплярами вашего приложения, но нет никакой гарантии липкости, чем действие отдельного студента не обязательно будет каждый раз находиться в одном и том же экземпляре, и приложения не будут работать так, как вы ожидаете.

    Shiny-Server pro и ShinyProxy справятся с этой проблемой с помощью файлов cookie и заголовков. В зависимости от вашего провайдера облачных услуг, они, вероятно, поддерживают готовку в браузере ie, которая будет работать до тех пор, пока ваши ученики не смогут открывать несколько вкладок вашего приложения в разных экземплярах.

...