对SOA而言,术语“服务”有许多定义
3 服务
OASIS SOA引用模型:
名称服务在辞典被定义为“某人为别人执行的事务(职能)”。
该定义含义宽泛,无所不包。
维基百科定义:
一项“服务”是一个自足的、无状态的业务功能,通过定义良好的标准接口,它接受一个或多个请求,返回一个或多个应答。服务也能执行离散的工作单元,如编辑和处理一个事物。服务不应依赖于其他功能或过程。用于提供服务的技术,如编程语言,不构成本定义的一部分。
服务体现了业务功能
SOA聚焦于业务流程。服务的主要目标是体现业务功能的自然步骤。
接口和契约 Interfaces and contracts
一个服务是一个处理消息的接口,它返回信息,以及/或者改变相关实体(后端系统)的状态。
本质上,SOA是一个软件架构,从接口定义开始,将整个应用布局建立成接口、接口实现及接口调用的布局。SOA叫做“面向接口的架构”其实更合适。——Yefim V. Natis
一种接口是签名,描述了输入参数、输出参数以及可能的异常。
作为服务的消费者需要知道服务完整的行为和语义。接口必须是定义良好的。
定义良好的接口,其行为必须是明确的。一份契约是对特定供应者和特定消费者之间的服务的完整规格说明。从消费者的角度看,它定义了当使用服务时你应知道的一切。
实践中,对服务非描述从定义良好的接口开始。然后当某个特定的客户想要使用服务时,再基于定义良好的接口作出特定的契约。契约反映出,当你遵守特定的非功能性承诺时,需要提供给服务的必要资源。
服务的额外特性
- 自足 self-contained :最小化依赖。
- 粗粒度 coarse-grained
- 可见/可发现
- 无状态
- 幂等性Idempotent:当不确定服务是否完成时,重做操作的能力。
- 重用 reusable
- 可组合 composable
- 技术性 ?
- 服务质量和服务等级协议使能
- 前提和后置条件:前提条件定义了调用服务时,服务消费者必须履行的特定业务。后置条件保证当服务成功运行时,系统具备特定的性质或输出。
- 供应商分散
- 可互操作
4 松耦合 Loose coupling
对容错的需求
松耦合的形式
松耦合主要用来处理可伸缩性、灵活性和容错这些需求。松耦合的目标是最小化依赖。松耦合给系统带来更加复杂的代价。松耦合意味着更多的开发以及维护工作量。
异步通信
异步通信的一个难题发生在当发送者需要一个答复时,不能马上得到对自己消息的答复。
好处:互相交换服务消息的系统不用同时在线。并且如果需要答复,长时间后才答复也不会阻塞服务的消费者。
弊端:服务消费者的逻辑变得更复杂了。
异质数据结构
服务消费者应将供应者数据类型映射为自己的数据结构、
利: 系统可以修改自己的数据结构,不会对其它系统造成直接影响。
弊:需要从一个系统向另一个系统映射数据。
中介者
两类中介者:
1. 发出服务调用前就告诉你正确的服务端点。这样的中介者通常称为“中间人”或名字服务器。
2. 消费者发出调用之后,为请求选择正确的服务端点。