Понимание масштабируемости приложений 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 [немного устаревший, но полезно]:
- https://anmolkoul.wordpress.com/2015/06/05/interactive-data-visualization-using-d3-js-dc-js-nodejs-and-mongodb/
- https://github.com/anmolkoul/node-dc-mongo
Я надеюсь, что выше указывает вам в правильном направлении.
Я хотел бы предоставить некоторые заметки, связанные с вашим вторым вопросом: Да, вы можете использовать упомянутый 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.