zoukankan      html  css  js  c++  java
  • 深入浅出SOA(Service Oriented Architecture)

    介绍

            在前面的文章中我写了篇关于Web Services的,其实本人对这分布式领域是十分感兴趣的,今天,我将概要地写个关于SOA(面向服务的架构)的文章,文章可能不是很细,但是比较适合作为入门的学习资料,希望大家能喜欢。下面我将逐节进行SOA的介绍。

    什么是SOA?

            SOA的全称是Service Oriented Architecture,即面向服务的架构。在定义SOA之前我们先看看服务(service)的定义。在现实生活中,服务指的是我们支付后而获得的服务内容。例如:去酒店吃饭时点菜的服务内容,首先客人走到柜台点菜,然后厨房将为客人准备食物,最后服务生上菜给客人。在这个过程中,柜台点菜、厨房做菜以及服务生上菜这三个部分分别就是服务,如下图所示:

    image

    图1 酒店的服务

    所以,当你在酒店点菜时,你需要上述的三个服务一起协同工作。

            和上面的例子相似,软件世界中,服务的内容将变为业务服务(business service)。它们的逻辑是自包含(self contained)的,所以下面我们将定义业务服务。

      业务服务的定义:业务服务是指将自包含的业务功能在逻辑上进行的封装,封装的结果就是业务服务。  

       例如:下面的图中显示了简单的订货系统“order system”,它是通过将支付网关(payment gateway)、存货系统(stock system)和发货系统(delivery system)三个服务组合后实现的。所有这些服务都是自包含的。它们就像一个黑盒,我们不用理解这些业务服务的内部实现细节,对于外部世界来说它只是个黑盒,只用关心消息的接收和进行服务。例如:支付网关(payment gateway)中,业务服务将接收消息检查信用(check credit),然后输出客户是否有信用凭证。对于“order system”来说,业务服务支付网关(payment gateway)就是一个黑盒。

    image

    图2 简单订货系统

     在理解了上边的内容后,让我们先理解一些SOA的基本内容,最后我们将给出SOA的定义。

     (1)SOA组件是松耦合的:当我们说松耦合,指的是每个服务是自包含的,只出现在单个的逻辑中,例如:上例中所示的支付网关(payment gateway)服务,它可以用在别的系统中。

    (2)SOA服务是黑盒的:SOA服务隐藏内部的复杂性。它们只通过消息和基于这些消息发送的服务进行交互。这样的设计使得松耦合成为了可能。

    (3)SOA服务应该是自包含的:SOA服务应该是明确的,能够自我进行定义的。

    (4)SOA服务应该在列表中进行维护:SOA服务应该在一个中心的服务库中进行维护。应用程序可以查找到这些服务然后进行使用。

      (5)SOA组件可以按照一定顺序进行组合和连接以实现特定的功能:SOA可以实现一种即插即用的服务方式。例如:下面的图中显示了两个服务“Security service”和“Order processing service”。你可以按照以下的顺序实现自定义的功能,即可以先对用户进行检查然后在进行订单处理,也可以翻过来。通过SOA我们可以以一种松耦合的方式安排服务的工作流程(work flow)。

    image

    图3 服务的组合

      下面我们来定义SOA吧。SOA是一种架构,它通过将服务进行组合和连接来建立具有特定功能的商务应用程序。其中服务之间是松耦合的,对外界就像一个黑盒,隐藏了内部的工作方式。

     

    SOA的系统建立方式

            如果你需要集成已存在的系统,将它作为一个业务服务的话,那么你只需要对你的系统建立一个松耦合的包装,它将封装你的系统,然后以一种通用的方式向外界展示自己的系统的服务。

    SOA的业务层(business layers)和管道层(plumbing layers)

            在SOA中采用了两层架构,首先一层直接与业务相关,因为它实现了业务功能。第二层则是技术层次,该层将管理计算机资源,例如:数据库、web服务器等等。这样的划分需要识别服务,考虑下下面的图“Simple order system”。它包含了很多组件,组件之间通过进行通信来完成订货系统的功能。

     这个简单的订货系统可以被划分为两层,如下图“business and plumbing layer”所示,其中一层是与业务相关的,另一层则是与技术相关的。你可以看到管道层(plumbing layer)包含了数据访问层,Ajax以及众多的技术点。

    image

    图5 business and plumbing layer

    SOA中服务(service)和组件(component)有什么不同?

            服务是组件的逻辑分组,通过将组件进行逻辑上的分组从而实现了特定的业务功能。组件是实现服务的方法。组件可以使用JAVA、C#、C++实现,但是服务将以一种普遍的方式提供,例如:web services。

    SOA的总体架构

            下图“SOA架构”显示了SOA的完整视图。请注意的是,这幅图并不与特定的实现绑定,它不是单独指Microsoft的实现或者IBM的实现。它只是一个通用的架构。任何要实现SOA架构的公司都要实现下面的SOA组件。

    image

     

    图6 SOA架构

            SOA的首要目标是实现与其它独立的系统的连接。为了使各个系统可以协作,它们之间将互相发送消息(Message),ESB(Enterprise Service bus)企业服务总线就像一个稳定的邮局,它保证了系统之间的消息以一种松耦合的方式进行传递。ESB是一个特殊的层次,它只负责系统之间的消息发送。在上面的图中我们,我们显示了一个管道,它并不是什么硬件或者管线,它只是一组软件组件,这些组件将帮助发送和接收不同系统上应用程序的消息。不要自己去编ESB,你可以去微软、IBM、Oracle去买一个。下面我们将针对上图进行一定解释。

            SOA registry:它就像一个服务的数据库的引用,描述了每个服务能做什么,它们在哪里可以获取到以及它们之间怎么进行通信。它是一个服务元数据的中心引用集合。

            SOA workflow:它允许我们使用SOA registry中的服务定义工作流程。

            Service broker:它读取工作流程的定义,然后将服务和流程进行绑定。Service broker其实通常是一个中间件,像EAI(Enterprise Application Integration)产品,你可以从微软、IBM或者SUN公司查到相关产品信息。

            Process manager:它是SOA registry, SOA workflow and service broker的集合。

            SOA supervisor:它保证了服务的质量,主要关心的是服务的性能的指标,如果某个服务的性能出现了问题它将会发送适当的消息。

            注意:上面的解释只是一个基础的SOA架构,任何的公司,例如MS、IBM或者Sun的产品都应该包含上面的组件或者以其它方式实现。所以如果大家感兴趣,不妨可以动手实践一下某个产品来加深理解。

    SOA的实际例子

            下面的图中显示了显示中SOA的例子,有大家熟知的Web Service、Biz talk和XML。

    image

    图7 SOA现实例子

    终端(ends),约定(contract),地址(address)和绑定(bindings)的概念

            上面的这些术语是SOA支持的,每个服务必须提供一个或多个终端,通过这些终端服务可以由客户进行访问。终端包含了三个重要的部分:where,what和how:

            Contract(what):约定是两方或这多方之间的约定。它定义了客户如何与服务进行通信的协议。从技术角度而言,它描述方法的参数和返回值。

            Address(where):一个地址说明了在哪你可以获取服务。地址是一个URL,它指向了服务的位置。

            Binding(how):绑定决定了终端以什么方式可以访问。它决定了通信是以什么方式完成的。例如,你提偶那个了服务,服务可以通过在HTTP上使用SOAP协议或者TCP传输BINARY(二进制)的方式访问。所以,对于每个通信方式,绑定都是必须的。

            下面的图中显示了终端的三个主要组件。你可以看到stock tiker是服务的类,它放在www.soa.com这个地址上,可以通过HTTP或者TCP的绑定使用StockTicker接口类型。

    image图8 Endpoint架构

    Web Services和SOA的区别

            SOA是一个概念上的想法,它只是一个架构性的概念,而Web Service则是SOA的一个技术上的实现方法。而现今web service也是一个很受欢迎的实现SOA的方式。关于web service,如果大家感兴趣可以阅读我写的相关文章。

    总结

            今天我从概念性的讲解了SOA的架构,讲解的不算是很完善和有条例,希望大家能理解,如果出现了什么错误,因为本人也是初学者,希望大家能给出意见,多多指点,谢谢!

    [转载]

    资源
    ·Java开发者社区:http://www.matrix.org.cn
    ·javaworld.com:javaworld.com
    WS-I: http://www.ws-i.org
    JAXB: http://www.java.sun.com/xml/jaxb
    JAXR: http://java.sun.com/xml/jaxr
    OASIS: http://www.oasis-open.org/home/index.php
    SAML: http://www.oasis-open.org/specs/index.php#samlv1.0
    SOAP: http://www.w3.org/TR/soap/
    SOX: http://www.sarbanes-oxley.com/
    UDDI: http://www.uddi.org/specification.html
    W3C: http://www.w3.org/2002/ws/
    WSDL: http://www.w3.org/TR/wsdl
    WSBPEL: http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wsbpel
    WS-Reliability: http://www.oasis-open.org/specs/index.php#wsrv1.1
    WS-ReliableMessaging: http://xml.coverpages.org/WS-ReliableMessaging200502.pdf
    Web Services Security: http://www.oasis-open.org/specs/index.php#wssv1.0
    WS-I Basic Profile:http://www.ws-i.org/deliverables/workinggroup.aspx?wg=basicprofile
    WSDM: http://www.oasis-open.org/committees/tc_home.php
    XSD: http://www.w3.org/XML/Schema
    Gartner: http://www.gartner.com/Init
    To read about BEA's recent product offering in the SOA space, read "BEA's Patrick Discusses Project Free Flow," Paul Krill, InfoWorld (JavaWorld, June 2005): http://www.javaworld.com/javaworld/jw-06-2005/jw-0613-iw-bea.html
    For more on SOA, read "Event-Driven Services in SOA," Jeff Hanson (JavaWorld, January 2005): http://www.javaworld.com/javaworld/jw-01-2005/jw-0131-soa.html
    For more articles on Web services, browse the Java and Web Services section of JavaWorld's Topical Index: http://www.javaworld.com/channel_content/jw-webserv-index.shtml
    For more articles on enterprise development, browse the Enterprise Java section of JavaWorld's Topical Index:
    http://www.javaworld.com/channel_content/jw-enterprise-index.shtml

  • 相关阅读:
    Binary Tree Inorder Traversal
    Populating Next Right Pointers in Each Node
    Minimum Depth of Binary Tree
    Majority Element
    Excel Sheet Column Number
    Reverse Bits
    Happy Number
    House Robber
    Remove Linked List Elements
    Contains Duplicate
  • 原文地址:https://www.cnblogs.com/wssongyue/p/13380198.html
Copyright © 2011-2022 走看看