一、概述
SaaS(Software-as-a-service)的意思是软件即服务,SaaS的中文名称为软营或软件运营。SaaS是基于互联网提供软件服务的软件应用模式。SaaS提供商为企业搭建信息化所需要的所有网络基础设施及软件、硬件运作平台,并负责所有前期的实施、后期的维护等一系列服务,企业无需购买软硬件、建设机房、招聘IT人员,即可通过互联网使用信息系统。就像打开自来水龙头就能用水一样,企业根据实际需要,从SaaS提供商租赁软件服务。
SaaS是一种软件布局模型,其应用专为网络交付而设计,便于用户通过互联网托管、部署及接入。SaaS应用软件面对的用户,在业务细节和业务流程上各不相同,特别是管理类的SAAS应用软件,同一行业内不同性质的用户在管理方法和业务流程上都会有很大的差别。
SAAS由于用户各种业务细节、管理方法和业务流程不相同的特征,需要特别注重系统的扩展性、并发性、灵活性、重用性、可移植性以有离线应用。
SAAS注重的扩展性、并发性、灵活性、重用性、可移植性可用SOA体系结构来完成。
二、SOA体系结构
面向服务的体系结构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以一种统一和通用的方式进行交互。
这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。松耦合系统的好处有两点,一点是它的灵活性,另一点是,当组成整个应用程序的每个服务的内部结构和实现逐渐地发生改变时,它能够继续存在。而另一方面,紧耦合意味着应用程序的不同组件之间的接口与其功能和结构是紧密相连的,因而当需要对部分或整个应用程序进行某种形式的更改时,它们就显得非常脆弱。
对松耦合的系统的需要来源于业务应用程序需要根据业务的需要变得更加灵活,以适应不断变化的环境,比如经常改变的政策、业务级别、业务重点、合作伙伴关系、行业地位以及其他与业务有关的因素,这些因素甚至会影响业务的性质。我们称能够灵活地适应环境变化的业务为按需(On demand)业务,在按需业务中,一旦需要,就可以对完成或执行任务的方式进行必要的更改。
SOA带给SaaS的既有松散的耦合,也有约定化的、能够治理的服务,这些服务都经过约定,而且都于政策的元数据相关联,这样可以对服务提供者和服务使用者之间的关系进行约束。
三、SAAS系统的特点。
SAAS产品的特点之一就是多用户,每个用户的工作流程不一样,业务规则不一样,业务逻辑也不一样。SAAS平台里的系统功能分为三种类型:A、信息类型的功能;B、不涉及业务流程的功能;C、业务类型的功能。这三种类型的功能,有它们各自的特点:
信息类型的功能,每个用户都会用到相同的内容和功能,这部分的功能,对于每个用户都是通用的;
不涉及业务流程的功能,每个用户基本上都按照行业通用的方法、规则去处理,但可能在一些细节上会调整一些内容,比如在客户关系管理的内容上,有些用户关注的内容多一些,有些用户关注的内容少一些。这部分功能的流程是通用的,但内容会有不同;
业务类型的功能,每个用户的工作流程、管理方法、业务规则不尽相同,所以在使用SAAS平台时,这部分内容,每个用户需要按他们的流程和业务规则去使用。我们可以先假设:每个用户的流程和业务管理都是独特的。对于用户的独特需求,平台必须做到让每个用户都预订他们自己的工作流程和业务规则,平台得到这些流程和规则后,能自动在调整系统的逻辑,让系统关于该用户的逻辑,完全按照用户的流程来走。
四、基于J2EE和SOA的SAAS系统软件架构的设计
SOA的核心原则是:松散耦合——Web服务之间的松散耦合,以及服务之外的松散耦合。对于面向同步和异步应用的,基于请求/响应模式的分布式计算来说,一个应用程序的业务逻辑(business logic)或某些单独的功能被模块化并作为服务呈现给消费者或客户端。这些服务的关键是他们的松耦合特性。例如,服务的接口和实现相独立。应用开发人员或者系统集成者可以通过组合一个或多个服务来构建应用,而无须理解服务的底层实现。举例来说,一个服务可以用J2EE来实现,而使用该服务的应用程序可以在不同的平台之上。
SAAS系统有6点要求:可扩展、可重用、可移植、易测试、高访问速度、离线应用。构建于基于J2EE和SOA之上的SAAS系统,针对每样要求提供相应的解决方案:
(1)可扩展:技术架构分为UI层、MVC层、业务逻辑层、持久层、数据库层。每一层都可以根据业务情况和需求扩展,而又不对其它层造成影响。每个程序员只关注他所要开发的那一层就足够了。比如:做界面的人员不用关心业务逻辑是如果处理,不用关心数据存放在那一个表中;做持久层的人员不用关心界面是如果显示的。采用SOA编程,MVC层、业务层、持久层的各个对象可以根据业务需求而被扩展。
(2)可重用:对象之间采取松隅合,UI层、业务层和持久层的每个对象可以被重用。对象的重用可以起到规范开发以及团队容易配合的作用。
(3)可移植:技术架构使用JAVA EE进行开发,可以跨平台移植,也可以在WebLogic、JBoss、Tomcat等应用服务器之间移植
(4)易测试:开发时使用JUnit进行单元测试,使系统易于测试。
(5)高访问速度:为了提高访问速度,在UI层和MVC层加需加入缓存对象,初步定为用OS Cache作为缓存服务。
(6)离线应用:因为是SAAS应用,所以在开发时必须在UI层和MVC层就考虑离线应用的问题,程序每次提交时,都会调用离线判断接口。
基于J2EE和SOA之上的SAAS系统架构,共分为7层:
以下是J2EE和SOA的七层架构图:
7层的开发架构之间采取松隅合,采取面向接口和SOA的编程。这样每一层在有必要时,可以把它的技术核心用将来新的技术全部替换,而不全影响到其它层,也不会影响到整个技术架构。SOA即使只作为实现模块设计的手段,其优点也非常突出。用SOA设计的模块就是将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,这使得构建在各种这样系统中的服务可以采用一种统一和通用的方式进行交互。这是一种松散藕合的接口方式,其易损性比内部数据结构之间基于代码的交互作用低得多。其优点与面向对象的设计非常相似,甚至更胜一筹。
SOA内部模块化并不会引发安全问题,因为它不会将新的功能暴露给其他系统或外部机构。但是,代码库的重复使用和开放可存取性却存在着危险性,即通过与用户和供应链上的合作伙伴所建立的业务接口,可能暴露新的服务功能。当这种情况发生时,预定的服务供给可能中断,给企图扩展权限和进行服务攻击不怀好意者留下路径。
任何一种安全标准或所支持的标准总数,都不足以评估SOA或Web服务平台的效能。因此,对安全标准的支持并不就意味着安全。在许多情况下,安全标准只是定义了让各种服务模式能彼此互操作的框架,实际上它并不等于任何一种特殊服务模式都能良好运行。
即使完全按照Web服务安全实施办法,服务仍可能因为使用弱密码、受简单的密约管理,或者数据库未加密而出现不安全的情况。应当说安全是一种实际应用状态,而不仅仅是一系列所支持的标准。
SOA通过分布式系统的开放性标准以及模块化设计来提供安全的Web服务。
以下是实现七层架构的主要应用技术:
(1)Google Gears主要是处理离线应用,包括处理离线数据的同步,网页程序的客户端缓存等。
(2)ExtJs和DoJo是两种Ajax框架,它们主要是处理用户界面,使用胖客户端策略,加强客户端的美观和易操作性,用户使用界面时,就像操作C/S的界面一样,让用户界面变得丰富和易用。ExtJS是一个跨浏览器,用于开发RIA(Rich iInternet Application)应用的JavaScript框架。提供:高性,可定制的Web UI控件库。良好的设计、丰富的文档和可扩展的组件模型。Dojo是一个强大的面向对象JavaScript框架。主要由三大模块组成:Core、Dijit、DojoX。Core提供Ajax,events,packaging,CSS-based querying,animations,JSON等相关操作API。Dijit是一个可更换皮肤,基于模板的WEB UI控件库。DojoX包括一些创新/新颖的代码和控件:DateGrid,charts,离线应用,跨浏览器矢量绘图等。
(3)Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间。使用Struts 2.0中的拦截器,拦截系统出错信息,并转到出错处理页面;拦截用户是否登陆,如果没有登陆,则转到登陆页面。
(4)Spring:处理业务。这里主要是用到Sping的Ioc和Aop,使用AOP拦截器,对持久层统一进行事务处理。对Ioc的使用,主要是通过注解,这样可以减少大量的配置文件,不用在ApplicationContext里配置就可以使用IOC。
(5)Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。
(6)iBatis 提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,对于具体的数据操作,Hibernate 会自动生成SQL 语句,而ibatis 则要求开发者编写具体的SQL 语句。
(7)OSCache提供了在现有JSP页面之内实现快速内存缓冲的功能。能用于任何Java应用程序的普通的缓存解决方案。可以缓存任何对象,可以永久缓存--缓存能随意的写入硬盘,支持集群--集群缓存数据能被单个的进行参数配置,不需要修改代码。
(8)OSWorkflow是一个灵活的工作流引擎,设计成可嵌入到企业应用程序中。它提供了许多的持久化API支持包括: Hibernate,JDBC和其它。OSWorkflow可以与Spring集成。
(9)Yale CAS主要是对用户的认证,起到保护系统安全的作用,Acegi主要是对应用程序的授权,起到保护系统安全的作用。
五、结束语
基于JAVA技术的多层结构,能很好地实现Web服务和面向服务的架构,构建出具有松散耦合的SAAS应用,SAAS本身具体有的多用户多流程,需要用SOA架构来支持。本文提出的JAVA七层架构是用SOA解决SAAS需求的一种比较好的解决方案,而且由于JAVA和SOA的开放性,基于这种模式的开发被认为是一条有前途的方向。
(作者单位;广州市知易信息技术有限公司)