zoukankan      html  css  js  c++  java
  • SOA

    摘要: SOA 是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)模型的方法。 SOA 并不是一个新鲜事物,而只是面向对象模型的一种替代。虽然基于 SOA 的系统并不排除使用 OOD 来构建单个服务,但是其整体设计却是面向服务的。由于 SOA 考虑到了系统内的对象,所以虽然SOA 是基于对象的,但是作为一个整体,它却不是面向对象的。

    SOA是英文 Service-Oriented Architecture 三个首字母单词的缩写,中文译为: 面向服务架构 ( SOA), SOA架构与 B/S 、 C/S 架构是目前最流行三种 Web服务的基础架构。

           SOA架构的特点为:系统集成:站在系统的角度,解决企业系统间的通信问题,把原先散乱、无规划的系统间的网状结构,梳理成规整、可治理的系统间星形结构,这一步往往需要引入 一些产品,比如 ESB、以及技术规范、服务管理规范,解决的核心问题是【有序】;系统的服务化:站在功能的角度,把业务逻辑抽象成可复用、可组装的服务,通过服务的编排实现业务的快速再生,目的:把原先固有的业务功能转变为通用的业务服务,实现业务逻辑的快速复用,解决的核心问题是【复用】;业务的服务化:站在企业的角度,把企业职能抽象成 可复用、可组装的服务;把原先职能化的企业架构转变为服务化的企业架构,进一步提升企业的对外服务能力;“前面两步都是从技术层面来解决系统调用、系统功能复用的问题”。第三步,则是以业务驱动把一个业务单元封装成一项服务,解决的核心问题是【高效】。

    如果把SOA的架构简单的理解为是多个子系统之间的整合其实有点太过于简单,也没有真正搞清楚SOA的架构模型。按照SOA的正确方法论及目标模型,其实SOA在实现架构落地上,需要考虑到对服务的组合,不断的重用现有的服务,让企业应用可以逐步集成,快速实现业务的迭代。其实这就是本节要讲的服务的分层,通过分层将服务按照使用类型进行分配,上层服务对下层服务的包装,下层服务负责原子性的操作,上层服务对下层服务进行业务性的组合。

    至于SOA架构,网上有一个例子:

      一个公司里有基层员工 有管理层 有老板,最初大家都听老板指挥,谁干什么谁干什么,根据需要,你可能今天干A事情,明天干B事情,后来人越来越多了,事情也越来越多了,做事情的效率越来越多,管理也很混乱,就开始做部门划分(服务化),专门部门做专门事情的,IT部门只做研发,人事部门只做招聘; 这个时候就无法避免的发生跨部门协作(服务器调用), 但是你怎么知道有这样一个部门可以做这个事情呢,就要依赖行政部门(注册中心),新成立的部门要在行政哪里做一个备案(服务注册),然后公布一下,让其他部门知道了(服务发布),大家就可以在新的工作秩序里面嗨皮的上班了,这个时候依然是在公司的组织架构中运转。

    在 SOA 模型中,所有的功能都定义成了独立的服务。服务之间通过交互和协调完成业务的整体逻辑。所有的服务通过服务总线或流程管理器来连接。这种松散耦合的架构使得各服务在交互过程中无需考虑双方的内部实现细节,以及部署在什么平台上。

        1. 服务的基本结构

        一个独立的服务基本结构如图 9-14 所示。

        由图 9-14 可以看出,服务模型的表示层从逻辑层分离出来,中间增加了服务对外的接口层。通过服务接口的标准化描述,使得服务可以提供给在任何异构平台和任何用户接口使用。这允许并支持基于服务的系统成为松散耦合、面向构件和跨技术实现,服务请求者很可能根本不知道服务在哪里运行、是由哪种语言编写的,以及消息的传输路径,而是只需要提出服务请求,然后就会得到答案。

        2.SOA 设计原则 

        在 SOA 架构中,继承了来自对象和构件设计的各种原则,例如,封装和自我包含等。那些保证服务的灵活性、松散耦合和复用能力的设计原则,对 SOA 架构来说同样是非常重要的。关于服务,一些常见的设计原则如下:

        (1)明确定义的接口。服务请求者依赖于服务规约来调用服务,因此,服务定义必须长时间稳定,一旦公布,不能随意更改;服务的定义应尽可能明确,减少请求者的不适当使用;不要让请求者看到服务内部的私有数据。

        (2)自包含和模块化。服务封装了那些在业务上稳定、重复出现的活动和构件,实现服务的功能实体是完全独立自主的,独立进行部署、版本控制、自我管理和恢复。

        (3)粗粒度。服务数量不应该太多,依靠消息交互而不是远程过程调用,通常消息量比较大,但是服务之间的交互频度较低。

        (4)松耦合。服务请求者可见的是服务的接口,其位置、实现技术、当前状态和私有数据等,对服务请求者而言是不可见的。

        (5)互操作性、兼容和策略声明。为了确保服务规约的全面和明确,策略成为一个越来越重要的方面。这可以是技术相关的内容,例如,一个服务对安全性方面的要求;也可以是与业务有关的语义方面的内容,例如,需要满足的费用或者服务级别方面的要求,这些策略对于服务在交互时是非常重要的。

        3. 服务构件与传统构件

        服务构件架构(Service Component Architecture,SCA)是基于 SOA 的思想描述服务之间组合和协作的规范,它描述用于使用 SOA 构建应用程序和系统的模型。它可简化使用 SOA 进行的应用程序开发和实现工作。SCA 提供了构建粗粒度构件的机制,这些粗粒度构件由细粒度构件组装而成。SCA 将传统中间件编程从业务逻辑分离出来,从而使程序员免受其复杂性的困扰。它允许开发人员集中精力编写业务逻辑,而不必将大量的时间花费在更为底层的技术实现上。

        SCA 服务构件与传统构件的主要区别在于,服务构件往往是粗粒度的,而传统构件以细粒度居多;服务构件的接口是标准的,主要是服务描述语言接口,而传统构件常以具体 API 形式出现;服务构件的实现与语言是无关的,而传统构件常绑定某种特定的语言;服务构件可以通过构件容器提供 QoS 的服务,而传统构件完全由程序代码直接控制。

    对 SOA 的需要来源于需要使业务 IT 系统变得更加灵活,以适应业务中的改变。通过允许强定义的关系和依然灵活的特定实现,IT 系统既可以利用现有系统的功能,又可以准备在以后做一些改变来满足它们之间交互的需要。

    如何实现SOA

    目前Web Service越来越流行,并成为实现SOA的一种手段。Web Service使应用功能通过标准化接口(WSDL)提供,使用标准化语言(XML)进行描述,并可基于标准化传输方式(HTTP和JMS)、采用标准化 协议(SOAP)进行调用,并使用XML SCHEMA方式对数据进行描述。你也可以不采用Web服务来创建SOA应用,但是这种标准的重要性日益增加、应用日趋普遍。

     SOA 只是一种概念和思想,需要借助于具体的技术和方法来实现它。从本质上来看, SOA 是用本地计算模型来实现一个分布式的计算应用,也有人称这种方法为“本地化设计,分布式工作”模型。CORBA、DCOM 和 EJB 等都属于这种解决方式,也就是说,SOA 最终可以基于这些标准来实现。

    Web Service实现SOA的好处

    第一,Web Service是跨平台的,应用程序经常需要从运行在IBM主机上的程序中获取数据,然后把数据发送到主机或UNIX应用程序中去。即使在同一个平台上, 不同软件厂商生产的各种软件也常常需要集成起来。通过WebService,应用程序可以用标准的方法把功能和数据“暴露”出来,供其它应用程序使用。

    第二,Web Service是无语言限制的,你可以使用.NET,JAVA,PHP,VB......等多种语言开发并进行相互调用。

    第三, 使用SOAP时数据是以ASCII文本的方式传输,调用很方便,数据容易通过防火墙而实现无缝连接。

    SOA的兴起源于国外,而且很多定义都是从国外延续过来的,早期SOA在国外的发展是较快的,在国外SOA概念深入普及的同时,国内也兴起了对SOA的研究与实践。

    国外现状

    在国外,从主机时代、PC时代,到了现在的网络时代,积累了大量的应用系统。所以国外的SOA理论以及产品的发展一直快于国内,在SOA技术兴起初期,很多国外中间件产品进军国内,一度曾经火热大卖,但如今也几乎销声匿迹,分析后归结于以下几点:

    国外企业发展环境与国内存在巨大的差异,SOA技术理念可以接受但其SOA产品理念不能完全适应国内的企业发展形势;

    大型SOA综合项目,要求产品过硬、敏捷,技术能力扎实且实施经验丰富,国外的产品提供商没有原厂商直接的技术支持,本地化的代理商交付能力不足,很多项目做成烂尾;

    随着技术发展和开源软件的成熟,国家层面去IOE化政策提出,客观上引导很多央企、大国企的选择,而民营企业更为强调实用性、性价比,通常不会为虚名而买单;

    国人的信心及技术能力的快速增长,促使国内IT技术水平迅猛发展,更有信心选择甚至打造适合自己的自主知识产权的SOA集成套件。

    国内现状

    对于国内,很多企业在认识SOA理念这件事情上,变得理性,不再认为SOA理念是虚无缥缈的、夸大的、无法落实的,这预示着SOA将正式走向普及。虽然SOA在国内已经得到企业的认可及应用,但在普及的过程中没有出现大火特火的现象,相对来说较为平稳,同样的将这种情况分析后归结于以下原因:

    SOA综合集成项目通常交付周期较长,投入较大,让很多客户决策犹豫,另外一方面,SOA综合集成项目很强调交付体系、最佳实践,而这样的人才队伍在国内偏少,更多时候只能靠内部培养、项目来培育,多数SOA软件厂商没有这个耐心;

    做集成中间件是一个很累甚至较为漫长的选择,一些SOA厂商并没有一直坚守在SOA集成领域,而是根据新技术新趋势盲目跟风或者为资本所累,改变原有的产品线及业务领域;

    一些集成软件厂商,对SOA的理解不足或理解到位,但是认为盈利太慢,没有把SOA做为主营业务来做,造成产品线缺失,无法形成闭环,只能针对部分需求或提供集成套件的一小部分功能,不能提供整体SOA的解决方案。

    另外有一个有意思的现象,有些OA协同领域厂商看到SOA市场潜力和价值,对自有主打协同产品进行扩展,贴上SOA整合集成的标签,承接SOA集成项目,但由于产品基因以及人才队伍缺失,通常项目最终实现效果较差,达不到全面整合、整体协同的目标。

     
  • 相关阅读:
    坑爹的 Segmentation fault
    静态全局变量得初始化
    新冠肺炎的感受
    \r和\n的区别
    程序里面带有浮点数,默认会自动转换为double类型存储
    Relativity : Fictitious forces
    Biology 04: The Senses
    156 TCP协议的三次握手和四次挥手
    155 大白话OSI七层协议
    154 互联网和互联网的组成
  • 原文地址:https://www.cnblogs.com/zjm15511858030/p/13110911.html
Copyright © 2011-2022 走看看