DartCloud技术难点、问题及经验教训
5.1系统设计
设计一个系统对于没有系统设计经验的人来说本来就不是一件容易的事情,如果再加上这个系统又采用了许多比较新的技术,那设计起来的难度可想而知。对于DartCloud在系统设计时,主要牵涉到的问题是:用户需求不明确、对openNebula、ganglia没有足够充分的了解。
1、用户需求不明确
在进行系统的需求分析时,我们参考了工业界云资源管理管理平台的功能(如浪潮云海、亚马逊等),再结合搭建科研云的一些特殊需求(如共享训练集与测试集的数据)。但由于我们组没有参加与自然语言处理研究相关的研究任务,对其他合作单位在具体工作中的实际需求都还不甚了解。所以DartCloud目前所提供的功能,都还只是浪潮云海和亚马孙都有的一些最基本的功能,如申请集群、监控集群信息等。而对于科研合作单位定制的一些个性化需求,还没有很好地解决方案。
2、对openNebula和ganglia的调研不够深入
在进行系统设计的时候,由于时间的限制,对openNebula没有进行足够的了解便开始了概要设计与编码,这其中有一部问题可以通过阅读openNebula的文档得到解决,但也存在对系统架构影响比较大的地方。主要有两个例子:
Ø openNebula的三种镜像共享方式
对openNebula的存储模型(storage model)的了解不深入对DartCloud的设计与编码实现带来了不小的影响,导致了许多模块需要重构。openNebula在创建虚拟机的时候需要向镜像库(Image Reposity)中获得相应配置的虚拟机镜像,这可以采用三种方式获得镜像:一种所有的集群节点(cluster nodes)是通过NFS(Network File System)来共享<VM_DIR>目录下的镜像;第二种是方式是通过ssh从镜像库中复制镜像到<VM_DIR>的image目录下,这种方式在编码实现起来比较简单,但创建虚拟机的过程会比较慢,因为复制虚拟机镜像需要比较多的时间。第三种方式也是通过NFS共享ImageRepository中的镜像,但其目录不是<VM_DIR>,而是由用户自己定制。这种方式在获得虚拟机镜像的时候,会在<VM_DIR>目录下的image目录中与ImageReposity的虚拟机镜像文件建立一个软链接,从而在openNebula生成Xen的部署文件deployment.0之后,可以找到镜像的位置。
Ø 数据库设计的冗余问题
事先对openNebula的数据库缺乏调研,以致现在系统存在两个数据库,一个是我们设计的数据库,另一个是openNebula自带的数据库,这两个数据库的信息在虚拟机、主机等相关信息存在冗余。在下一个开发周期,会考虑将这两个数据库的信息整合在一起。
Ø 系统缺乏自动化测试
目前整个系统的测试都还只是停留在功能测试阶段,而且大部分还是人工的,只有少部分的Java类用Junit写了相应的测试用例。每当完成一个新的功能(feature),都未能通过自动化的测试脚步对整个系统进行集成测试,即这个新的功能模块是否会对之前的模块产生影响。
Ø 大文件上传所遇到的问题
如果是简单的实现各家合作单位之间的数据共享,那架设一台FTP服务器就能比较好地解决这个问题。但是现在的数据共享比较特殊,主要问题有三个:
首先,用户在上传文件的时候可以选择自己是否共享该数据。如果共享,那我们就会将该文件上传到一个专用的FTP共享服务器上;如果选择不共享,那么这时的需求是需要在自己所申请的虚拟机集群中选择一台作为Hadoop集群的Master,然后将数据上传到Master上。这时由于该虚拟机的ip是内网的ip,ftp服务对外网的访问是不开放的,所以文件的上传会收到影响。所以需要先解决外网如何访问内网虚拟机的这个问题,而这个问题我们正处于努力调研解决方案的阶段。
其次,用户不仅要将自己的文件上传到服务器上,还需要能够在上传的时候选择文件路径,因为在跑Hadoop任务的时候是需要告诉程序数据文件的位置。这就会引入一系列的安全性与权限问题,如果控制不当,很可能造成A用户可以随意访问B用户目录下的文件。
第三,网络的带宽、断点续传与本地大文件读取的问题。虽然Flex提供了本地文件读取的接口,但其对于文件读取大小的上限为100M,而我们的需求是要能够上传2G左右大小的数据文件。经常调研之后,基于FTP协议实现的Java Applet可以比较好地解决这个问题,同时FTP也提供了断点续传的功能。但网络的带宽无疑是种考验,否则传个2G的文件需要十几个小时的话,那这样功能的可用性将大大地降低。
Ø 外网如何访问内网的IP地址
目前是这样来实现虚拟机的vnc访问功能的:在虚拟机的镜像中预先安装vncserver,并在虚拟机自动启动vncserver的服务。用户在点击某一虚拟机的vnc访问按钮是,会产生一个http请求,其URL是虚拟机的IP加端口(5801)。系统在内网运行时这样的访问是没有问题的,而一旦系统部署到外网之后,vnc的访问就会和上述大文件上传一样遇到同样的问题,外网不能访问位于内网的IP。目前这个问题正处于调研寻求解决方案的阶段。