前言
面向服务架构soa以其独特的优势越来越受到企业的重视,它可以根据需求通过网络对松散耦合的粗粒度应用组件进行分布式部署、组合和使用。服务层是SOA的基础,可以直接被应用调用,从而有效控制系统中与软件代理交互的人为依赖性。Soa的开发方法一般主要有开源的dubbo、dubbox、mule、wso2、cxf,以及付费的oracle soa、ibm soa等。
SOA是什么
SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S模型、XML(标准通用标记语言的子集)/Web Service技术之后的自然延伸。
SOA将能够帮助软件工程师们站在一个新的高度理解企业级架构中的各种组件的开发、部署形式,它将帮助企业系统架构者以更迅速、更可靠、更具重用性架构整个业务系统。较之以往,以SOA架构的系统能够更加从容地面对业务的急剧变化。
SOA的实施具有几个鲜明的基本特征。实施SOA的关键目标是实现企业IT资产的最大化作用。要实现这一目标,就要在实施SOA的过程中牢记以下特征:
可从企业外部访问
随时可用
粗粒度的服务接口分级
松散耦合
可重用的服务
服务接口设计管理
标准化的服务接口
支持各种消息模式
精确定义的服务契约
SOA服务具有平***立的自我描述XML文档。Web服务描述语言(WSDL, Web Services Description Language)是用于描述服务的标准语言。
SOA 服务用消息进行通信,该消息通常使用XML Schema来定义(也叫做XSD, XML Schema Definition)。消费者和提供者或消费者和服务之间的通信多见于不知道提供者的环境中。服务间的通讯也可以看作企业内部处理的关键商业文档。
在一个企业内部,SOA服务通过一个扮演目录列表(directory listing)角色的登记处(Registry)来进行维护。应用程序在登记处(Registry)寻找并调用某项服务。统一描述,定义和集成(UDDI, Universal Description, Definition, and Integration)是服务登记的标准。
每项SOA服务都有一个与之相关的服务品质(QoS, quality of service)。QoS的一些关键元素有安全需求(例如认证和授权),可靠通信(注:可靠消息是指,确保消息“仅且仅仅”发送一次,从而过滤重复信息。),以及谁能调用服务的策略。
随着全球信息化的浪潮,信息化产业不断发展、延伸,已经深入了众多的企业及个人,SOA系统架构的出现,将给信息化带来一场新的革命。
纵观信息化建设与应用的历程,尽管出现过XML(标准通用标记语言的子集)、Unicode、UML等众多信息标准,但是许多异构系统之间的数据源仍然使用各自独立的数据格式、元数据以及元模型,这是信息产品提供商一直以来形成的习惯。各个相对独立的源数据集成一起,往往通过构建一定的数据获取与计算程序来实现,这样的做法需要花费大量工作。信息孤岛大量存在的事实,使信息化建设的ROI(投资回报率)大大降低,ETL成为集中这些异构数据的有效工具。 ETL常用于从源系统中提取数据,将数据转换为与目标系统相兼容的格式,然后将其装载到目标系统中。数据经过获取、转换、装载后,要产生应用价值,还需另外的数据展现工具予以实现,如此复杂的数据应用过程,必定产生高昂的应用成本。
结构化的数据管理尚可通过以上方法,予以实现其集成应用。在非结构化的内容方面,这些具有挑战性的问题令人生畏。内容管理的应用方案基于不同的信息化应用系统,而且大部分是纵向的以组织部门为界限的。在内容管理市场中,经常使用来自不同厂商的产品来提供这些解决方案。即使是同一个厂商的产品,相互之间的功能也是经常重叠,并且无法集成。
随着信息化建设的深入,不同应用系统之间的功能界限已趋于模糊。同时企业资源计划系统和协同商务系统,又需要商业智能的分析展现数据提供用户操作依据。
在激烈竞争且多变的市场环境下,企业的管理模式很难固化,应用传统的信息化软件,当企业要做出一些改动时需要面对巨大的挑战。
2000年WebService出现后,SOA被誉为下一代Web服务的基础框架,已经成为计算机信息领域的一个新的发展方向。
SOA的出现给传统的信息化产业带来新的概念,不再是各自独立的架构形式,能够轻松的互相联系组合共享信息。
可复用以往的信息化软件。基于SOA的协同软件提供了应用集成功能,能够将ERP、CRM、HR等异构系统的数据集成。
松散耦合方式,只要充分了解业务的进程,就可以不用编写一行代码,通过流程图实现一套我们自己的信息系统。就像已经给你准备好了砖瓦和水泥,只需要想好盖什么样的房子就可以轻松的盖起。加快开发速度,并且减少了开发和维护的费用。软件将所有的管理提炼成表单和流程,以记录管理的内容,指定过程的流转方向。
更简便的信息和数据集成。信息集成功能可以将散落在广域网和局域网上的文档、目录、网页轻松集成,加强了信息的协同相关性。同时,复杂、成本高昂的数据集成,也变成了可以简单且低成本实现的参数设定。创建了完全集成的信息化应用新领域。
在具体的功能实现上,SOA协同软件所实现的功能包括了知识管理、流程管理、人事管理、客户管理、项目管理、应用集成等,从部门角度看涉及了行政、后勤、营销、物流、生产等。从应用思想上看,SOA协同软件中的信息管理功能,全面兼顾了贯穿整个企业组织的信息化软硬件投入。尽管各种IT技术可以用于不同的用途,但是信息管理并没有任意地将信息分为结构化或者非结构化的部分,因此ERP等结构化管理系统并不是信息化建设的全部;同时,信息管理也没有将信息化解决方案划分为部门的视图,因此仅仅以部分为界限去构建软件应用功能的思想未必是不可撼动的。基于SOA的协同软件与 ERP、CRM等传统应用软件相比,关键的不同在于它可以在合适的时间、合适的地点并且有正当理由向需要它提供服务的任何用户提供服务。
利用SOA架构开发的优点:
第一、更易维护
业务服务提供者和业务服务使用者的松散耦合关系及对开放标准的采用确保了该特性的实现。建立在以 SOA基础上的信息系统,当需求发生变化的时候,不需要修改提供业务服务的接口,只需要调整业务服务流程或者修改操作即可,整个应用系统也更容易被维护。
第二、更高的可用性
该特点是在于服务提供者和服务使用者的松散耦合关系上得以发挥与体现。使用者无须了解提供者的具休实现细节。
第三、更好的伸缩性
依靠业务服务设计、开发和部署等所采用的架构模型实现伸缩性。使得服务提供者可以互相彼此独立地进行调整,以满足新的服务需求。
下面详细论述几种主要的开发方法和工具:
一、Dubbo
DUBBO是淘宝公司的一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。淘宝公司的许多应用就是采用dubbo,运行稳定成功。现在,不少企业采用dubbo开发应用系统。Dubbo是简单有效的soa架构,值得采用。
相比于其他服务框架,DUBBO有如下优势:
透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入;
软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点;
服务自动注册与发现,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
其核心部分包含:
远程通讯:提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
集群容错:提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
自动发现:基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo有如下功能:
透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo基本原理-分布式服务框架
快速启动
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
服务提供者:定义服务接口
定义服务接口:(该接口需单独打包,在服务提供方和消费方共享)
在服务提供方实现接口
在服务提供方实现接口:(对服务消费方隐藏实现)
用Spring配置声明暴露服务
加载Spring配置
服务消费者:
加载Spring配置,并调用远程服务:(也可以使用IoC注入)
Zookeeper注册中心安装
建议使用dubbo-2.3.3以上版本的zookeeper注册中心客户端。
Zookeeper是Apache Hadoop的子项目,强度相对较好,建议生产环境使用该注册中心。
Dubbo未对Zookeeper服务器端做任何侵入修改,只需安装原生的Zookeeper服务器即可,所有注册中心逻辑适配都在调用Zookeeper客户端时完成。
开源网址:
http://alibaba.github.io/dubbo-doc-static/Home-zh.htm
Zookeeper下载地址:
http://zookeeper.apache.org/releases.html
Zookeeper注册中心安装:
http://alibaba.github.io/dubbo-doc-static/Zookeeper+Registry+Installation-zh.htm
二、Mule
Mule是一个以Java为核心的轻量级的消息框架和整合平台,基于EIP(Enterprise Integeration Patterns,由Hohpe和Woolf编写的一本书)而实现的。Mule的核心组件是UMO(UniversalMessage Objects,从Mule2.0开始UMO这一概念已经被组件Componse所代替),UMO实现整合逻辑。UMO可以是POJO,JavaBean等等。它支持30多种传输协议(file,FTP,UDP,TCP,email,HTTP,SOAP,JMS等),并整合了许多流行的开源项目,比如Spring,ActiveMQ,CXF,Axis,Drools等。
Mule Studio是一个功能强大、用户界面友好的基于Eclipse的开发工具。使用者不需要深入了解Mule的XML配置语法,就可以在几分钟内轻松的创建、编辑、测试Mule ESB流程。Mule Studio基于Eclipse技术,包含3个主要部件:项目结构树、工具箱和画布。项目结构树包含整个项目的目录结构。
Mule是一个企业服务总线(ESB)消息框架。它的主要特性包括:
1.基于J2EE1.4的企业消息总线(ESB)和消息代理(broker)。
2.可插入的连接性:比如Jms,jdbc,tcp,udp,multicast,http,servlet,smtp,pop3,file,xmpp等。
3.支持任何传输之上的异步,同步和请求响应事件处理机制。
4.支持Axis或者Glue的Web Service.
5.灵活的部署结构[Topologies]包括Client/Server,P2P, ESB 和Enterprise Service Network.
6.与Spring 框架集成:可用作ESB 容器,也可以很容易的嵌入到Spring应用中。
7.使用基于SEDA处理模型的高度可伸缩的企业服务器。
8.强大的基于EIP模式的事件路由机制等。
三、wso2
WSO2ESB是一种根据ApacheV2.0许可证发布的快速、轻量级和灵活的企业服务总线产品。使用ESB在HTTP、HTTPS、JMS、mail等协议基础上通过业务系统过滤、转换、路由和处理SOAP,二进制、纯XML和文本消息。
WSO2ESB是一个为企业准备的完全成熟的ESB。WSO2ESB是建立在Apache Synapse项目基础上的。Apache Synapse是使用Apache Axis2创建的。
应用程序发送消息到ESB,该消息由ESB Transport捡起。
Transport通过消息管道发送消息。像安全和可靠的消息传递的信息方面的质量受到这个pipe的照顾。在该pipe内部是axis2的流入和流出流。ESB可以有如下两种操作:
消息中介:使用单管道
代理服务:使用独立的管道运输到不同的代理服务。
消息转换和消息路由可以看做一个独立的单元。如图所示,消息转换组件和路由组件之间没有明显的分离。WSO2ESB调用这个中介框架。一些转换发生在路由决定之前,一些转换发生在路由决定之后。这一部分由Synapse执行。
然后根据目的地将消息注入到独立的管道。在这里再次确定消息服务方面的质量。
传输层负责通过ESB所需的传输协议的转换。
该图显示了如何通过ESB的体系架构将请求传到一个实际的endpoint。响应处理是这个操作的反向操作。
所有这些组件可以通过WSO2ESB管理控制台管理和检测。
ESB Components
Transports
WSO2ESB支持所有广泛使用的传输协议包括HTTP/s、JMS、VFS和特定领域的传输如FIX。一个新的传输协议使用axis2传输框架轻松地被添加和插入到ESB中。不同的传输工具为ESB带来各种消息内容/负载。
传输内容:
消息建设者:允许使用内容类型标识消息并使变成普通的XML消息集。因此每个内容类型都有相关联的建设者。WSO2ESB包含基于文本的内容信息的建设者和二进制内容建设者。
消息格式:建设者的相反的搭档。格式化程序通过指出传输协议处理前消息内容的类型将消息转换回原始格式。类似transport的用户可以使用axis2框架实现消息的建设和格式化。
参阅Transports
端点(Endpoints)
Endpoints作为具有传输协议的逻辑组件。两套端点地址和WSDL。地址endpoint可以使用任何可用的transport调度消息。
参阅Endpoints
代理服务(ProxyServices)
在WSO2ESB中代理服务是实现使用消息接收器和开放接收消息的虚拟服务。一个代理服务可以使用类似于一个普通的web服务地址的url访问。代理服务允许将WSDL发布到用于先前使用的程序组。可以使用任何可用的传输协议从代理服务接收和发送消息。
参阅Proxy Services Sample
主题(Topics)
Topics是另一个恢复消息处理事件的实施,包括subscription和events.
参阅eventing
中介(Mediators)
WSO2ESB的power仍然是为不同方面提供服务的全面调节库。使用mediator库实现广泛使用MEPs和EIPs。由于WSO2ESB提供了一个健康的框架,使得开发者写一个mediator非常容易。mediators可以使用包括Java,scripting和Spring的各种技术。
参阅mediator
序列(Sequences)
Sequence充当mediators的配置组件。Sequence允许阻止mediators实现管道和过滤模式。
参阅Sequences
任务和命令(Tasksand Commands)
Tasks提供在WSO2ESB中配置计划工作的设施并且允许执行mediation的内部或外部命令。
参阅Tasks
QoS组件(QoSComponents)
Qos组件实现可靠的消息传递和代理服务自带的Apache的Rempart和Sandesha两个实现模块的安全性。
配置、库/注册(Configuration,Repository/Registry)
Configuration是ESB架构的架构图。WSO2ESB提供了一个内置的 Repository/Registry存储配置和配置元数据,而且提供了使用远程库设施。
管理和配置界面(Managementand Configuration GUI)
有助于在生产环境中运行WSO2ESB组件可以在组件中找到。这些组件实现集群、高可用性和负载平衡功能。
GUI组件进行综合管理、配置和检测GUI。GUI通过分离前端和后端的关注实现了分层架构。这允许用户使用一个GUI控制台连接到多个后台。
WSO2ESB基于组件的体系结构加强了使用OSGi的松耦合性质。所有组件都建为OSGi包。
四、cxf
ApacheCXF 是一个开源的Services框架,CXF帮助您利用Frontend 编程 API来构建和开发Services,像JAX-WS。这些Services可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS或者JBI,CXF大大简化了Services的创建,同时它继承了XFire传统,一样可以天然地和Spring进行无缝集成。
功能特性
CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
支持Web Services标准:CXF支持多种Web Services标准,包含SOAP、BasicProfile、WS-Addressing、WS-Policy、WS-ReliableMessaging和 WS-Security。Frontends:CXF支持多种“Frontend”编程模型,CXF实现了JAX-WS API(遵循JAX-WS 2.0 TCK版本),它也包含一个“simplefrontend”允许客户端和 EndPoint 的创建,而不需要Annotation注解。CXF既支持 WSDL优先开发,也支持从Java的代码优先开发模式。容易使用: CXF设计得更加直观与容易使用。有大量简单的 API用来快速地构建代码优先的 Services,各种Maven的插件也使集成更加容易,支持 JAX-WS API,支持Spring 2.0更加简化的XML配置方式,等等。支持二进制和遗留协议:CXF的设计是一种可插拨的架构,既可以支持 XML,也可以支持非XML的类型绑定,比如:JSON和CORBA。
项目目标
下面列出了来自Apache CXF官方网站的项目目标。
概要
高性能可扩展简单且容易使用支持多种标准
支持 JAX-WS、JAX-RS、JSR-181和 SAAJ;支持SOAP 1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;支持WSDL 1.1、2.0;支持MTOM;
多种传输方式、Bindings、DataBindings和Format
Bindings:SOAP、REST/HTTP;DataBndings:目前支持JAXB 2.0、Aegis两种,默认是JAXB 2.0。XMLBeans、Castor和JiBX数据绑定方式将在CXF 2.1版本中得到支持;格式(Format):XML、JSON;传输方式:HTTP、Servlet、JMS和Jabber;可扩展的API允许为CXF增加其它的Bindings,以能够支持其它的消息格式,比如:CSV和固定记录长度。
2Apache CXF特点
灵活部署
轻量级容器:可在Tomcat或基于Spring的容器中部署Services;集成JBI:可以在如ServiceMix,OpenESB or Petals 等等的JBI容器中将它部署为一个服务引擎;集成 SCA:可以部署在如Tuscany之类的SCA容器中;集成J2EE:可以在J2EE 应用服务器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplication Server 和WebLogic Application Server,以及Jetty和Tomcat;独立的Java 客户端/服务器。
支持多种编程语言
全面支持JAX-WS 2.0 客户端/服务器编程模型;支持 JAX-WS 2.0 synchronous、asynchronous和one-way API‘s;支持JAX-WS 2.0 Dynamic Invocation Interface (DII) API;支持wrapped and non-wrapped风格;支持XML messaging API;支持JavaScript和ECMAScript 4 XML (E4X),客户端与服务端均支持;通过Yoko支持CORBA;通过Tuscany支持SCA;通过ServiceMix支持JBI;
代码生成
Java toWSDL;WSDLto Java;XSDto WSDL;WSDLto XML;WSDLto SOAP;WSDLto Service;
CXF 框架支撑环境
CXF 框架是一种基于 Servlet 技术的SOA应用开发框架,要正常运行基于 CXF应用框架开发的企业应用,除了 CXF框架本身之外,还需要JDK和Servlet容器的支持。
五、dubbox
当当网我们根据自身的需求,为Dubbo实现了一些新的功能,并将其命名为Dubbox(即DubboeXtensions)。
主要的新功能包括:
· 支持REST风格远程调用(HTTP +JSON/XML):基于非常成熟的JBoss RestEasy框架,在dubbo中实现了REST风格(HTTP + JSON/XML)的远程调用,以显著简化企业内部的跨语言交互,同时显著简化企业对外的Open API、无线API甚至AJAX服务端等等的开发。事实上,这个REST调用也使得Dubbo可以对当今特别流行的“微服务”架构提供基础性支持。 另外,REST调用也达到了比较高的性能,在基准测试下,HTTP+ JSON与Dubbo 2.x默认的RPC协议(即TCP + Hessian2二进制序列化)之间只有1.5倍左右的差距,详见下文的基准测试报告。
· 支持基于Kryo和FST的Java高效序列化实现:基于当今比较知名的Kryo和FST高性能序列化库,为Dubbo 默认的RPC协议添加新的序列化实现,并优化调整了其序列化体系,比较显著的提高了Dubbo RPC的性能,详见下图和文档中的基准测试报告。
· 支持基于嵌入式Tomcat的HTTP remoting体系:基于嵌入式tomcat实现dubbo的HTTP remoting体系(即dubbo-remoting-http),用以逐步取代Dubbo中旧版本的嵌入式Jetty,可以显著的提高REST等的远程调用性能,并将Servlet API的支持从2.5升级到3.1。(注:除了REST,dubbo中的WebServices、Hessian、HTTP Invoker等协议都基于这个HTTP remoting体系)。
· 升级Spring:将dubbo中Spring由2.x升级到目前最常用的3.x版本,减少项目中版本冲突带来的麻烦。
· 升级ZooKeeper客户端:将dubbo中的zookeeper客户端升级到最新的版本,以修正老版本中包含的bug。
注:dubbox和dubbo 2.x是兼容的,没有改变dubbo的任何已有的功能和配置方式(除了升级了Spring之类的版本)。另外,dubbox也严格遵循了Apache 2.0许可证的要求。
总之,soa架构具有松耦合、高复用、开发、维护灵活方便、支持多平台多系统、对原系统良好支持、消除信息孤岛等许多优点,以dubbo为代表的开发方法有一百多种,以上5种主要的方法值得借鉴采用,相信一定会带来极好的价值!
-
SOA
+关注
关注
1文章
288浏览量
27472
发布评论请先 登录
相关推荐
评论