面向服务的体系结构(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. 业务逻辑服务
用于整合已有和新开发的应用,及外部业务伙伴系统:
-
整合已有应用——应用和信息访问服务
通过适配器技术将已有系统(遗留应用、数据存储等)的业务逻辑和数据包装为ESB支持的格式,包括:- 可接入服务(On-Ramp Service):通过单向、请求/应答等模式包装功能,供ESB访问;
- 事件发现服务(Event Detect Service):发布系统变化事件到ESB。
-
整合新开发的应用——业务应用服务
支持新应用的开发和集成,包括:- 组件服务:管理可重用组件的运行时容器(如持久化、安全);
- 核心服务:提供内存管理、负载均衡等运行时支持;
- 接口服务:支持与其他系统(数据库、消息系统等)的集成。
-
整合客户和业务伙伴(B2C/B2B)——伙伴服务
支持与外部系统的异构集成,包括:- 社区服务:管理业务伙伴,支持集中式/自我管理;
- 文档服务:支持文档格式交换及流程管理(如RosettaNet、EDI);
- 协议服务:提供传输层支持(认证、路由等)。
3. 控制服务
用于数据整合、流程整合和用户访问整合:
-
数据整合——信息服务
解决数据分布性和异构性问题,包括:- 联邦服务:聚合关系型/非关系型数据,数据仍独立管理;
- 复制服务:实时复制远程数据,本地维护副本;
- 转换服务:实现数据源到目标格式的转换;
- 搜索服务:支持结构化(数据库)和非结构化(PDF)数据查询。
-
流程整合——流程服务
将关联业务活动组成自动化流程,包括:- 编排服务:控制流程执行,支持错误恢复;
- 事务服务:保证事务特性(短流程用两阶段提交,长流程用补偿);
- 人工服务:集成人工活动,支持任务分派、授权等。
-
用户访问整合——交互服务
确保信息按需传递给用户,包括:- 交付服务:支持多设备(桌面、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、微软等联合提出,用于定义服务的三个核心属性:
- 服务功能(提供的操作/方法);
- 访问方式(数据格式和协议);
- 服务位置(如URL)。
WSDL文档结构分为服务接口(Service Interface)和服务实现(Service Implementations),核心元素包括:
types
:定义服务使用的数据类型(基于XML Schema);message
:抽象定义通信消息的数据结构,引用types
中定义的类型;operation
:描述服务支持的操作(如请求/响应消息对);portType
:抽象集合,定义某个访问入口点支持的操作;binding
:将抽象接口(portType
)绑定到具体协议和数据格式;port
:定义单个服务访问点(绑定与网络地址的组合);service
:包含一组相关的port
,代表服务访问点的集合。
15.4.3 SOAP协议
SOAP是分布式环境中基于XML的信息交换协议,包含四个核心部分:
- SOAP封装(Envelope):定义消息框架,描述内容、发送者、接收者及处理方式;
- SOAP编码规则:规定应用程序数据类型的实例表示方式;
- SOAP RPC表示:定义远程过程调用(RPC)和应答的格式;
- SOAP绑定:指定使用底层协议(如HTTP)交换信息的方式。
SOAP设计目标是简单性和可扩展性,不包含分布式垃圾收集、成批消息传送等传统消息系统特性。
15.4.4 REST规范
REST(表述性状态转移)是一种软件架构风格,由Roy Thomas Fielding提出,核心是通过统一标准实现不同系统的信息交互,微服务常以REST API暴露服务。RESTful指遵循REST设计思想的架构或应用,核心概念包括:
- 资源(Resource):互联网中可被访问的一切事物(如订单、图片),通过URI标识;一个资源可对应多个URI,但一个URI仅对应一种资源。
- 表述(Representational):描述资源在某一时刻的状态,常用格式有JSON、XML、HTML等,客户端与服务端通过表述交互。
- 状态转移(State Transfer):
- 应用状态:客户端维护的用户会话信息快照,可结合缓存降低服务端压力;
- 资源状态:服务端保存的资源状态快照,未被修改时,同一请求返回一致表述;
- 状态转移通过HTTP方法(GET、POST、DELETE等)实现。
- 超链接:资源表述中嵌入相关资源的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等组织制定:
-
可靠性:
- 关键需求:消息“仅且仅传送一次”“保证传送”等;
- 标准:WS-Reliability和WS-Reliable Messaging(由OASIS管理)。
-
安全性:
- 规范内容:认证交换、消息完整性和保密性;
- 实现:基于现有标准(如SAML),由OASIS制定Web服务安全规范。
-
策略:
- 服务提供者通过“策略断言”定义通信要求(如Kerberos认证);
- 标准:WS-Policy用于标准化服务间的策略通信。
-
控制:
- 用BPEL4WS(或WSBPEL)定义服务组合的业务流程,支持异步通信、数据转换等。
-
管理:
- 标准:WSDM(Web Services for Distributed Management),支持对多环境下服务的统一管理;
- 其他:WS-Coordination和WS-Transaction规范描述服务协作和事务处理。
15.6 SOA的作用
SOA的核心价值是解决企业“信息孤岛”问题,实现系统整合与业务灵活响应,具体作用包括:
-
打破信息孤岛:
- 传统EAI方式需为每个应用组合配置“翻译”(EAI Server),数量随应用增加呈几何级增长,难以扩展;
- SOA通过将应用和资源转换为标准服务,实现资源共享,减少集成复杂度。
-
保护IT投资:
- 支持模块化添加或更新服务,无需重构现有系统,适配新业务需求;
- 可将现有应用封装为服务,通过标准接口(如WSDL)与外部系统交互,降低更换合作伙伴的成本(如零售商快速切换供应商系统)。
-
业务与IT同步:
- 决策者可基于业务策略制定流程,直接调用现有服务,无需关注底层集成细节,提升业务响应速度。
15.7 SOA的设计原则
SOA继承了对象和组件设计的核心原则,以保证服务的灵活性、松耦合和可重用性,关键原则包括:
- 无状态:服务不依赖提供者的状态,避免请求者对提供者状态的依赖。
- 单一实例:避免功能冗余,确保服务功能的唯一性。
- 明确定义的接口:
- 接口由WSDL定义,明确公共接口与内部实现的边界;
- 服务定义需长期稳定,避免随意更改;私有数据对使用者不可见。
- 自包含和模块化:
- 服务封装稳定的业务活动和组件,可独立部署、版本控制和自我管理。
- 粗粒度:
- 服务数量不宜过多,通过消息交互(而非RPC)通信,消息量大但交互频率低。
- 松耦合:
- 使用者仅依赖服务接口,无需关注服务的位置、实现技术或状态;私有数据对使用者不可见。
- 可重用性:服务设计需支持多场景复用。
- 互操作性与策略声明:
- 通过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治理功能:
- 服务注册:服务提供者向注册表公布服务合同(含身份、位置、方法、策略等),通过权限控制确保服务发布的规范性;
- 服务位置:服务消费者通过注册表查询符合需求的服务,控制访问权限和暴露的服务属性;
- 服务绑定:消费者基于检索到的合同开发代码,实现与服务的绑定和交互,工具支持自动适配协议和接口;
- 配置文件管理:通过配置文件记录服务在生命周期各阶段的参数(如开发、测试环境的机器和参数),支持服务在不同阶段的平滑迁移,部分工具含嵌入式工作流,确保流程规范化(如审查、验证和退回机制)。
15.8.2 企业服务总线模式(ESB)
ESB源于解决传统点对点集成的复杂性(如高耦合、难管理、复用度低),是支持SOA的基础软件平台,以中间件形式实现服务间的标准化交互。
-
定义:由中间件技术实现的底层架构,支持异构环境中服务以消息和事件驱动模式交互,并提供服务质量(QoS)和可管理性。
-
交互过程:
- 服务请求者生成标准化请求消息,发送至ESB;
- ESB根据消息中的服务名/接口名查找目标组件,转发消息并将结果逆向返回;
- 实现“位置透明”和“协议透明”:组件无需了解其他组件的位置和协议,仅通过总线交互,最大限度解耦依赖。
-
核心功能:
- 位置透明的消息路由和寻址;
- 服务注册与命名管理;
- 支持多种消息传递范型(如请求/响应、发布/订阅);
- 兼容多种传输协议;
- 支持多种数据格式及转换;
- 提供日志和监控功能。
-
优势:
- 降低系统互连复杂性,支持异步/同步交互;
- 基于标准技术,提升集成效率并降低成本;
- 为EAI、B2B提供理想支撑平台,厂商通常以ESB为基础,提供包含预制组件、开发工具的完整集成环境。
15.8.3 案例研究:协同企业服务总线(SynchroESB)
SynchroESB是基于SOA和ESB的服务整合平台,由西安协同时光软件公司与西北工业大学联合研发,获国家高新技术产业化计划支持,其架构分为四层:
- 服务总线层:底层基础,提供ESB核心功能(路由、消息处理等),支撑整个EAI环境;
- 数据转换与适配器层:解决与被集成系统的连接和数据接口问题,实现外部应用接入总线;
- 流程整合层:连接不同应用系统实现协同,提供业务流程设计、监控和管理功能;
- 用户交互层:为用户提供统一信息服务入口,整合内外部分散信息。
- 核心优势:
- 支持组件化构建业务流程,采用“粗颗粒”组件编程模型,降低复杂应用开发难度;
- 基于标准和SOA,实现跨企业的应用与流程集成;
- 分布式架构+集中式管理,利用现有业务系统快速组建解决方案,事件驱动架构提升业务响应速度。
15.8.4 微服务模式
微服务是SOA的演进,弱化传统SOA中重量级的ESB,将SOA思想渗透到单个业务系统内部,实现彻底的组件化。
1. 微服务架构概述
微服务将大型应用拆分为多个独立的小型服务,每个服务可独立开发、管理和迭代,通过统一接口交互,核心目标是实现敏捷开发与部署。
- 核心优势:
- 复杂应用解耦:按业务逻辑拆分,每个服务专注单一功能,降低复杂度,便于小团队维护;
- 独立开发与部署:服务拥有独立进程,变更时无需编译/部署整个系统,测试范围小,降低生产风险;
- 技术选型灵活:去中心化选型,团队可根据业务需求选择合适技术栈,架构转型风险低;
- 容错性强:单个服务故障被隔离,其他服务可通过重试、降级等机制容错,避免全局瘫痪;
- 松耦合与易扩展:服务独立扩展,按需分配资源,降低水平扩展成本。
2. 微服务架构模式方案
微服务无固定开发模式,需结合业务场景设计,常见模式包括:
-
聚合器微服务模式:
- 聚合器调用多个微服务,处理数据后直接展示,或增加业务逻辑后发布为新的组合服务(从消费者转为提供者);
- 变种“代理微服务”:客户端不聚合数据,仅由代理根据需求选择调用不同服务,负责请求委派和数据转换;
- 变种“分支微服务”:允许同时调用两个独立的服务链,互不影响。
-
链式微服务模式:
- 服务按链传递请求(如A→B→C),下游服务合并结果后返回上游,采用同步消息传递;
- 限制:调用链不宜过长,避免客户端长时间阻塞。
-
数据共享微服务模式:
- 适用于单体架构向微服务过渡阶段,允许强耦合的服务共享缓存和数据库,解决SQL反规范化导致的数据重复与不一致问题。
-
异步消息传递微服务模式:
- 用消息队列(如ActiveMQ、RabbitMQ)替代同步REST API,实现异步业务逻辑,提升响应速度;
- 注意:可能增加系统复杂性和降低可用性,需谨慎选型。
3. 微服务架构面临的问题与挑战
-
分布式复杂性:服务间需通过RPC或消息通信,服务发现和调用链跟踪难度大;
-
分区数据库挑战:不同服务可能使用独立数据库,受CAP原理限制,需放弃强一致性追求最终一致性,对开发人员要求高;
-
测试难度增加:测试需启动所有依赖服务,复杂性远高于单体应用;
-
运维挑战:大规模部署中,监控、管理、扩容和分发难度大。
-
取舍原则:仅当现有架构无法扩展、数据库增长过快,且团队具备微服务思维时,收益才大于成本;否则无需盲目采用。
15.9 构建SOA架构时应该注意的问题
15.9.1 原有系统架构中的集成需求
构建企业级SOA架构时,需优先分析和整理原有系统的集成需求,核心原则是重用现有资源而非替换遗留系统,以降低成本和风险。
-
集成需求的范围:
集成不仅限于组件化应用的集成,还需考虑以下具体类型:- 应用程序集成需求;
- 终端用户界面集成需求;
- 流程集成需求;
- 已有系统信息集成需求。
-
关键注意事项:
- 不同企业的集成复杂度差异显著(如航运EDI系统需处理大量数据源,集成需求复杂;部分企业数据源少,需求简单);
- 架构师需全面评估所有可能的集成需求,确保架构能适应企业发展;
- 集成功能应由服务提供,而非依赖特定应用程序,以保证灵活性和可扩展性。
15.9.2 服务粒度的控制以及无状态服务的设计
服务是SOA的核心元素,构建时需重点关注服务粒度和无状态设计:
-
服务粒度的控制
- 推荐原则:外部暴露的服务采用粗粒度接口,内部服务可使用细粒度接口。
- 粗粒度接口:对应服务的完整执行(如网上商店的“提交购买表单”),保证外部请求者以一致方式使用服务,降低交互模式的易变性;
- 细粒度接口:实现粗粒度服务的内部操作(如“创建购买记录”“更新数据库”),提供灵活性但需避免直接暴露给外部(避免请求者难以适应频繁变化)。
- 实现方式:通过BPEL将细粒度操作组合为粗粒度服务接口,平衡灵活性与一致性。
- 推荐原则:外部暴露的服务采用粗粒度接口,内部服务可使用细粒度接口。
-
无状态服务的设计
- 核心要求:服务应是独立、自包含的请求,不依赖前序请求的状态或其他服务的上下文,即“无状态”。若存在依赖关系,建议定义为业务流程(BPEL)。
- 实现机制:
- 推荐使用无状态Session Bean实现粗粒度服务,通过Web Service技术暴露为外部可调用的服务(将Session Facade模型转化为EJB的Web服务端点);
- 优势:
- 利用现有EJB组件的业务逻辑,减少重复开发;
- EJB容器自动提供并发支持(串行化对Bean实例的请求)、安全与事务管理(无需手动编写相关代码);
- 支持集群和资源池化,提升系统可伸缩性和可靠性,应对高负载。
15.10 SOA实施的过程
15.10.1 选择SOA解决方案
选择合适的解决方案是SOA实施成功的前提,需从以下三方面考量:
-
全局规划
- 全面评估现有系统:明确可复用资源、需改造部分、新增系统需求及预算;
- 分阶段选择工具和技术:根据实施步骤(如先改造某系统)匹配产品;
- 边学习边实践:开发过程中积累经验,逐步优化。
-
结合企业自身需求
- SOA的价值(如业务流程优化、创新)随时间逐步体现,前期投资需着眼长期效益;
- 实施进度和资金投入取决于企业IT应用沉淀(如遗留系统数量)和目标层次(如基础集成 vs 业务创新)。
-
技术考察
- 平台选择:优先考虑开放性和对标准的支持(如兼容WSDL、SOAP等);
- 实施方法:参考六大要素——业务战略和流程、基础架构、构建模块、项目和应用、成本和效益、规划和管理;
- 供应商选择:评估产品是否匹配需求、成功案例、客户评价及专业服务能力(如现状分析、建设性建议)。
15.10.2 业务流程分析
业务流程分析是SOA实施的核心环节,包括建立服务模型和业务流程:
-
建立服务模型
通过三种方法发现和验证服务候选者,形成服务目录:-
自顶向下分解法:
- 从端到端业务流程入手,逐层分解至最小业务活动,结合业务组件模型(按职责划分业务领域、组件)确定服务候选者;
- 进行变化分析,区分易变与稳定部分,确保架构适应未来变化,补充新发现的服务候选者。
-
业务目标分析法(目标服务建模):
- 从企业业务目标出发,分解为子目标,再分派给服务实现,形成“目标服务树”,确保每个服务可回溯到具体业务目标(基于关键性能指标分析)。
-
自底向上分析法(遗留资产分析):
- 梳理已有系统(如遗留应用、套装软件)的功能模块,发现重复或可复用的模块,包装为服务;
- 分析技术局限性,验证服务实现的可行性。
-
-
建立业务流程
-
步骤1:建立业务对象
业务对象是数据处理的抽象组件,分为三类:- 实体业务对象:对应业务中的人、物、概念(如客户、订单);
- 过程业务对象:对应业务处理或工作流程(如订单处理);
- 事件业务对象:对应系统操作产生的事件(如订单提交事件);
- 价值:提升架构抽象层次,实现知识重用(如复用多货币处理对象)。
-
步骤2:建立服务接口
- 设计原则:接口包含语义相关的多个操作,避免过粗(少量服务含大量操作)或过细(单个服务含少量操作);
- 交互模式:优先无状态接口(请求消息包含所有必要信息,不受调用顺序影响),减少依赖;有状态接口(如会话型)需谨慎使用。
-
步骤3:建立业务流程
- 流程定义:指定活动顺序,包含输入、输出及业务价值(如技术文档搜索流程);
- 建模要点:
- 分解为子流程,明确组件、服务、数据、策略及测量指标;
- 捕获正常操作、异常及不同领域需求,使用工具(如IBM Rational Requisite Pro、WebSphere Business Integration Modeler)编码模型;
- 定义控制流(连接活动与决策点),决策点基于业务规则(转换条件)确定流程路线;
- 复用流程元素(可复用的流程段构件)加速建模,确保模型可被分析员(战略决策)和开发人员(解决方案实现)理解。
-
补充