文/PKUMASS团队
云时代的集成开发环境
文/PKUMASS团队
Ceclipse是一个开源的系统,其云端部分采用VMware的硬件虚拟化技术来构造基础设施平台,使用TC Server作为应用服务器,利用Hyperic HQ对系统进行检测和管理,并以Eclipse为基础构造开发、编译和运行环境,同时,利用我们自主开发的静态分析和动态监测系统对源代码进行分析和监测。为最终用户提供可协同开发的在线的集成开发环境。
Ceclipse主要提供以下服务:开发环境支持服务、静态分析服务、动态监测服务、代码存储服务和协同开发服务。
具备丰富的应用场景
Ceclipse系统具备丰富的应用场景。
典型应用场景之一:
在学校的程序设计类课程上,学生无需安装编程环境,只需要通过访问浏览器访问Ceclipse,就可以立刻开始编程之旅,快速地进入到程序设计语言的学习中,这种简单的入门方式,有利于提高学生对于编程语言的兴趣。借助Ceclipse的协作特性,学生可以进行更加方便的交流。对Ceclipse的组管理员功能进行简单扩展,即可演化为教师-助教系统,并且可以将繁杂的教师评审作业的环节进行简化,增加评审的自动化程度,方便程序设计类课程的开展。
典型应用场景之二:
对于企业内的应用,由于Ceclipse具有零部署,易扩展的特性,很容易在大量的开发机上进行直接的部署,有利于简化企业开发机的初始化环节,大大节省人力成本。借助Ceclipse的协作功能,项目组内的成员可以进行畅通的交流,而Ceclipse提供的版本管理功能,又可以有力地帮助开发人员控制代码版本,免除版本冲突的问题,免除了日常开发过程中的代码合并过程。项目的管理人员担任组管理员,可以实时地掌控项目进度。
典型应用场景之三:
近年来,各类以程序设计为主要项目的比赛有很多,竞赛的组织往往需要工作人员投入大量的时间与精力,由于参赛选手往往会采用不同的编程工具和开发环境,在这种情况下,评判参赛选手的代码就是一个繁冗的体力劳动。为了查看选手们的代码,评委们不得不在各种不同的平台上切换,而这又需要根据每个选手的代码来配置开发环境。如果采用Ceclipse作为开发环境,不但免除了多次配置环境的重复劳动,而且可以使代码的评阅在某种程度上实现自动化,统一的后台接口和运行环境,也使得对代码质量和算法效率的评判更加客观公正。此外,借助Ceclipse的代码静态分析功能,能够在第一时间发现代码的雷同等不良现象。
无缝接驳现有系统
Ceclipse的后台以Eclipse的JDT为基础,可以无缝地与Eclipse系统进行接驳,Ceclipse支持用户上传本地已有的Eclipse Java项目,并且可以将在线的项目打包下载为Eclipse Java项目。这样,用户可以方便地在两个系统之间进行切换,既可以享受到桌面应用程序在界面和功能上的优越性,也能享受在线开发环境提供的各种便利。
当用户需要向别人展示自己的代码时,无需再在展示现场配置开发机,或者将自己的开发机带到展示现场,只需要提前将自己的project上传到Ceclipse,并且在展示现场访问即可。甚至如果用户使用一台配置了浏览器的手机,可以用手机直接访问Ceclipse,随时随地修改自己的代码,随时随地完成开发工作。
安全并且可靠
对于开发人员来说,代码是非常重要的资源,Ceclipse提供多重机制来保障代码的安全性。在基础设施层面,Ceclipse使用冗余系统保障数据的安全,即使基础平台崩溃,也能够利用冗余数据快速回滚,恢复用户的代码,保障代码的安全。在具体服务层面,Ceclipse为用户提供自动的代码保存机制和多版本代码的回滚机制,即使用户的误操作导致的修改错误,只需要简单的操作,就可以回到修改前的状态。对于网络服务来说,可靠性也是评判服务质量的一个重要方面。Ceclipse可以通过静态分析和运行时的动态监测来保障服务质量。对于运行在Server上的用户代码进行高级错误检测(如空指针异常),违禁调用检查(如本地文件的非法访问等),恶意代码分析(如死循环等),以确保服务器的平稳运行。Ceclipse还可以对用户编程过程中的错误情况进行收集,建立缺陷模式库,总结用户在程序设计中的常见错误和代码中的常见缺陷,并对这些缺陷进行提示,帮助用户提高代码质量。
Ceclipse对服务器的多个层面进行实时的动态监测与调整,以确保服务的顺畅运行,在基础设施层面,对系统资源进行详尽地监测,对资源的过度消耗进行充分地预估和及时的报警,对运行“异常”的程序及时作出决策(如强制关闭等)以避免服务器拒绝服务,实现整个系统的负载均衡。
Ceclipse的部署设计
图1 Ceclipse部署
对于用户而言,Ceclipse是一个云,其内部是不可知的区域,用户向Ceclipse发出请求,Ceclipse予以响应并提供服务,用户不关心也不可能知道Ceclipse是如何解决了自己的问题。但是,对于Ceclipse的管理者而言,其结构式非常明晰的。在Ceclipse内部,用较小规模的机群来实现各个不同的功能模块,每个功能模块,在其他的功能模块看来,也是以云的形式存在,其内部实现细节是透明的,这些功能模块之间相互协作,为用户提供完整的服务。我们可以把每个提供服务的模块称之为“云团”,若干个“云团”相互合作,构成了最终用户眼中的云。在Ceclipse系统中,有图1所示的几个云团,每个云团,在其他的云团看来,也是云。
Ceclipse将每个功能模块以云团的形式实现,这样有一个显而易见的好处,就是任何一个云团的失效,都不会影响其他的云团实现各自的功能。在某些特定的时刻,系统可以暂时降级甚至关闭某些云团的服务,以保证能够持续地提供最基本的服务。同时,在系统的进一步演化过程中,如果实现了新的功能,也可以方便的将新的功能模块以新的云团的方式加入到系统中,构造成更大的一片云,而不会对原有的系统造成很大的影响。
Ceclipse的架构设计
Ceclipse采用了分层的架构模式,自底向上,分为硬件平台和虚拟化层,基础服务层,分析监测层服务层,Ceclipse服务层,请求分发层和用户交互层。Ceclipse的架构图如图2所示:
1 .硬件平台和虚拟化层
Ceclipse采用的基础平台为若干台性能较高的刀片服务器,服务器硬盘采用RAID1来保障数据安全。直接在服务器上安装基于Linux的VMware ESX,并划分虚拟机,安装操作系统,使之构成硬件平台及虚拟化层,这是Ceclipse云平台的硬件基础。
虚拟机的操作系统保持了一定的多样性,既有基于Windows平台的虚拟机,也有基于Linux平台的虚拟机,这样可以保证Ceclipse能够适应Eclipse的绝大多数插件。
虚拟机按照不同的用途来设定其性能指标,对于运行编译和运行环境的虚拟机,给予较高的CPU频率和内存,而对于运行Hadoop文件系统的虚拟机,则给予较大的硬盘空间。
2 .基础服务层
对于用户来说,数据永远是最重要的,而对于软件开发人员来说,代码作为一种关键的数据资源,更是非常重要的,因此Ceclipse在设计上非常重视数据的安全,在硬件层面,采取冗余的RAID保证数据的安全性,在数据存储方面,也采取了一系列措施来保障数据的安全,提高数据的存取速率。
图2 Ceclipse架构设计
基础服务层主要提供的服务是数据的存储服务,为了便于文件的存取操作,Ceclipse提供了数据库、Windows文件系统和Hadoop文件系统三种数据存储机制,分别存储不同的数据资源。对于用户信息数据等,采用数据库存储的方式保证查询的效率,对于一些公共的数据资源,采用网络化的Windows文件系统,保证操作的方便,对于用户的代码,采用Hadoop文件系统进行存储,一方面可以通过Hadoop的安全和冗余机制,为用户代码加上双保险,另一方面,多个节点存储数据,可以让用户就近读取,提高效率。
3. 分析监测层
代码的静态分析和运行时的动态监测,以及对系统的全方位的监测活动,是Ceclipse系统的一个重要的特色,Ceclipse的分析监测层,提供了完善的分析和监测机制。
首先,分析监测层借助对Hyperic HQ相关功能的封装,对系统的资源进行全面的监测,帮助系统的运行人员及时掌握系统的运行情况,对系统的资源分配及时进行调整,并对突发事件及时做出反应。
其次,Ceclipse对用户的代码进行静态分析,防治恶意代码在服务器上被比编译运行,保障服务器的安全,并通过与缺陷模式库的比较,及时发现用户代码中的缺陷,并对用户进行提示,帮助用户提高代码质量。
最后,对于运行在Ceclipse上的各种服务,监测系统随时监测其资源消耗情况,预防可能发生的任何资源泄漏,并及时做出调整,防止局部错误扩大到全局,保障系统的安全。
4. Ceclipse服务层
Ceclipse对Eclipse Java的JDT进行封装,将其包装成Web服务,并向系统的用户交互层提供访问接口。该层主要提供三大类服务:基础功能服务、认证授权服务和代码提示服务。
基础功能服务包括用户代码的编译和运行服务,Eclipse项目的导入和导出服务等。认证授权服务主要是对注册用户进行管理,并且实现项目组的管理功能,以确认用户是否有权访问代码并对其进行修改。代码提示服务包含的功能非常丰富,主要是代码在客户端的高亮显示,代码的输入提示等。
5. 请求分发层
为了保证Ceclipse能够支持大量用户的同时访问,Ceclipse提供了请求分发的功能,首先将不同功能的服务部署在多个服务器集群上,由专门的机器运行专门的服务,以简化配置服务时需要考虑的条件,便于配置和部署。
通过对用户HTTP请求的分发,将不同的请求分发到不同的服务器集群上,以便实现用户所要求的服务,服务器集群上的二级分发系统,可以实现服务器的负载平衡,保证服务器的效率。
6. 用户交互层
Ceclipse提供了人性化的人机交互界面,在使用习惯上,尽可能地与Eclipse系统保持一致,方便用户的操作,尤其是Eclipse的用户可以轻松地转到Ceclipse系统上来。在Ceclipse的设计目标中,用户交互体验是一个可以配置的选项,在后期,用户可以实现对界面的自定义配置,以满足自己的个人习惯。