SOA阅读笔记
面向服务的架构案例分析
张子轩
(石家庄铁道大学,河北省石家庄市 050043)
摘 要:面向服务的架构(Service-Oriented Architecture,SOA)是一个组件模型,它将应用程序的不同功能单元----服务(service),通过服务间定义良好的接口和契约(contract)联系起来,使得这些系统中的服务能够以-种统一和通用的方式进行交互。本文主要介绍soa的原理,组成,流程和标准等方面。并通过一系列我做过的实际项目来进行面前服务的架构案例分析。
关键字:SOA
Case Analysis of Service-Oriented Architecture
Zhangzixuan
(Shijiazhuang Tiedao University, Hebei Provence Shijiazhuang City 050043)
Absrtact: service-oriented architecture (SOA) is a component model, which connects different functional units of application programs-service, through well-defined interfaces and contract between services, so that services in these systems can interact in a unified and universal way. This article mainly introduces the principle, composition, process and standard of soa. And through a series of practical projects I have done, I will analyze the case of the architecture of the front service.
Key words:SOA
一:什么是SOA?
目前对于SOA的定义并没有一个标准的定义,我们一般认为面向服务的架构是一个组件模型,它将应用程序的不同功能单元----服务(service),通过服务间定义良好的接口和契约(contract)联系起来。接口采用中立的方式定义,独立于具体实现服务的硬件平台、操作系统和编程语言,使得构建在这样的系统中的服务可以使用统一和标准的方式进行通信。这种具有中立的接口定义(没有强制绑定到特定的实现上)的特征称为服务之间的松耦合。
二:说明面向服务架构的主要技术和标准以及具体内容
1.SOA相关技术标准分类可以根据技术标准在 SOA 中的角色功能,将其分为三大类:服务层次上的信息交互规范、基础通信标准规范、元数据标准规范。根据各种标准规范在SOA 体系中的角色功能,可以将 SOA 协议栈分为7 层。
2、为什么要使用SOA
传统的架构,软件包是被编写为独立的(self-contained)软件,即在一个完整的软件包中将许多应用程序功能整合在一起。实现整合应用程序功能的代码通常与功能本身的代码混合在一起。
我们将这种方式称作软件设计“单一应用程序“。与此密切相关的是,更改一部分代码将对使用该代码的代码具有重大影响,这会造成系统的复杂性,并增加维护系统的成本。而且还使重新使用应用程序功能变得较困难,因为这些功能不是为了重新使用而打的包。
缺点:代码冗余 不能重用 紧耦合 成本高
SOA旨在将单个应用程序功能彼此分开,以便这些功能可以单独用作单个的应用程序功能或“组件”。这些组件可以用于在企业内部创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用程序。
SOA优点:代码重用 松耦合 平台独立 语言无关
下面列举SOA主要技术和标准以及内容
1、访问服务
JCA(Java Connector Architecture): JCA 定义了一套标准的接口,用于让连接器把兼容的应用程序服务器无缝地整合起来,以及提供标准接口允许客户(或者应用程序服务器的应用程序主机)用一种统一的方法使用连接器。
JDBC (JavaData Base Connectivity, java 数据库连接) : JDBC 是一种用于执行SQL语句的JavaAPI,可以为多种关系数据库提供统一访问,它由- -组用Java语言编写的类和接口组成。JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。专
2、数据服务
XQuery (XML Query) : XQuery 是W3C所制定的一套标准,用来从类XML文档中提取信息,类XML文档可以理解成一切符合XML数据模型和接口的实体,他们可能是文件或关系型数据库。
3、业务服务
SCA (Service Component Architecture): SCA 即服务组件架构,它提供了一种编程模型,可以支持基于S0A的应用程序实现。SCA 支持实现服务组件的各种技术及连接服务组件的各种存取方法。
EJB(Enterprise JavaBean): EJB 是一个可重用的,可移植的J2EE组件。EJB 由封装了业务逻辑的多个方法组成。EJB 运行在-一个容器里,多个远程和本地客户端可以调用这个方法,允许开发者只关注与bean中的业务逻辑而不用考虑事务支持、安全性和远程对象访问等复杂和容易出错的事情。
4、流程服务
BPIN (Business Process Modeling Notation) : BPMN 是一个业务流程建模和Web服务标准,其首要目标是提供一个通俗易懂的标注体系,另外-一个重要目标是提供内部模型,便于下一代XML语言对业务流程的执行。
5、展现服务
HTML (HyperTextMark-upLanguage) : HTML即超文本标记语言或超文本链接标示语言,是www的描述语言。
JSP(JavaServer Pages): JSP 是一种动态网页技术标准,JSP 将网页逻辑与网页设计和显示分离,由HTML代码和嵌入其中的Java代码所组成,支持可重用的基于组件的设计。JSP 页面是跨平台的,即能在Windows下运行,也能在Linux等其它操作系统上运行。
6、消息传输
HTTP (Hypertext Transfer Protocol) : HTTP即超文本传输协议是用于从Web服务器传输超文本到本地浏览器的传送协议。HTTPS (Secure Hypertext Transfer Protocol) ,又称安全超文本传输协议,其安全基础是SSL,使用40位关键字作为RC4流加密算法。
7、消息交换
XML (Extensible Markup Language) : XML 即扩展标识语言。是通用标识语言标准(SGML)一个子集,是描述网络上的数据内容和结构的标准。
8、ESB是传统中间件技术与XML、Web服务等技术结合的产物。ESB提供了网络中最基本的连接中枢,是构筑企业神经系统的必要元素。ESB的出现改变了传统的软件架构,可以提供比传统中间件产品更为廉价的解决方案,同时它还可以消除不同应用之间的技术差异,让不同的应用服务器协调运作,实现了不同服务之间的通信与整合。从功能上看,ESB提供了事件驱动和文档导向的处理模式,以及分布式的运行管理机制,它支持基于内容的路由和过滤,具备了复杂数据的传输能力,并可以提供一系列的标准接口。ESB的五个基本功能为:服务的MetaData管理、传输服务、中介、多服务集成方式、服务和事件管理支持。八个扩展功能为:面向服务的元数据管理、Mediation、通信、集成、服务交互、服务安全、服务质量、服务等级。
三、概要叙述你参与分析和开发的软件系统开发项目以及你所担任的主要工作
大二的时候我们开发过一款名叫铁大通的手机APP,主要是做石家庄铁道大学的展示和介绍。有地图查询功能,校内信息展示等等。我所担任的主要的主要任务是分析整个系统所需要用到的开发技术,做整体的开发安排等。我在整体的设计考虑到了要把整个软件变成一个服务一样的去工作。他不仅是一个独立的应用程序,也是一个很好的部件接口。在这个过程中就体现了面向服务架构设计的优点和重要性。将单个应用程序功能彼此分开,以便这些功能可以单独用作单个的应用程序功能或"组件"。这些组件可以用于创建各种其他的应用程序,或者如有需要,对外向合作伙伴公开,以便用于合作伙伴的应用程序。
说明你所参与的软件系统开发项目中构建SOA架构时遇到了哪些问题,具体实施效果如何。
一个SOA系统要具有以下六大关键要素——基础设施、已有资源、企业服务、流程模型、服务展现和系统工具(包括开发、测试和管理工具等)。
在基础设施和已有资源都已具备的基础上,开发和构建一个SOA系统要包括以下几方面的工作:
首先需要设计开发出符合标准的服务,这是整个SOA系统最核心的要素。
基于标准服务,借助流程编排工具和建模工具,组织构造流程,生成流程模型,更好地满足业务需求。
实际构建和开发SOA系统,具体包括服务和应用程序的开发,数据的访问、处理和管理,及对服务各种形式的展现等。
我们的软件中调用了一个高德地图的api接口,这个是高德地图公司面向开发者的公开接口。有完整的使用文档和使用方法,我们只需要照葫芦画瓢就可以了。但是我们想把我们的软件基于SOA进行架构的时候就会遇到很多问题。一个是我们没有足够大的后台做数据处理的支持,另外我们的技术有限,还达不到那么高的要求去吧软件做成可使用的接口去给其他应用程序调用。所以实现的效果不是很好。但是相信随着学习的深入,对SOA架构理解的加深,会越来越好的。
五结束
面向服务架构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。虽然面向服务的体系结构不是一个新鲜事物,但它却是更传统的面向对象的模型的替代模型,面向对象的模型是紧耦合的。