昨天,在第十四届中国R会议分享了《如何使用ShinyProxy部署Shiny Apps》。讲的比较抽象,对于没有接触过ShinyProxy,或者没有考虑过Shiny App部署的听众来说,应该会比较枯燥。
我之所以想要分享这个题目,是因为今年换了公司后,需要从零搭建所有的系统,总算是可以有机会彻底规避掉之前趟过的一些坑了。这一次,我决定直接采购了RStudio Team软件(包含RStudio Workbench, RStudio Connect以及RStudio Package Manager)。因此,估计一段时间内我是不会再用ShinyProxy了。趁着我还有一些记忆,就想着通过这个讲演能把一些经验分享给大家。
在我看来,ShinyProxy是一个非常赞的Shiny App部署工具:
- 工作模型简单,它就提供三个功能:
- 用户的管理
- 启动和终止Docker容器
- 流量的代理
- 使用的工具/依赖成熟稳定可靠:
- Java Spring框架
- Docker
- 开源且代码架构清晰:
- 本身的个性化程度就能做到很高
- 实在有部分无法满足的需求,也可以通过少量源码的更改来实现
在企业环境中,安全成熟可控是非常重要的,我们必须要确保使用的重要工具足够成熟稳定——这样意外情况才会比较少,模型简单代码清晰——这样遇到问题了才能有信心解决。ShinyProxy很好地满足了这些需求。
我使用ShinyProxy有三年了。既然免费开源且好用熟悉,我为什么这一次还要换成RStudio Team呢?
- 资管行业中,对于软件的安全要求以及相关管理实在很多。我这个新公司是外资独资企业,因此还要满足全球范围内的IT相关标准。既然是使用的开源软件,并没有厂商支持,那整个这一套东西就只能被认定为自己开发的系统,那么就要去满足相关的流程和制度。非常麻烦。
公司里IT的同事其实并不多,也非常忙,而且对于我这一套东西也不懂,因此帮不上太多忙。我团队的成员,对于这些非常底层的东西,也不怎么懂。但是,这些IT相关的流程制度和安全要求,又必须要去满足。
最后,就全变成我自己个人的工作——而我实在没精力去处理这些事情。 - 除了Shiny APP的部署外,企业环境中还有大量的问题需要去处理:
- 我实在不想在Windows下工作了——无穷尽的Encoding问题、杀毒软件等。但是,公司又要求个人电脑终端都得是Windows。
因此,唯一的办法就是在虚拟机中搭建统一的R环境,让用户通过远程方式登录Linux操作。然而,我们又要求不能直接开放SSH的22端口,必须要通过“堡垒机”跳转——相信我,你绝不会想通过“堡垒机”去写东西的(我宁愿用回Windows)。
RStudio Workbench就能很好地解决这个问题。因为我只需要搭建好环境后,暴露80/443端口作为服务,所有的用户登录进去就能得到一个统一的运行环境,和所有这些奇奇怪怪的事情说Goodbye。 - 虚拟机下面R Package的安装和升级问题。企业要求虚拟机环境同互联网进行完全的隔离,这就导致一个非常麻烦的问题,虚拟机下面R Package的升级和安装都无比麻烦,因为我只能手动去处理。当然,我可以去搞一个离线类似于CRAN的镜像,然后人肉传进去,但是一样会消耗我很多精力,让整个Workflow不那么Flow.
RStudio Package Manager(RSPM)就很好地解决了这个问题。因为这是一个厂商提供的软件,而且只需要唯一访问一个互联网地址(RStudio的一个URL),且只需要给内部环境暴露80/443端口提供服务。这样,相关的流程和审批就很容易通过。 当然,RSPM也很好用,提供Linux下的Binary包,也省得安装的编译了。于是乎,整个R的环境都能够直连RSPM进而对Package进行有效的安装和升级。
- 我实在不想在Windows下工作了——无穷尽的Encoding问题、杀毒软件等。但是,公司又要求个人电脑终端都得是Windows。
- 此外, RStudio Team Bundle在很多细节处理上非常完善好用。
比如,通过Workbench或者本地的RStudio IDE,能够一键把做好的Shiny App或者Rmarkdown报告上传到RStudio Connect中。所有Package的依赖,以及版本的历史记录都会被很好的处理。用户管理和内容权限也能很好地被维护起来。另外,还提供完整的审计记录(就是不同用户在平台上操作了什么),这都是非常非常重要的——对于企业环境的运维而言。 - 最后,RStudio Team是一个商业软件。因此,我们遇到的所有问题——无论是技术上的还是制度管理要求的——都可以去找到RStudio公司相关的同事去帮忙解决处理,他们也很有经验。
R本身是一个开源开放的语言,RStudio几乎所有的Package也都是开源免费的。因此,上面说的这一切工作,其实“理论上”我们都可以自己去处理,自己去把它们搞定。
但是,有这个必要么?考虑到RStudio Team的价格非常实惠,相比于这么一点点可以被度量的“金钱成本”,人的时间要宝贵得太多了1。如果自己去处理这些事情,整体耗费的“时间成本”真不知道有多少。
所以,这个“生意”真是太划算啦!
-
《第14届中国R会会议手册》的“欢迎辞”里有一句话——R的一个核心设计理念是“人的时间永远比机器的时间宝贵”。这就是我这篇日志的“元气”所在。 ↩︎