概念
面向服务的体系结构(Service-OrientedArchitecture,SOA)是一个组件模型,通过使用和组装构建模块来概念化、设计和构建应用程序。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言, 通过使用基于 XML 的语言(称为 Web 服务描述语言(Web ServicesDefinition Language,WSDL))来描述接口。
SOA 应该能够将业务的商业流程与它们的技术流程联系起来,并且映射这两者之间的关系。安全、信任和可靠的消息传递应该在任何 SOA 中都起着重要的作用。
有多种实现方式,如web service 和CORBA
组成:
服务消费者(service consumer)可以通过发送消息来调用服务。
服务总线(service bus)将消息转换后发送给适当的服务实现。它使用了一种流水线的方法,即把总线看作一系列的部件 — 一条流水线。流水线的每个阶段本质上都是一个增值的部件,从前一个阶段接收一系列的输入,然后处理数据,并把输出传输到下一个阶段。
业务规则引擎(business rules engine) 容许业务规则被合并在一个服务里或多个服务里。
服务管理基础(service management infrastructure),用来管理服务,类似审核,列表(billing),日志等功能。
服务提供者(serviceprovider):面向提供者的接口
作用
利用现有系统进行构建对变化进行支持,而不会对其他部分进行影响,主要有三种变化:合作伙伴 内部业务 旧的业务拓展
特点:
使用广泛
松耦合(接口和实现分离,平台和语言无关)
关键点
高速缓存和性能策略
对提高服务的性能和质量,以及最终增强提高整体顾客服务来说非常重要。它可以在不同的层次上执行,包括服务配置,服务响应数据的服务和其他 SOA 资源,取决于如何通过优化来获得高性能。整体性能还可以通过压缩在节点间传输的基于 XML 的消息来获得提高,这样可以降低带宽利用率。为了达到这个目标,压缩和解压缩代理被安装在 SOA 栅格的边缘。
服务水平协议(SLA)
SLA 定义了与 Web 服务操作和业务流程相关的性能担保——诸如响应时间和服务可用性等——性能担保对业务关键的操作来说很重要。服务提供商可以使用 SLA 来推广和创建服务水平协议。这可以帮助他们提供适当数量的资源和优先提供维护服务。
版本控制
是指版本化 Web 服务和前摄性地帮助客户开展客户端应用程序迁移工作,Web 服务的最新版本一经推出,就立即帮助客户把客户端应用程序迁移到最新版本中。版本控制支持包括能够注册同一服务的不同版本,根据需要向客户端提供所有版本的 API 和库,以及帮助把客户端迁移到新版本中。版本控制组件使用基于 XLST 的转换规则把对旧版本服务的请求转换成对新版本的请求。
服务品质
在企业中,关键任务系统(mission-criticalsystem,译注:关键任务系统是指如果一个系统的可靠性对于一个组织是至关重要的,那么该系统就是该企业的关键任务系统。比如,电话系统对于一个电话促销企业来说就是关键任务系统,而文字处理系统就不那么关键了。)用来解决高级需求,例如安全性,可靠性,事物。当一个企业开始采用服务架构作为工具来进行开发和部署应用的时候,基本的Web服务规范,像WSDL,SOAP,以及UDDI就不能满足这些高级需求。正如前面所提到的,这些需求也称作服务品质(QoS,quality of services)。与QoS相关的众多规范已经由一些标准化组织(standardsbodies)提出,像W3C(World WideWeb Consortium)和OASIS(theOrganization for the Advancement of Structured Information Standards)。下面的部分将会讨论一些QoS服务和相关标准。
安全
Web服务安全规范用来保证消息的安全性。该规范主要包括认证交换,消息完整性和消息保密。该规范吸引人的地方在于它借助现有的安全标准,例如,SAML(as Security Assertion MarkupLanguage)来实现web服务消息的安全。OASIS正致力于Web服务安全规范的制定。
- 联合验证:这个特性截取服务请求并添加适当的用户名和凭证。它还可以在发送服务执行请求之前验证服务请求。
- 授权:验证每一个服务请求并发放授权,来确保发送方具有访问服务的正确权限。
- 加密/解密:在元素层加密请求和响应信息的 XML 内容,并且解密相反的脚本。
可靠
在典型的SOA环境中,服务消费者和服务提供者之间会有几种不同的文档在进行交换。具有诸如“仅且仅仅传送一次”(once-and-only-once delivery),“最多传送一次”( at-most-once delivery),“重复消息过滤”(duplicatemessage elimination),“保证消息传送”(guaranteed message delivery)等特性消息的发送和确认,在关键任务系统(mission-criticalsystems)中变得十分重要。WS-Reliability和WS-ReliableMessaging是两个用来解决此类问题的标准。这些标准现在都由OASIS负责。
WS-I Basic Profile
WS-I BasicProfile,由Web服务互用性组织(Web Services Interoperability Organization)提供,是SOA服务测试与互用性所需要的核心构件。服务提供者可以使用Basic Profile测试程序来测试服务在不同平台和技术上的互用性。
策略
服务提供者有时候会要求服务消费者与某种策略通信。比如,服务提供商可能会要求消费者提供Kerberos安全标示,才能取得某项服务。这些要求被定义为策略断言(policyassertions)。一项策略可能会包含多个断言。WS-Policy用来标准化服务消费者和服务提供者之间的策略通信。
控制
当企业着手于服务架构时,服务可以用来整合数据仓库(silos of data),应用程序,以及组件。整合应用意味着例如异步通信,并行处理,数据转换,以及校正等进程请求必须被标准化。在SOA中,进程是使用一组离散的服务创建的。BPEL4WS 或者 WSBPEL(Web Service Business ProcessExecution Language)是用来控制这些服务的语言。WSBPEL目前也由OASIS负责。
管理
随着企业服务的增长,所使用的服务和业务进程的数量也随之增加,一个用来让系统管理员管理所有运行在多相环境下的服务的管理系统就显得尤为重要。WSDM(WebServices for Distributed Management)规定了任何根据WSDM实现的服务都可以由一个WSDM兼容(WSDM-compliant)的管理方案来管理。
其它的qos特性,比如合作方之间的沟通和通讯,多个服务之间的事务处理,都在WS-Coordination 和 WS-Transaction 标准中描述, 这些都是OASIS 的工作。
最佳实践
※ 使用新服务的流程必须是受配置和发现流程驱动的,这与实现一种冗长的手工流程周期相对。这样可以确保整个系统能够以最少的投入来满足未来需求。
※ 一次 SOA 实现就像用来设计业务服务的方法一样成功,每一服务必须被抽象为一种粗粒度的业务功能,并按照可以在企业之间耦合和重用的方式进行设计。
※ 在可以缩短响应时间和提高整体用户体验的地方,服务必须设计成异步的。
※ 客户端应用程序必须使用统一的服务访问机制,以一种独立于协议的方式,而且不必考虑服务是本地还是远程。此外,客户必须关注业务逻辑,而业务连接性逻辑必须从客户端 SDK 中抽象出来。这样确保了集中式管道逻辑、更高的应用程序开放人员生产力以及易于维护。
※ SOA 实现框架中的普通组件必须以一种标准方式发布,来促进代码的统一和重用。
※ 在可能的地方使用配置,而不是基于定制和代码的业务逻辑。这样可以提高以最少的投入和最短的时间来满足未来业务需求的能力。
※ 重用和包装现有业务应用程序逻辑和更加粗粒度的业务水平服务。避免重写原有实现逻辑。