• 软件
  • R shiny-server 工程化的几个问题

最近我们数据挖掘的团队在开展项目的工程化工作,已经在Linux环境下部署完成了R、Rstudio-server、shiny-server,基本的工程应用也跑起来了,但是仍然会遇到如下问题,
1.当前功能计算完成后的切换工作,关闭当前案例并重新启动;
2.根据分辨率对页面(尤其是一些图片)进行自适应调整;
3.计算功能进度条等辅助基础功能的完善;
4.多用户使用,用户管理;
5.资源抢占问题;
6.后台管理。

渴望论坛里面的大佬,推荐一些资源供学习并解决。

    zizhou 我猜测你是单节点部署,若有内存和资源,用 K8s 和 Docker Swarm 可以增加些容量,支持多人访问,当然,人数要是很多,那还是得加机器。

    参考视频 【谭显英:使用 ShinyProxy 部署 Shiny Apps | 第14届中国R会软件工具专场(一)-哔哩哔哩】 https://b23.tv/A0uksfS

    nan.xiao ggplot2 responsive panels with shiny and facet_wrap()

    我纯属小跑个题:

    if (width >= 1140) p <- p + facet_wrap(vars(class), ncol = 4)
    if (width >= 960 & width < 1140) p <- p + facet_wrap(vars(class), ncol = 2)
    if (width < 960) p <- p + facet_wrap(vars(class), ncol = 1)

    为了少重复几次代码,我一般用这种鬼都看不懂的火星写法:

    i <- (width >= 960) + (width >= 1140) + 1
    p <- p + facet_wrap(vars(class), ncol = c(1, 2, 4)[i])

    要是断点太多的话,就上 findInterval() 了。

      yihui 👍️ 那我得来一个小众点评:

      首先,我个人基本不用 upcasting 这种特性,因为我认为这样会让类型变得不稳定,容易让静态分析无法直接检查出问题,只能推迟到运行时暴露。

      但是!我还是果断把实现更新成了你的火星版本。原因在于,这个重构体现了纯正的函数式思想,并且让代码的 cyclomatic complexity 从 4 降到了 1。这些压倒性的优点使得类型稳定的考虑显得不再那么重要。

      再次更新:使用 Bootstrap 5 的容器大小定义 + findInterval()

        nan.xiao 我没听说过这些概念,学习了。我的动机纯粹是《怦然心动的人生整理魔法》,是近藤麻理惠小姐捉住我的手敲了上面的两行代码,就像看见了三双同款袜子,就把它们叠整齐了放到同一个收纳盒中,这样只需要看最上面那双袜子,就知道这一盒袜子是什么样式的。

        zizhou 资源这种东西,往往一搜一大把,最终多是躺在浏览器里或是硬盘里吃灰。楼主若是有心,整理一份中文文档,造福一方,投给咱们统计之都。

        1. Effectively Deploying and Scaling Shiny Apps with ShinyProxy, Traefik and Docker Swarm: A tutorial for securely and effectively deploying scalable and production-grade R Shiny apps with ShinyProxy, Docker Swarm and Traefik. https://www.databentobox.com/2020/05/31/shinyproxy-with-docker-swarm/
        2. Deploying Secure and Scalable Streamlit Apps on AWS with Docker Swarm, Traefik and Keycloak. https://www.databentobox.com/2020/10/08/python-apps-with-docker/
        3. Production-Grade Container Scheduling and Management. https://github.com/kubernetes/kubernetes
        4. ShinyProxy: Open Source Enterprise Deployment for Shiny https://github.com/openanalytics/shinyproxy
        5. Docker Compose: Define and run multi-container applications with Docker https://github.com/docker/compose
        6. 在线建模分析展示平台 https://github.com/ShichenXie/dstudio
        7. Information for the Docker for Data Science Tutorial at useR!2019 https://github.com/openanalytics/useR-2019-docker-for-data-science
        8. 谭显英, 使用 ShinyProxy 部署 Shiny Apps https://github.com/shrektan/Use-ShinyProxy-To-Deploy-ShinyApps
          https://www.bilibili.com/video/BV1cU4y1T7x5/
        9. Docker 命令手册 https://www.kancloud.cn/woshigrey/docker/934967
        10. kubernetes 从入门到实践 https://www.kancloud.cn/huyipow/kubernetes/531982
        11. Orchestration 编排 https://docs.docker.com/get-started/orchestration/
        12. Deploy to Swarm https://docs.docker.com/get-started/swarm-deploy/

          Cloud2016 谢谢大佬的指导,我可能需要点时间消化您给的资源,我项目顺利运转后会整理一下文档,到时候你们帮忙审核一下,再投稿。

            plumber 开发api也可以试试( ’ - ’ * )

            16 天 后

            nan.xiao
            Hi,nanxiao
            谢谢你给我的session$reload()建议,我尝试了一下,可以解决部分问题,
            如reactive(code)相关的内容都可以恢复初始状态,但如果是renderDT、renderplot等输出的表格或者图形的形式无法恢复初始状态;我尝试使用rm(list=ls())发现当前session下没有可删除的变量。
            请教naoxiao,是否可以有其他方式解决?

            1 个月 后