iDES是这几年一直在参与的桌面云产品,鉴于目前已经告一段落了,来回顾一下都借助哪些现成的技术和开源项目,也许有不少在未来的项目中还能用上。这是一个基于微软虚拟化方案的桌面云产品,目前首页是这样子的:

桌面服务

管理服务的实现使用了公司内比较成熟的一个框架,使用 JavaTomecat 实现的。

数据库 早期使用轻量的SQLite,后来换成了Postgresql;数据访问层是 HibernateMyBatis 混合的。数据缓冲还是用的 Redis

对 Hyper-V Host 的远程管理演变比较多:

  • 一开始借用了SCVMM的包装,因此通过Windows Communication Foundation (WCF)实现的集中管理,开始托管在IIS里。
  • 后来去掉了SCVMM依赖,使用PS Hyper-V这个封装远程管理Host,那时的主力Hyper-V 还是2008R2 SP1的。
  • 然后去掉了IIS,使用 Widnows 服务直接托管 WCF 实现。
  • 目前,使用 Node.js 实现的服务跑在各个 Host 上,也顺便完成一些远程不方便的业务动作。

前端就是一个单页面的逻辑,模块化使用了 sea.js,后来初步引入了 vue.js 来完成一些数据绑定,还没有时间深入做下去。

后期,管理服务提供了一个基于Web访问桌面的方式,是基于 Guacamole 的。这些服务(包括后面的监控服务),显然都是工作在 Nginx后面的。

终端设备

有桌面服务就要有终端设备,最早支持的还是X86类的笔记本,客户端系统是 Ubuntu,桌面选用的是 xfce,引导还是轻量的 extlinux。后来为了支持X64的新CPU,Ubuntu换成了64位的,引导也换成了 Grub2。为了远程管理方便,还有 X VNC Server 的支持。为了支持系统级更新,用 Squashfs 包装了一下系统分区。

随着 Raspberry Pi越来越成熟,这个ARM小板也成了我们低端设备的选择,2代、3代都在使用。系统就是官方的 Raspbian,桌面采用了更轻量的 Openbox(lxde这层桌面工具都跳过了)。至于浏览器,显然是 Chromium,只不过在 Raspbian 正式添加(2016.11)之前,是从 Ubuntu 的源里挖过来的。

桌面业务的客户端程序,本质上也是个单页应用,早期使用的是 AppJS,后来这个项目停止维护了。在Node-WebkitElectron 之间选择了后者,这也为客户端程序同时支持 Linux/Windows、x86/x64/armhf 打下了良好基础。在这个应用上,还小规模测试了 React + Redux 的实现,有了一些的实战体会。

至于连接桌面的工具,用的是目前更新很积极的FreeRDP,鉴于对新 RDP 协议的支持,基本追踪 Master 了。

而跑在终端设备上的管理入口,也是 Node.js 实现的。

部署,监控和运维

我们的虚拟桌面使用 Hyper-V,于是早期各个管理服务也是跑在虚拟机上的,基础系统也是 Ubuntu。这里面包含了不少运维负担,后来接触到容器,当各个服务都容器化之后,部署环境就标成了 Ubuntu + Docker。而很快又转变为了 CoreOS。而镜像库还是暂时使用官方的 Registry 实现。这部分的充分讨论请参考 iDES 项目中的 Docker 实践

监控服务的演变是这样的:

  • 通过 WMI 采集 Windows、虚拟化方面的原始数据,使用 RRD文件来保存数据,管理服务层通过 RRDtool 来读写监控数据。这套实现坚持了很久,因为反正也没什么人用。
  • 中后期,使用 StatsdGraphite-Web 实现了一套新的监控服务,采集范围也扩大到了各个终端设备、管理服务状态,但是在大客户那跑起来之后发现性能几乎不可接受,IO太高了。
  • 后来,数据采集入口换成了 statsdaemon,增加了区域缓冲 carbon-relay-ng,持久化的时序数据库换成了 influxDB。为了延续管理服务使用数据的接口,数据和图表接口使用了 graphite-influxdb 实现的 Graphite-API。当然,为了方便调试数据,也顺便架设了 Grafana2017更新,graphite-influxdb 又更新成了 InfluxGraph

所以,你在前面首页看到的桌面服务状况,很大部分是来自于这个监控服务支持的。而表现方式严重参考了 Azure Portal,只是层次和可定制性还没那么丰富。弹性布局使用了 freewall.js,很有意思的小项目。

项目工程

除了代码管理使用公司的 Subversion,在工程方面也有不少尝试,有些效果还不错。

开发、用户文档使用 markdown 编写,上代码库方便版本管理和更改的比对。正式发布使用 pandoc 来转换为 PDF 格式。为了好看点儿,字体使用了 思源黑体

平时工作散碎任务管理,尝试使用 Worktile 来追踪;后来换成了 Tower,貌似这个更适合我们的状况。

总结

使用了这么多杂七杂八的项目,有一戳就倒的感觉么?哈哈。人少事儿多就只能多依赖开源工具了;只不过稍闲的时候需要多敲打一下这些拐棍,有隐患的就得补足或者换掉。