Понимание масштабируемости приложений RShiny, размещенных на ShinyServer

Я создаю серию интерактивных блестящих веб-приложений для проекта, который я рассматриваю возможность превращения в компанию. Мой фон в науке о данных, и у меня нет большого опыта на стороне веб-приложения / сервера, но это важные аспекты для меня, чтобы рассмотреть с моим проектом. В настоящее время у меня есть экземпляр Amazon Linux AMI EC2 с установленным ShinyServer (free, open-source), и в настоящее время я размещаю там ранние версии своих веб-приложений. Пока все работает нормально, но Я еще не обнародовал ссылки.

мой первый вопрос: знает ли кто-нибудь, есть ли определенные ограничения (ограничения масштабируемости, интеграция с ограничениями базы данных, ограничения безопасности / аутентификации и т. д.) что я неизбежно столкнусь с использованием rshiny apps и ShinyServer? Я не слышал о многих успешных, супер-популярных веб-приложениях, которые являются блестящими приложениями, размещенными на ShinyServer, но скорее мое чувство, что ShinyServer в основном используется для размещения приложений RShiny, которые делится только между небольшим количеством людей (т. е. делится между членами команды в компании.). За эту нить -создает ли R-Server или Shiny Server новый процесс/экземпляр R для каждого пользователя? - Я особенно обеспокоен тем, что мое приложение не сможет обрабатывать тысячи пользователей одновременно, так как только 1 Процесс R создан для приложения, независимо от количество одновременных пользователей приложения. Наличие 10-20 процессов через ShinyServer pro, вероятно, не решит проблему, если я всегда намеревайтесь масштабировать больше, чем сотни или тысячи пользователей. Я также заметил, что ShinyServer Pro будет запускать мне не столь незначительные $10K в год.

мой второй вопрос заключается в том, могут ли приложения RShiny быть развернуты с использованием других серверных технологий, таких как heroku. Я наткнулся на эту страницу github (https://github.com/virtualstaticvoid/heroku-buildpack-r/tree/heroku-16), но еще не копали слишком глубоко. Мне сказали, что heroku упрощает обновление выпусков для приложений, чей код находится на github (git push heroku:master), среди прочего.

мой третий вопрос связан с некоторыми моими конкретными соображениями. В частности, в настоящее время я работаю над скриптом, который запрашивает данные из API и записывает эти данные в мою (еще не настроенную) базу данных. Это данные, которые используют мои приложения, и мне было бы интересно обновить приложения в режиме реального времени в качестве обновлений базы данных, не требуя от пользователя обновления веб-страницы. Мой приятель предложил AJAX для этого типа асинхронного поведения, и похоже, что это может быть возможно в R с чем-то вроде этого (https://github.com/daattali/advanced-shiny/tree/master/api-ajax).

Извините, что это такой загруженный вопрос, но я надеюсь, что он не будет закрыт, поскольку я думаю, что это довольно образовательно. Любые предложения / источники / указывающие мне в правильном направлении были бы очень признательны за это.

2 ответов


Canovice,

Я бы рекомендовал вам взглянуть на следующие статьи поддержки RStudio / AWS. Чтобы масштабировать блестящий сервер, вам нужно посмотреть, используя нагрузку Статья:

Shiny-отличная платформа, их поддержка потрясающая. Я бы рекомендовал вам позвонить им - они обязательно помогут ответить на ваши вопросы.

тем не менее, если ваш план заключается в создании масштабируемого веб-сайта, который будет поддерживать тысячи или сотни тысяч людей, то мой смысл будет рекомендовать вам также рассмотреть и рассмотреть возможность использования D3.js в сочетании с реагировать.js или Угловое.js, не забыв упомянуть узел.js.

мое чувство заключается в том, что вы смотрите на бэкэнд-базу данных, подключенную к интерфейсу logic engine и Visualization. Если вы ищете хороший обзор использования, взгляните на следующую веб-страницу и Git repo [немного устаревший, но полезно]:

Я надеюсь, что выше указывает вам в правильном направлении.


Я хотел бы предоставить некоторые заметки, связанные с вашим вторым вопросом: Да, вы можете использовать упомянутый buildback для развертывания блестящих приложений на heroku.

Я был в аналогичной ситуации с вами (спрашивая себя о возможных способах обслуживания блестящих приложений масштабируемым образом) и решил пойти по "пути heroku".

вы можете найти эти подсказки полезными при развертывании приложения в heroku с помощью упомянутого buildpack сверху:

  • Heroku пытается "угадать", как выполнить ваше приложение. Но вы также можете добавить специальный файл с именем Procfile, для вашего приложения для управления командами процесса, которые вы хотите выполнить для своего приложения. В моем случае я использовал web: R -f ~/run.R --gui-none --no-save, где это означает, что файл с именем run.R передается в R исполняемый файл для процесса веб-сервера

  • стек на heroku основан на Ubuntu. Если вам нужны дополнительные deb-packages, вы можете создать другой специальный файл с именем Aptfile и добавьте имена пакетов в них, heroku затем автоматически установит их для вас (мне это было нужно для RPostgreSQL)

  • вы можете добавить другой специальный файл с именем init.R и установить все R пакеты по мере необходимости, как вы привыкли, т. е. с install.packages etc. Вы также можете добавить исходный материал конфигурации в этот файл.

в качестве примера выполнения, здесь пример игрушечного приложения, которое я написал для себя, чтобы вспомнить, как может выглядеть блестящее приложение" полный стек", включая совместимость с heroku.