基金项目:陕西省科技厅科技攻关基金项目(2012K6-16)
通讯作者:冀汶莉(1978-),女,陕西西安人,副教授,E-mail:wenlixa@gmail.com
1.西安科技大学 通信与信息工程学院,陕西 西安 710032; 2.杭州市数字城管信息处置中心,浙江 杭州 310003
(1.College of Communication and Information Engineering,Xi'an University of Science and Technology,Xi'an 710054,China; 2.Hangzhou Digital Urban Management Information Disposal Center,Hangzhou 310003,China)
DOI: 10.13800/j.cnki.xakjdxxb.2014.0518
In order to adapt to the internet and information technology improving rapidly, all most of small-to-medium-sized enterprises need to develop personalization OA system, meanwhile it need to reduced maintenance costs. This paper provides a different way of SaaS Patterns in developing OA system. In this paper, we describe interfaces and data storage of Google App Engine. Some key technologies are studied to build the OA system based on Google App Engine, which include Object Mapping, Data Persistence. In real practice, software providers can deploy the business services needed by OA on the platform. Among the SaaS services, message notification based service coordination techniques are used to obtain the interoperability of different systems during the OA activities. After the testing and tryout, he system has been implemented and provides services for an enterprise at present. Through the application in the Project, the OA system of Google App Engine can improve reliability of system and security of data storage, implement share of information resources, otherwise it provided the foundation for extensibility to an roles in businees.
办公自动化(Office Automation,OA)系统开始于美国,70年代后期逐步发展成为一门涉及通信、系统科学等多种技术的新型学科[1]。第一代OA系统利用个人电脑上的Office,WPS等办公软件,实现了办公流程中数据统计和文档写作的电子化。第二代OA系统引入了协同工作流的概念,利用网络技术基于C/S结构实现了工作流程自动化。第三代OA系统是融合信息处理、业务流程和知识管理于一体的基于B/S结构的网络协同工作阶段[2]。中国办公自动化是80年代中期才发展起来的,大多提供公文审批、文档存储、管理、查询这些公众化功能,远远不能适应目前可扩展性、可移动性以及企业的多样化的要求。
云计算是随着互联网的发展而出现的一种先进的理念和技术,在Google,IBM,Amazon等众多著名IT公司的积极推动下迅速发展[3]。云计算的核心理念是将计算和存储形成大规模资源池,通过云平台的管理和虚拟化技术,使计算资源和存储资源按照用户需求进行弹性伸缩,按需提供服务[4]。SaaS(Software as a Service)软件即服务作为一种新型的软件架构与应用模式,也是云计算所提供的服务之一,近年来得到学术界和产业界的广泛关注。软件开发者可以利用基于云平台的SaaS模式,给某类用户或组织以服务的方式开发通用或特殊的应用。
目前中小企业都非常重视企业办公自动化的建设和实施。传统B/S模式的办公自动化软件系统开发成本相对较低,但每个中小企业都需要购置相关的数据库服务器和应用服务器,还需要定期进行应用系统维护,无形中会增加企业的运行成本。对于软件开发公司也需要针对每个客户,耗用人力和物力开发相似的产品。目前随着云计算在企业界的出现和快速发展,以及基于云平台SaaS软件开发模式的提出,可以更好的解决上述的问题。因此,将OA系统置于“云”端为众多企业提供服务,是文中探索和实践的方向。由于Google公司的云平台是目前技术最成熟的公有云平台之一,文中就以Google App Engine云平台为基础,实现了一个面向中小企业的基于云平台SaaS模式的OA系统。
Google云计算平台首先为其著名的搜索引擎提供服务,其次为普通用户提供了一系列基于SaaS模式的云应用(例如邮件系统、Google云端文档系统)服务和开发接口。Google云计算的基础架构包含四个相互独立又紧密结合在一起的系统,包括提供分布式文件管理的文件系统 Google File System,Google提出的特有的 Map/Reduce 编程模式,分布式的锁机制Chubby以及模型简单的大规模分布式数据库BigTable[5]。
Google的GAE平台的服务之一是为开发者提供应用程序托管服务,服务对象是拥有大量并发用户的Web应用系统。在GAE上运行的应用程序随着用户人数的增多,GAE会自动为其分配更多的计算和存储资源,并提供自动管理,应用程序不需要考虑使用资源的分配情况。在 GAE上应用程序所使用的资源包括 CPU使用率、每月存储容量、出入口带宽以及其他特定于 App Engine服务。与Web托管或自管服务不同的是用户无需按月付费或者预付费,只需要为那些使用到的资源付费。
GAE可分为3大块:运行时环境、数据存储区、以及提供的服务。其中与系统开发关系密切的是数据存储区。在GAE中通过数据存储区对应用系统提供事务的支持,数据存储区在其分布式网络中使用“实体组”实现事务,事务处理单个组中的实体,同一组中的实体存储在一起以提高事务执行效率。在数据存储区中使用开放式并发性控制,应用程序可以在一个事务中执行多个数据存储区操作,这些操作要么全部成功要么全部失败,从而确保了数据的完整性[5-6]。在GAE中提供了基于消息驱动的服务协调技术,可以让开发者透明的快速实现业务流中不同模块间的互操作。
在云环境中也需要某种存储模式来保存虚拟机映像、用户的应用和应用所需的持久化数据,因此在云中也具有数据库的概念。Google采用BigTable作为它的云数据库,BigTable是“键-值”的NoSQL结构的数据模型的典型代表,它的首要任务是保证Google的快速搜索所涉及的海量数据。BigTable本质上是稀疏的、分布式的、持久化存储的多维度排序Map,它的物理存储模式采用了类似数据结构中B+树索引组织表的模式,称为多维度的分类映射,其中的分支和叶节点可以分布在多台机器上,通过在成千台计算机上分布数据,提供了对PB级数据的快速访问。由于节点是分布式的,随着树的增长节点会拆分,根据应用需求量获得高伸缩性成为可能[6]。
下面是结合文中的开发实例给出的一个完整的BigTable数据模型,用来描述公文实体数据,如下段(1)所示:
table{
“row”:{“title”,“content”,“state”“realseState”,“flowId”,“createTime”,“createId”,“setting”{“setting:isSendTelephone”:{
“isSendTelephone1”:“20130908234587”,
“isSendTelephone2”:“20130909234587” }
“setting:isSendMessage”:{
“isSendMessage1”:“20130910234587”,
“isSendMessage2”:“20130911234587”
……(1)
其中table表示一张表,row表示表中1行的数据。title,content,state,realseState,flowId,createTime,createTime为该行的列,setting为列族包括2列:isSendTelephone,isSendMessage,其中每一列保存不同的版本,以时间戳来区分。伴随着行的增多Table会根据行键自动划分为tablet,这些tablet会分布在不同的计算机上,tablet中的数据最终会存储到GFS文件系统中[7]。
本项目以实际A公司结合多家同等公司的需求为开发背景。A公司原有的OA是一个B/S模式的MIS系统,但该系统已经不能适应目前的办公需要。例如在公文审批的整个环节中,当有新公文需要处理或者公文处理失败和成功时,没有向相关人员发送任何形式的提醒,公司人员只能频繁的登陆系统查询公文的处理信息,这严重影响了工作效率。该系统也无法扩展移动办公,同时公司需要能在新OA系统中可以共享某种常用的办公软件(例如电子文档系统)和邮件系统,云平台的出现可以为上述的需求提供一种新的思路。
由于Google云平台中不但提供开发接口,同时也提供SaaS模式的Google文档系统和邮件系统,可以在不增加企业成本的情况下快速创建共享电子文档、电子表格等协同应用。因此本项目以Google的GAE为开发平台,设计实现了SaaS模式的OA系统。
系统包括公文审批、短信管理、人事管理、公告管理、订餐管理、考勤管理、规章制度管理、分享平台及注册和登录功能,其中公文审批功能包括待审批公文管理、已审批公文管理、创建公文、创建审批流程等功能。在公文审批中将会伴随系统消息,发送邮件提醒,短信发送等子功能。以上功能都可以按照企业需求进行有效组合。系统的功能如图1所示。
数据模型是对业务数据的抽象化。GOA项目主要涉及的数据模型有:用户、部门、公文、工作流程、公文处理、工作流-用户、任务、短信、群组、群组-用户、系统消息等。模型如图2所示。
在Google云平台上开发应用软件,仍然可以采用目前流行的Web开发方法。但GAE中数据存储是基于BigTable设计的,它不是一个关系型的数据库,更像是一个分布式的、分类的哈希表,这种分布式的设计让并行数据以及数据查询非常高效[8-9]。本系统开发的关键问题是如何将数据模型的实体形式对应于云平台的存储形式,也就是数据对象的映射和持久化问题。Google云平台通过Datastore对象提供了数据对象的映射和数据持久化的支持。
Datastore中的对象称为实体。数据存储区中的每个实体使用键来唯一地标识该实体。每个实体具有一个或多个属性,支持的数据类型是整数、浮点值、字符串、日期、二进制等常用数据类型。Datastore中的每个实体都属于一个特定的类型,类型是由应用程序指定的一个名称。与关系数据库不同的是,同一类型的2个实体不必具有相同的属性。每个实体的唯一键的一部分可用作该实体的标识符。应用程序可以分配要在键中使用的它自己的标识符(称为键名称),也可以在首次存储实体时由数据存储区分配的数字 ID。由于标识符是键的一部分,所以在创建实体后,实体的 ID或名称无法更改。
GAE分别支持Java Data Object(JDO)以及 Java Persistence API(JPA)2种标准接口来调用数据对象[10-11]。这2种接口都允许用户使用类型安全的 Java类来描述数据结构。在本项目中使用 JPA来实现数据实例化的功能。
JPA(Java Persistence API,Java持久化API)定义了对象-关系映射(ORM)以及实体对象持久化的标准接口[12]。在利用JPA持久化对象时,首先要获取EntityManager实例,可以通过在EntityManagerFactory类的实例上实例化并调用一个方法来获取此实例。如以下代码(2)所示。
Public final class Persistent{
Private static final EntityManagerFactory emfinstance=Persistence.createEntityManagerFactory(“transaction-optional”);
Private Persistent( ){
}
Public static EntityManagerFactory get( ){
return emfinstance; }
}(2)
通过Psistent类,可以创建EntityManager实例,如以下代码(3)所示。
Entity Manager entity Manager=Persistent.get().creat Entity Manager();(3)
当获取到Entity Manager对象,就可以调用其API提供的方法对数据做存储、更新、查询、删除的操作。
如以下代码(4)执行对User对象的保存。
public void save(Long deparmentId){
EntityManager pm= Persistent.get( ).creatEntityManager( );
User user=new User( );
user.setLoginName(“li xiangjun”);
user.setPassword(“12345”);
…
pm.persist(user)
}(4)
如以下代码(5)执行对User对象的查找。
public void getUser(Long userId){
EntityManager pm= Persistent.get( ).creatEntityManager( );
User user=pm.find(User.class,userId);
}(5)
如以下代码(6)执行对User对象的更新。
public void updateUser(User user){
EntityManager pm=Persistent.get().creatEntityManager();
pm.refresh(user);
}(6)
如以下代码(7)执行对User对象的删除。
public void deleteUser(Long userId){
EntityManager pm= Persistent.get().creatEntityManager( );
User user=pm.find(User.class,userId);
pm.remove(user);
}(7)
应用系统采用Struts2.0+spring3.0开源框架,开发语言采用Java语言。在Eclipse 4.2的开发工具下,需要安装Google App Engine Java SDK 1.7.7,它是 GAE支持 Java开发应用的软件开发工具包; 以及Eclipse4.2版本专用的 Google插件程序Google Plugin for Eclipse 4.2[12]。
1)系统的主要模块-公文审批具体实现如图3所示。
2)公文流转的过程会伴随着短信息的发送,本项目将短信功能独立出来,不但可以嵌入公文审批功能中,给用户发送短信提醒,而且可以作为一个独立的功能模块,提供给用户发送短信。
短信功能模块主要包括短信发送、群组管理、黑名单管理和已发送短信。短信模块功能采用了SMGP形式,SMGP是GOA项目中的短信模块和运营商网管之间的桥梁。短息模块通过Http的形式,将数据提交给SMGP,SMGP最终将短信提交给运营商网管。系统成功的在云平台下的Web系统中调用非云平台下的系统。在SMGP中采用线程池的技术来处理短信的发送,具体处理流程如图4所示。
系统的具体实现如图5所示。
3)可定制化。本项目是以企业的实际OA需求出发,每个公司都可以根据自己实际需求在该项目中定制相应的功能。中小企业以租用SaaS 服务的方式申请这些服务的使用权,基于Web 使用这些服务,管理自己的数据,以满足企业多样化的需求[13]。下图为2个不同的企业所定制的GOA系统。
4)项目开发完成后,需要在GAE中部署应用程序。
首先需要线下编辑工程war目录下的 appengine-web.xml文件,将 <application></application>元素更改为已注册的 ID:GOA.随后选择google->deploy to app engine,点击配置工程信息,配置好工程信息以后,就可以将工程上传到GAE云平台之上。GAE提供了Eclipse Google Plugins的上传界面来将应用程序上传到 GAE云平台中。工程上传以后,可以在GAE的应用管理页面看到上传的应用,完成部署。
当部署完成后,用户利用GoAgent代理服务器(Google App Engine的服务器充当代理),通过浏览器就可以进行功能使用和访问。用户不但可以体验利用Google云平台的数据存储和并行处理的优势提供的应用软件按需服务,同时还可以共享Google的云端的文档系统及邮件系统,增加OA系统的网络协同和共享特性。
本系统分别在普通环境下和GAE环境下测试,其中普通环境下的数据库采用MySql.测试主要包括数据存储,读取速率的测试以及系统性能测试。在进行数据存储、读取速率测试时,测试了同时插入以及读取100、1000、10000条数据的所需时间。性能测试主要测试ART(AverageResponseTime,平均响应时间)和TPS(RequestsPerSeeond,每秒可相应的请求数)。测试结果见表1.
从表1和表2可以看出,GAE环境中BigTable的存储速率远远大于普通环境下数据的存储速读,并且随着数据量的增大,这种优势会越来越大。但是GAE环境中数据的读取速率小于普通环境下数据读取的速率,这与BigTable的设计有关,BigTable并不完全支持关系数据库,在数据的查询中没有像关系数据库那样对查询做了优化。由于Web系统中大数据量的获取可以通过分页技术实现数据的分批加载,因此可以忽略BigTable读取数据速率方面的不足。
表3描述了在GAE环境下系统的性能测试结果。性能测试采用Loadruuner自动化测试化工具,测试分2组进行。第一组设定200个vuser(虚拟用户),第二组设定400个vuser,2组的测试时间均为2 min.从图中可以看出随着虚拟用户的增加,用户请求数会增多,同时也会有部分丢失的情况,但是这与并发用户数有关,而实际情况并不会有如此高的并发。2组测试数据的ART结果,符合Web压力测试标准,可见系统的性能良好。
从上面的分析可以看出,GAE环境下的Web应用在数据的存储以及性能方面均高于普通环境中的Web应用。GAE环境下的Web应用在数据读取方面等同于传统的基于关系数据库的应用系统。
文中分析了传统OA系统的缺陷,提出了将云计算技术应用于传统OA系统。根据大多高科技中小企业的实际需求,基于GAE平台设计并实现了一个云端的OA系统。并将其成功的部署到Google云平台下,目前系统运行稳定,正在对A企业提供OA系统的支持。作者通过对本系统的设计和开发,认为目前在云端适合开发部署一些基于请求-应答的高伸缩性的互联网应用系统(例如电子商务系统); 或一些非战略的不涉及多表关联查询的公共应用系统,例如人事管理系统、OA系统; 还可以应用在智慧城市的建设中。