【软考架构】面向服务的体系结构(SOA)深度解析

面向服务的体系结构(SOA)深度解析

面向服务的体系结构(Service-Oriented Architecture, SOA)是一种以服务为核心的软件架构范式,通过标准化接口实现异构系统间的高效集成与协作。以下从概念定义、发展脉络、技术演进、参考架构四个维度,结合行业实践与技术细节展开系统解析。

15.1 SOA的相关概念

15.1.1 SOA的定义:应用框架与组件模型的双重内涵

1. 应用视角的定义

SOA是一种业务驱动的应用框架,其核心是将企业业务功能抽象为可复用的“服务”,通过标准化接口实现服务的灵活组合与部署。这些服务具备以下特性:

  • 平台无关性:服务接口独立于硬件、操作系统和编程语言,支持跨平台调用;
  • 松耦合:服务间通过契约交互,避免强依赖,降低系统变更成本;
  • 业务对齐:服务直接映射业务功能,支持业务流程的快速调整与创新。
2. 软件原理视角的定义

SOA是一种组件模型,其核心是通过定义良好的接口和契约将应用功能单元(服务)连接起来。接口采用中立的描述方式(如WSDL),确保不同技术栈实现的服务可互操作。这种模型推动了服务的标准化与复用,例如:

  • 企业可将客户管理、订单处理等功能封装为独立服务,供多个业务系统调用;
  • 第三方开发者可通过开放API集成企业服务,拓展生态边界。

15.1.2 业务流程与BPEL:服务编排的核心工具

1. 业务流程的数字化映射

业务流程是现实业务逻辑的计算机化表达,传统依赖自然语言描述,存在歧义性与执行效率问题。SOA通过**BPEL(Business Process Execution Language for Web Services)**实现流程的标准化建模与自动化执行。

2. BPEL的核心功能

BPEL是一种基于XML的流程定义语言,其核心价值包括:

  • 服务编排:将多个Web服务组合为复合服务,例如将“订单创建→库存校验→支付处理”编排为端到端流程;
  • 流程自动化:通过预定义规则控制流程执行顺序,支持异常处理与事务补偿;
  • 跨系统集成:屏蔽服务底层实现细节,实现跨企业、跨平台的流程协同。

15.2 SOA的发展历史

15.2.1 技术演进的三个关键阶段

1. 萌芽阶段(20世纪90年代末-2000年):XML奠定基石
  • 核心技术:XML(可扩展标记语言)提供跨系统数据交换的统一格式,XSLT实现数据转换,XMLSchema保障数据完整性;
  • 局限:缺乏统一的服务描述与调用规范,服务复用停留在数据层。
2. 标准化阶段(2000-2005年):Web服务三剑客崛起
  • 核心标准
    • SOAP:基于XML的远程过程调用协议,支持跨防火墙通信;
    • WSDL:服务接口的标准化描述语言,定义服务操作与消息格式;
    • UDDI:服务注册与发现中心,实现服务的动态查找与绑定;
  • 应用爆发:电子商务推动Web服务普及,企业开始将核心业务功能封装为Web服务对外提供。
3. 成熟应用阶段(2005年至今):从Web服务到微服务
  • 技术突破
    • SCA/SDO/WS-Policy:SCA(服务组件架构)定义编程模型,SDO(服务数据对象)统一数据访问,WS-Policy规范服务交互策略;
    • 企业服务总线(ESB):通过消息路由、协议转换等功能实现服务集成,如IBM WebSphere ESB;
  • 演进方向:SOA向更细粒度、更灵活的微服务架构过渡,解决传统SOA的复杂性与供应商锁定问题。

15.2.2 国内外发展对比:从系统整合到生态构建

1. 美国:遗留系统重构为主
  • 核心任务:通过SOA整合主机时代积累的遗留系统,例如将银行核心交易系统封装为服务,与互联网渠道集成;
  • 技术挑战:需平衡服务复用与业务灵活性,避免过度设计导致的复杂性。
2. 中国:新建与整合并行
  • 典型场景
    • 电信、金融行业:以SCA/SDO为标准,构建细粒度服务(如用户认证、计费),通过ESB实现系统间松耦合集成;
    • 制造业:上汽集团投入3000亿元建设汽车SOA平台,整合中央域控制器与微服务,支持“软件定义汽车”生态;
  • 阶段特征:部分领域仍处于XML标准化阶段,少数领先企业已进入微服务化实践。
    在这里插入图片描述

15.2.3 微服务化发展:SOA的轻量化演进

在这里插入图片描述

1. SOA与微服务的核心差异
维度SOA微服务
服务粒度粗粒度(如订单管理服务)细粒度(如订单创建、库存校验独立服务)
接口协议基于SOAP/WSDL的重量级协议基于HTTP/RESTful的轻量级协议
部署方式集中式ESB集成去中心化容器化部署(Docker/Kubernetes)
治理模式集中式服务注册与管理分布式服务发现(如Eureka)
2. 微服务解决的核心问题
  • 复杂性:通过拆分服务降低系统耦合度,例如将单体电商系统拆分为用户、订单、支付等独立服务;
  • 供应商锁定:采用开源技术栈(如Spring Cloud)替代专有中间件,降低对厂商的依赖;
  • 敏捷性:支持独立发布与弹性扩展,例如促销期间单独扩容订单服务。

15.3 SOA的参考架构

IBM的Websphere业务集成参考架构(如图15-2所示,以下称参考架构)是典型的以服务为中心的企业集成架构,接下来的讨论都将以此参考架构为背景进行。

以服务为中心的企业集成采用“关注点分离(Separation of Concern)”的方法规划企业集成中的各种架构元素,同时从服务视角规划每种架构元素提供的服务,以及服务如何被组合在一起完成某种类型的集成。这里架构元素提供的服务既包括狭义的服务(WSDL描述),也包括广义的服务(某种能力)。从服务为中心的视角来看,企业集成的架构(如图15-2所示)可划分为6大类。
(1)业务逻辑服务(Business Logic Service):包括用于实现业务逻辑的服务和执行业务逻辑的能力,其中包括业务应用服务(Business Application Service)、业务伙伴服务(PartnerService)以及应用和信息资产(Application and Information asset)。
(2)**控制服务(Control Service)😗*包括实现人(People)、流程(Process)和信息(Infor-mation)集成的服务,以及执行这些集成逻辑的能力。
(3)连接服务(Connectivity Service):通过提供企业服务总线提供分布在各种架构元素中服务间的连接性。
(4)业务创新和优化服务(Business Innovation and Optimization Service):用于监控业务系统运行时服务的业务性能,并通过及时了解到的业务性能和变化,采取措施适应变化的市场。
(5)开发服务(Development Service):贯彻整个软件开发生命周期的开发平台,从需求分析,到建模、设计、开发、测试和维护等全面的工具支持。
(6)IT服务管理(IT Service Management):支持业务系统运行的各种基础设施管理能力或服务,如安全服务、目录服务、系统管理和资源虚拟化。
在这里插入图片描述

1. 连接服务——企业服务总线(ESB)

ESB是消息中间件的发展,以“总线”模式简化应用集成拓扑,基于开放标准支持服务间动态互联互通,核心特征包括:

  • 服务元数据描述与注册管理;
  • 数据传递、转换及同步/异步等交互模式支持;
  • 服务发现、路由、匹配与选择(解耦请求者和提供者);
  • 高级能力:安全支持、服务质量保证、可管理性、负载平衡等。

ESB是架构模式(非特定技术/产品),需工具和运行时支持(如IBM的WebSphere ESB、WebSphere Message Broker及WebSphere Integration Developer)。
在这里插入图片描述

2. 业务逻辑服务

用于整合已有和新开发的应用,及外部业务伙伴系统:

  1. 整合已有应用——应用和信息访问服务
    通过适配器技术将已有系统(遗留应用、数据存储等)的业务逻辑和数据包装为ESB支持的格式,包括:

    • 可接入服务(On-Ramp Service):通过单向、请求/应答等模式包装功能,供ESB访问;
    • 事件发现服务(Event Detect Service):发布系统变化事件到ESB。
  2. 整合新开发的应用——业务应用服务
    支持新应用的开发和集成,包括:

    • 组件服务:管理可重用组件的运行时容器(如持久化、安全);
    • 核心服务:提供内存管理、负载均衡等运行时支持;
    • 接口服务:支持与其他系统(数据库、消息系统等)的集成。
  3. 整合客户和业务伙伴(B2C/B2B)——伙伴服务
    支持与外部系统的异构集成,包括:

    • 社区服务:管理业务伙伴,支持集中式/自我管理;
    • 文档服务:支持文档格式交换及流程管理(如RosettaNet、EDI);
    • 协议服务:提供传输层支持(认证、路由等)。
3. 控制服务

用于数据整合、流程整合和用户访问整合:

  1. 数据整合——信息服务
    解决数据分布性和异构性问题,包括:

    • 联邦服务:聚合关系型/非关系型数据,数据仍独立管理;
    • 复制服务:实时复制远程数据,本地维护副本;
    • 转换服务:实现数据源到目标格式的转换;
    • 搜索服务:支持结构化(数据库)和非结构化(PDF)数据查询。
  2. 流程整合——流程服务
    将关联业务活动组成自动化流程,包括:

    • 编排服务:控制流程执行,支持错误恢复;
    • 事务服务:保证事务特性(短流程用两阶段提交,长流程用补偿);
    • 人工服务:集成人工活动,支持任务分派、授权等。
  3. 用户访问整合——交互服务
    确保信息按需传递给用户,包括:

    • 交付服务:支持多设备(桌面、PDA)和方式(图形、语音)的交互;
    • 体验服务:通过个性化、单点登录等增强用户体验;
    • 资源服务:管理交互组件(安全配置、界面皮肤等)。
4. 开发服务

支持企业集成的全生命周期开发,需标准工具框架和服务开发技术(如SOMA方法学、SCA/SDO编程模型),按开发者角色分为:

  • 建模服务:构建可视化业务流程模型;
  • 设计服务:分解模型为服务组件并设计开发;
  • 实现服务:部署服务组件到生产环境;
  • 测试服务:支持单元测试和集成测试。
5. 业务创新和优化服务

以业务性能管理(BPM)为核心,支持业务优化,包括:

  • 公共事件框架服务:激发、存储和分类IT及业务事件;
  • 采集服务:过滤和分析事件,识别关键信息;
  • 监控服务:计算和管理关键性能指标(KPI),支持业务流程迭代优化。
6. IT服务管理

保障业务流程和服务的安全、高效运行,包括:

  • 安全和目录服务:企业级用户认证、授权(如单点登录);
  • 系统管理和虚拟化服务:管理服务器、存储、网络等IT资源,部分服务通过ESB与其他服务集成,满足性能、安全性等需求。

15.4 SOA主要协议和规范

Web服务是实现SOA服务的核心手段,相关标准多以“WS-*”为前缀,核心协议和规范包括以下几类:
在这里插入图片描述

15.4.1 UDDI协议

UDDI(统一描述、发现和集成协议)是一个开放的行业计划,核心作用是:

  • 帮助商业实体彼此发现,定义互联网上的交互方式,并在全球注册体系中共享信息;
  • 作为Web服务集成的体系框架,提供服务描述与发现的标准规范;
  • 基于XML、HTTP、DNS等标准实现,早期采用SOAP规范的早期版本支持跨平台设计。
15.4.2 WSDL规范

WSDL(Web服务描述语言)是描述Web服务及交互方式的XML语言,由Ariba、IBM、微软等联合提出,用于定义服务的三个核心属性:

  1. 服务功能(提供的操作/方法);
  2. 访问方式(数据格式和协议);
  3. 服务位置(如URL)。

WSDL文档结构分为服务接口(Service Interface)和服务实现(Service Implementations),核心元素包括:

  • types:定义服务使用的数据类型(基于XML Schema);
  • message:抽象定义通信消息的数据结构,引用types中定义的类型;
  • operation:描述服务支持的操作(如请求/响应消息对);
  • portType:抽象集合,定义某个访问入口点支持的操作;
  • binding:将抽象接口(portType)绑定到具体协议和数据格式;
  • port:定义单个服务访问点(绑定与网络地址的组合);
  • service:包含一组相关的port,代表服务访问点的集合。

在这里插入图片描述

15.4.3 SOAP协议

SOAP是分布式环境中基于XML的信息交换协议,包含四个核心部分:

  1. SOAP封装(Envelope):定义消息框架,描述内容、发送者、接收者及处理方式;
  2. SOAP编码规则:规定应用程序数据类型的实例表示方式;
  3. SOAP RPC表示:定义远程过程调用(RPC)和应答的格式;
  4. SOAP绑定:指定使用底层协议(如HTTP)交换信息的方式。

SOAP设计目标是简单性和可扩展性,不包含分布式垃圾收集、成批消息传送等传统消息系统特性。

15.4.4 REST规范

REST(表述性状态转移)是一种软件架构风格,由Roy Thomas Fielding提出,核心是通过统一标准实现不同系统的信息交互,微服务常以REST API暴露服务。RESTful指遵循REST设计思想的架构或应用,核心概念包括:

  1. 资源(Resource):互联网中可被访问的一切事物(如订单、图片),通过URI标识;一个资源可对应多个URI,但一个URI仅对应一种资源。
  2. 表述(Representational):描述资源在某一时刻的状态,常用格式有JSON、XML、HTML等,客户端与服务端通过表述交互。
  3. 状态转移(State Transfer)
    • 应用状态:客户端维护的用户会话信息快照,可结合缓存降低服务端压力;
    • 资源状态:服务端保存的资源状态快照,未被修改时,同一请求返回一致表述;
    • 状态转移通过HTTP方法(GET、POST、DELETE等)实现。
  4. 超链接:资源表述中嵌入相关资源的URI,便于客户端发现和访问其他资源,由客户端维护,动态生成。

REST是设计风格而非架构,RESTful应用需结合HTTP、JSON、URI等标准,通过HTTP方法操作资源状态。

15.5 SOA设计的标准要求

15.5.1 文档标准化

SOA服务需具备平台独立的自我描述XML文档,WSDL是服务描述的标准语言

15.5.2 通信协议标准

服务间通过消息通信,消息格式通常由XML Schema(XSD)定义,支持未知服务提供者环境下的交互,可作为企业内部关键商业文档的交换载体。

15.5.3 应用程序统一登记与集成

企业内部的SOA服务通过登记处(Registry) 维护(类似目录列表),应用程序通过登记处查找和调用服务,UDDI是服务登记的标准

15.5.4 服务质量(QoS)

每项SOA服务均关联QoS,涵盖安全、可靠性、策略等关键元素,相关标准由W3C和OASIS等组织制定:

  1. 可靠性

    • 关键需求:消息“仅且仅传送一次”“保证传送”等;
    • 标准:WS-Reliability和WS-Reliable Messaging(由OASIS管理)。
  2. 安全性

    • 规范内容:认证交换、消息完整性和保密性;
    • 实现:基于现有标准(如SAML),由OASIS制定Web服务安全规范。
  3. 策略

    • 服务提供者通过“策略断言”定义通信要求(如Kerberos认证);
    • 标准:WS-Policy用于标准化服务间的策略通信。
  4. 控制

    • 用BPEL4WS(或WSBPEL)定义服务组合的业务流程,支持异步通信、数据转换等。
  5. 管理

    • 标准:WSDM(Web Services for Distributed Management),支持对多环境下服务的统一管理;
    • 其他:WS-Coordination和WS-Transaction规范描述服务协作和事务处理。

15.6 SOA的作用

SOA的核心价值是解决企业“信息孤岛”问题,实现系统整合与业务灵活响应,具体作用包括:

  1. 打破信息孤岛

    • 传统EAI方式需为每个应用组合配置“翻译”(EAI Server),数量随应用增加呈几何级增长,难以扩展;
    • SOA通过将应用和资源转换为标准服务,实现资源共享,减少集成复杂度。
  2. 保护IT投资

    • 支持模块化添加或更新服务,无需重构现有系统,适配新业务需求;
    • 可将现有应用封装为服务,通过标准接口(如WSDL)与外部系统交互,降低更换合作伙伴的成本(如零售商快速切换供应商系统)。
  3. 业务与IT同步

    • 决策者可基于业务策略制定流程,直接调用现有服务,无需关注底层集成细节,提升业务响应速度。

15.7 SOA的设计原则

SOA继承了对象和组件设计的核心原则,以保证服务的灵活性、松耦合和可重用性,关键原则包括:

  1. 无状态:服务不依赖提供者的状态,避免请求者对提供者状态的依赖。
  2. 单一实例:避免功能冗余,确保服务功能的唯一性。
  3. 明确定义的接口
    • 接口由WSDL定义,明确公共接口与内部实现的边界;
    • 服务定义需长期稳定,避免随意更改;私有数据对使用者不可见。
  4. 自包含和模块化
    • 服务封装稳定的业务活动和组件,可独立部署、版本控制和自我管理。
  5. 粗粒度
    • 服务数量不宜过多,通过消息交互(而非RPC)通信,消息量大但交互频率低。
  6. 松耦合
    • 使用者仅依赖服务接口,无需关注服务的位置、实现技术或状态;私有数据对使用者不可见。
  7. 可重用性:服务设计需支持多场景复用。
  8. 互操作性与策略声明
    • 通过WS-Policy定义服务的安全要求、服务级别等策略,确保交互时的语义兼容性。

15.8 SOA的设计模式

15.8.1 服务注册表模式

服务注册表(Service Registry)是SOA设计与运行中的核心组件,主要用于服务的注册、发现和治理,是策略执行的关键节点。

  • 核心功能

    • 支持服务合同、策略和元数据的开发、发布与管理,提供服务注册和发现的主控制点(策略执行点PEP);
    • 存储服务的配置、遵从性和约束配置文件,任何支持服务信息检索的信息库、数据库等均可视为注册表。
  • 厂商分类

    • 纯SOA厂商:专注于服务、策略和元数据管理,如Flashline、Infravio、SOA Software等;
    • SOA平台厂商:将注册表作为集成套件的一部分(含应用服务器、中间件等),如IBM、Microsoft、Oracle、SAP等。
  • 关键标准与集成

    • UDDI(通用描述、发现与集成)是主要注册标准,但非唯一;多数厂商支持UDDI v3等开放标准,实现与第三方注册表的集成。
  • SOA治理功能

    1. 服务注册:服务提供者向注册表公布服务合同(含身份、位置、方法、策略等),通过权限控制确保服务发布的规范性;
    2. 服务位置:服务消费者通过注册表查询符合需求的服务,控制访问权限和暴露的服务属性;
    3. 服务绑定:消费者基于检索到的合同开发代码,实现与服务的绑定和交互,工具支持自动适配协议和接口;
    4. 配置文件管理:通过配置文件记录服务在生命周期各阶段的参数(如开发、测试环境的机器和参数),支持服务在不同阶段的平滑迁移,部分工具含嵌入式工作流,确保流程规范化(如审查、验证和退回机制)。
15.8.2 企业服务总线模式(ESB)

ESB源于解决传统点对点集成的复杂性(如高耦合、难管理、复用度低),是支持SOA的基础软件平台,以中间件形式实现服务间的标准化交互。

  • 定义:由中间件技术实现的底层架构,支持异构环境中服务以消息和事件驱动模式交互,并提供服务质量(QoS)和可管理性。

  • 交互过程

    1. 服务请求者生成标准化请求消息,发送至ESB;
    2. ESB根据消息中的服务名/接口名查找目标组件,转发消息并将结果逆向返回;
    3. 实现“位置透明”和“协议透明”:组件无需了解其他组件的位置和协议,仅通过总线交互,最大限度解耦依赖。

在这里插入图片描述

  • 核心功能

    1. 位置透明的消息路由和寻址;
    2. 服务注册与命名管理;
    3. 支持多种消息传递范型(如请求/响应、发布/订阅);
    4. 兼容多种传输协议;
    5. 支持多种数据格式及转换;
    6. 提供日志和监控功能。
  • 优势

    • 降低系统互连复杂性,支持异步/同步交互;
    • 基于标准技术,提升集成效率并降低成本;
    • 为EAI、B2B提供理想支撑平台,厂商通常以ESB为基础,提供包含预制组件、开发工具的完整集成环境。
15.8.3 案例研究:协同企业服务总线(SynchroESB)

在这里插入图片描述

SynchroESB是基于SOA和ESB的服务整合平台,由西安协同时光软件公司与西北工业大学联合研发,获国家高新技术产业化计划支持,其架构分为四层:

  1. 服务总线层:底层基础,提供ESB核心功能(路由、消息处理等),支撑整个EAI环境;
  2. 数据转换与适配器层:解决与被集成系统的连接和数据接口问题,实现外部应用接入总线;
  3. 流程整合层:连接不同应用系统实现协同,提供业务流程设计、监控和管理功能;
  4. 用户交互层:为用户提供统一信息服务入口,整合内外部分散信息。
  • 核心优势
    • 支持组件化构建业务流程,采用“粗颗粒”组件编程模型,降低复杂应用开发难度;
    • 基于标准和SOA,实现跨企业的应用与流程集成;
    • 分布式架构+集中式管理,利用现有业务系统快速组建解决方案,事件驱动架构提升业务响应速度。
15.8.4 微服务模式

微服务是SOA的演进,弱化传统SOA中重量级的ESB,将SOA思想渗透到单个业务系统内部,实现彻底的组件化。

1. 微服务架构概述

微服务将大型应用拆分为多个独立的小型服务,每个服务可独立开发、管理和迭代,通过统一接口交互,核心目标是实现敏捷开发与部署。
在这里插入图片描述

  • 核心优势
    1. 复杂应用解耦:按业务逻辑拆分,每个服务专注单一功能,降低复杂度,便于小团队维护;
    2. 独立开发与部署:服务拥有独立进程,变更时无需编译/部署整个系统,测试范围小,降低生产风险;
    3. 技术选型灵活:去中心化选型,团队可根据业务需求选择合适技术栈,架构转型风险低;
    4. 容错性强:单个服务故障被隔离,其他服务可通过重试、降级等机制容错,避免全局瘫痪;
    5. 松耦合与易扩展:服务独立扩展,按需分配资源,降低水平扩展成本。
2. 微服务架构模式方案

微服务无固定开发模式,需结合业务场景设计,常见模式包括:

  1. 聚合器微服务模式

    • 聚合器调用多个微服务,处理数据后直接展示,或增加业务逻辑后发布为新的组合服务(从消费者转为提供者);
    • 变种“代理微服务”:客户端不聚合数据,仅由代理根据需求选择调用不同服务,负责请求委派和数据转换;
    • 变种“分支微服务”:允许同时调用两个独立的服务链,互不影响。
  2. 链式微服务模式

    • 服务按链传递请求(如A→B→C),下游服务合并结果后返回上游,采用同步消息传递;
    • 限制:调用链不宜过长,避免客户端长时间阻塞。
  3. 数据共享微服务模式

    • 适用于单体架构向微服务过渡阶段,允许强耦合的服务共享缓存和数据库,解决SQL反规范化导致的数据重复与不一致问题。
  4. 异步消息传递微服务模式

    • 用消息队列(如ActiveMQ、RabbitMQ)替代同步REST API,实现异步业务逻辑,提升响应速度;
    • 注意:可能增加系统复杂性和降低可用性,需谨慎选型。
3. 微服务架构面临的问题与挑战
  • 分布式复杂性:服务间需通过RPC或消息通信,服务发现和调用链跟踪难度大;

  • 分区数据库挑战:不同服务可能使用独立数据库,受CAP原理限制,需放弃强一致性追求最终一致性,对开发人员要求高;

  • 测试难度增加:测试需启动所有依赖服务,复杂性远高于单体应用;

  • 运维挑战:大规模部署中,监控、管理、扩容和分发难度大。

  • 取舍原则:仅当现有架构无法扩展、数据库增长过快,且团队具备微服务思维时,收益才大于成本;否则无需盲目采用。

15.9 构建SOA架构时应该注意的问题

15.9.1 原有系统架构中的集成需求

构建企业级SOA架构时,需优先分析和整理原有系统的集成需求,核心原则是重用现有资源而非替换遗留系统,以降低成本和风险。

  • 集成需求的范围
    集成不仅限于组件化应用的集成,还需考虑以下具体类型:

    • 应用程序集成需求;
    • 终端用户界面集成需求;
    • 流程集成需求;
    • 已有系统信息集成需求。
  • 关键注意事项

    • 不同企业的集成复杂度差异显著(如航运EDI系统需处理大量数据源,集成需求复杂;部分企业数据源少,需求简单);
    • 架构师需全面评估所有可能的集成需求,确保架构能适应企业发展;
    • 集成功能应由服务提供,而非依赖特定应用程序,以保证灵活性和可扩展性。
15.9.2 服务粒度的控制以及无状态服务的设计

服务是SOA的核心元素,构建时需重点关注服务粒度和无状态设计:

  1. 服务粒度的控制

    • 推荐原则:外部暴露的服务采用粗粒度接口,内部服务可使用细粒度接口。
      • 粗粒度接口:对应服务的完整执行(如网上商店的“提交购买表单”),保证外部请求者以一致方式使用服务,降低交互模式的易变性;
      • 细粒度接口:实现粗粒度服务的内部操作(如“创建购买记录”“更新数据库”),提供灵活性但需避免直接暴露给外部(避免请求者难以适应频繁变化)。
    • 实现方式:通过BPEL将细粒度操作组合为粗粒度服务接口,平衡灵活性与一致性。
  2. 无状态服务的设计

    • 核心要求:服务应是独立、自包含的请求,不依赖前序请求的状态或其他服务的上下文,即“无状态”。若存在依赖关系,建议定义为业务流程(BPEL)。
    • 实现机制
      • 推荐使用无状态Session Bean实现粗粒度服务,通过Web Service技术暴露为外部可调用的服务(将Session Facade模型转化为EJB的Web服务端点);
      • 优势
        • 利用现有EJB组件的业务逻辑,减少重复开发;
        • EJB容器自动提供并发支持(串行化对Bean实例的请求)、安全与事务管理(无需手动编写相关代码);
        • 支持集群和资源池化,提升系统可伸缩性和可靠性,应对高负载。

15.10 SOA实施的过程

15.10.1 选择SOA解决方案

选择合适的解决方案是SOA实施成功的前提,需从以下三方面考量:

  1. 全局规划

    • 全面评估现有系统:明确可复用资源、需改造部分、新增系统需求及预算;
    • 分阶段选择工具和技术:根据实施步骤(如先改造某系统)匹配产品;
    • 边学习边实践:开发过程中积累经验,逐步优化。
  2. 结合企业自身需求

    • SOA的价值(如业务流程优化、创新)随时间逐步体现,前期投资需着眼长期效益;
    • 实施进度和资金投入取决于企业IT应用沉淀(如遗留系统数量)和目标层次(如基础集成 vs 业务创新)。
  3. 技术考察

    • 平台选择:优先考虑开放性和对标准的支持(如兼容WSDL、SOAP等);
    • 实施方法:参考六大要素——业务战略和流程、基础架构、构建模块、项目和应用、成本和效益、规划和管理;
    • 供应商选择:评估产品是否匹配需求、成功案例、客户评价及专业服务能力(如现状分析、建设性建议)。
15.10.2 业务流程分析

业务流程分析是SOA实施的核心环节,包括建立服务模型和业务流程:

  1. 建立服务模型
    通过三种方法发现和验证服务候选者,形成服务目录:

    • 自顶向下分解法

      • 从端到端业务流程入手,逐层分解至最小业务活动,结合业务组件模型(按职责划分业务领域、组件)确定服务候选者;
      • 进行变化分析,区分易变与稳定部分,确保架构适应未来变化,补充新发现的服务候选者。
    • 业务目标分析法(目标服务建模)

      • 从企业业务目标出发,分解为子目标,再分派给服务实现,形成“目标服务树”,确保每个服务可回溯到具体业务目标(基于关键性能指标分析)。
    • 自底向上分析法(遗留资产分析)

      • 梳理已有系统(如遗留应用、套装软件)的功能模块,发现重复或可复用的模块,包装为服务;
      • 分析技术局限性,验证服务实现的可行性。
  2. 建立业务流程

    • 步骤1:建立业务对象
      业务对象是数据处理的抽象组件,分为三类:

      • 实体业务对象:对应业务中的人、物、概念(如客户、订单);
      • 过程业务对象:对应业务处理或工作流程(如订单处理);
      • 事件业务对象:对应系统操作产生的事件(如订单提交事件);
      • 价值:提升架构抽象层次,实现知识重用(如复用多货币处理对象)。
    • 步骤2:建立服务接口

      • 设计原则:接口包含语义相关的多个操作,避免过粗(少量服务含大量操作)或过细(单个服务含少量操作);
      • 交互模式:优先无状态接口(请求消息包含所有必要信息,不受调用顺序影响),减少依赖;有状态接口(如会话型)需谨慎使用。
    • 步骤3:建立业务流程

      • 流程定义:指定活动顺序,包含输入、输出及业务价值(如技术文档搜索流程);
      • 建模要点:
        • 分解为子流程,明确组件、服务、数据、策略及测量指标;
        • 捕获正常操作、异常及不同领域需求,使用工具(如IBM Rational Requisite Pro、WebSphere Business Integration Modeler)编码模型;
        • 定义控制流(连接活动与决策点),决策点基于业务规则(转换条件)确定流程路线;
        • 复用流程元素(可复用的流程段构件)加速建模,确保模型可被分析员(战略决策)和开发人员(解决方案实现)理解。

补充

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/95100.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/95100.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7中MySQL 5.7.32 到 5.7.44 升级指南:基于官方二进制包的原地替换式升级

目录前言1. 升级概述1.1 升级背景1.2 升级目的1.3 升级方法概述1.4 升级策略与注意事项2. 升级准备2.1 备份工作2.2 下载目标版本2.3 停止 MySQL 服务3. 替换二进制文件3.1 解压官方二进制包3.2 替换核心二进制文件3.3 更新共享库4. 执行升级并验证4.1 启动 MySQL 服务4.2 监控…

数学七夕花礼(MATLAB版)

前言参考的视频在抖音,电脑版的抖音一直登录不了,用手机分享的链接如下所示。4.35 Iv.FH yTl:/ 04/04 复制打开抖音👀数学送的七夕花礼,记得查收噢.# 七夕花礼请查收 ... https://v.douyin.com/H-YpOJCyQyg/rho4sin(8theta)公式&a…

LeetCode - 21. 合并两个有序链表

题目 21. 合并两个有序链表 思路 我会采用双指针的方法,同时遍历两个链表,比较当前节点的值,将较小的节点添加到结果链表中。 具体思路是这样的: 首先创建一个哑节点(dummy node)作为合并后链表的头部,这样可以简…

ES01-环境安装

ES01-环境安装 文章目录ES01-环境安装1-参考网址2-知识总结1-参考网址 elasticsearch官网地址:https://www.elastic.co/安装elasticsearch9.0.0参考:https://zhuanlan.zhihu.com/p/1920780524991017021安装elasticsearch9.0.0参考:http://ww…

UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!UI前端大数据可视化实战策略:如何设计符合用户认知的数据可视化界面?数…

学习python第15天

其实前面学的根本不记得了,小丑.jpg,如果真的面试问到了估计也是一脸懵今日任务:JSON先认识一下JSON和JSONL文件记得之前在面试KIMI的时候,面试官就给我出了JSONL和EXCEL转换的手撕代码题,而那个时候,我连什…

Spring框架集成Kakfa的方式

Spring框架集成Kakfa的方式 springboot集成kafka的方式 添加maven依赖 <dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.3.0</version> </dependency&g…

【蓝桥杯 2024 省 Python B】缴纳过路费

【蓝桥杯 2024 省 Python B】缴纳过路费 蓝桥杯专栏&#xff1a;2024 省 Python B 算法竞赛&#xff1a;图论&#xff0c;生成树&#xff0c;并查集&#xff0c;组合计数&#xff0c;kruskal 最小生成树&#xff0c;乘法原理 题目链接&#xff1a;洛谷 【蓝桥杯 2024 省 Python…

个性化导航新体验:cpolar让Dashy支持语音控制

文章目录简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问用 cpolar 让 Dashy 管理个人导航站就是这么简单&#xff01;三步轻松搞定&#xff1a;在电脑上安装 Dashy&#xff0c;拖拽添加常用网站&#xff0c;运行 cpolar 生成远程访问链接。这个方法不仅免费&…

SQL学习记录

基本的&#xff0c;增、删&#xff0c;改insert into table_name (列1, 列2,...) VALUES (值1, 值2,....)Delete from 表 where keyvalueupdate 表 set keyvalue,keyvalue where keyvalue查用的最多whereSELECT prod_name, prod_price FROM Products WHERE vend idDLLO1OR ve…

零基础学C++,函数篇~

C基础学习&#xff08;DAY_06&#xff09;函数1. 函数的定义与使用2. 函数参数传递3. 变量的声明周期4. 函数的其他特性5. 函数的嵌套与递归函数 1. 函数的定义与使用 ​ 在设计程序时&#xff0c;如果一段代码重复进行某种操作或者完成一个特定的功能&#xff0c;就应该将这…

react+vite+ts 组件模板

1.创建项目npm create vitelatest my-app --template react-ts2.配置项目 tsconfig.json{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020", "DOM", "D…

C语言 - 输出参数详解:从简单示例到 alloc_chrdev_region

C语言中的输出参数详解&#xff1a;以 alloc_chrdev_region 为例 在学习 C 语言函数调用时&#xff0c;我们常常接触到“输入参数”&#xff0c;比如把一个数字传给函数&#xff0c;让函数帮我们算出结果。但有时候可能会发现&#xff0c;有些函数除了返回值之外&#xff0c;还…

机器视觉学习-day09-图像矫正

1 仿射变换与透视变换1.1 仿射变换之前在图像旋转实验中已经接触过仿射变换&#xff0c;仿射变换是一个二维坐标系到另一个二维坐标系的过程&#xff0c;在仿射变换中符合直线的平直性和平行性。1.2 透视变换透视变换是把一个图像投影到一个新的视平面的过程。在现实世界中&…

杰理ac791获取之前版本sdk

很惭愧&#xff0c;一个如此简单的问题卡了这么久&#xff0c;运动战的本质就是多找线索&#xff0c;多尝试

基于轴重转移补偿和多轴协调的粘着控制方法研究

基于轴重转移补偿和多轴协调的粘着控制方法研究 1. 论文标题 基于轴重转移补偿和多轴协调的粘着控制方法研究 2. 内容概括 该论文针对重载电力机车在复杂轨面条件下易发生空转的问题,提出了一种新型粘着控制方法。传统方法仅考虑单轴粘着利用而忽略轴间关系,本文设计了包…

台达 PLC 软件导入 EDS 文件后不能通过 PDO 控制的解决方法

一、功能及注意事项 1.功能说明&#xff1a;通过修改 EDS 文件处理台达 PLC 软件导入 EDS 文件后不能通过 PDO 控制的解决方法 2.注意事项&#xff1a;1).此文档只针对立迈胜 CANopen 通讯一体化电机&#xff1b; 2).EDS 文件可以用记事本打开&#xff1b; 二、EDS 文件修改 IS…

Python库2——Matplotlib2

上一篇文章主要介绍了Matplotlib库中的Pyplot模块中几大常见图像的绘制&#xff0c;包括自行修改图像的属性&#xff0c;在绘制图像时会自动创建一个图形窗口来展现这些图像。本节内容继续讲讲这个&#xff08;Figure&#xff09;图像窗口即其一些常见用法。 其他python库链接…

AI生成思维导图和AI生成Excel公式

AI生成思维导图和AI生成Excel公式 AI 生成思维导图和 AI 生成 Excel 公式是一个完全免费的 AI 办公合集网站。 它完全免费&#xff0c;一个网站支持多个实用 AI 办公功能&#xff0c;包括&#xff1a;免费 AI Excel 公式生成器、输入 Excel 公式解释含义、AI Excel 助手、Exc…

java中的VO、DAO、BO、PO、DO、DTO

VO、DAO、BO 等对象在了解这里 po、vo、dao、之前先介绍下 MVC 开发模式M层负责与数据库打交道&#xff1b;C层负责业务逻辑的编写&#xff1b;V层负责给用户展示&#xff08;针对于前后端不分离的项目&#xff0c;不分离项目那种编写模版的方式&#xff0c;理解V的概念更直观&…