SOA Patterns simple impression 

SOA Patterns》这本书出了有几个月了,可惜一直没找到下载。最近在dzone.com 上找到一份refcardz ,得以管中窥豹。本文简单的介绍下这本书都写了什么,以及在我眼中哪些章节更值得期待。

–本文以下内容按照SOA Patterns的内容排列–

Basic Service Patterns – 基本服务模式

Aggregator – 聚合器
因为SOA系统只能保证消息送达,而不能保证按顺序送达,所以应该把几个有顺序要求的消息聚合在一起发送。这样避免了额外考虑消息状态和顺序的开销,更有利于异步处理消息。

Service Bus – 服务总线
这个不用说了,现在流行概念ESB。这里主要指ESB消息路由的功能。

Dynamic Routing – 动态路由
可配置、非过滤的消息路由。过滤方式的路由会导致endpoint接收所有的消息,而这个动态路由则位于过滤器之前,而起它的过滤规则可配置,甚至是由endpoint一侧的应用配置。

Event-Driven Consumer – 事件驱动的消费者
阻塞的监听或轮询方式浪费资源。通过基于总线或者特定于应用的callback机制可以更高效的处理消息。

Filter – 过滤器
系统间独立于平台的一种消息处理方式,并且不引入新的系统依赖或者不必要的耦合性。注意过滤器的对外接口要一致,以便灵活组合。

Router - 路由器
根据消息内容、类型等规则解耦不同应用之间的耦合,过滤规则可配置。路由可以是串行或者并行。

Translator or Transformer – 翻译转换器
各种不同系统之间消息可能采用了不同的输入输出格式。翻译转换器的作用就是把这些不同的格式转换为应用理解的格式。它位于endpoint一侧,因为一般来说根据系统和协议的不同,消息采用的格式也有所不同。有了消息翻译转换机制,系统内部就不用考虑外面的消息格式可以专心业务开发。

Architectural Patterns – 架构模式

Asynchronous Processing – 异步处理
同步机制降低性能和可靠性,所以当然能异步尽量异步。一般会需要个消息队列之类的。异步机制能提供可扩展性,包括前端和后端。

Bridge – 桥
包括路由+过滤+转换功能。用来连接通用路径的不同应用,这些应用可能有不同的消息协议、分析处理流程。

Cross-Service Operation – 跨服务操作
不同服务组成原子服务,事务性应用需要这个。

Event-Driven Dispatching – 事件驱动的分发
应用实现为阻塞并且可重入的,订阅一个通信通道。应用直到事件或消息唤醒之前一直处在休眠状态。它更适宜用在单一服务上。如果是多服务,那就应该把他们看作是黑盒的原子服务。

Process Aggregation – 过程聚合
组合多个非序列并且互相依赖的处理步骤来完成一个操作。这个组合操作不必要是原子的,甚至有些步骤在设计阶段都是未知的。

Routing and Filtering – 路由和过滤
通过递归的定义路由+过滤,提供比较正式的消息路由机制。这一机制可能导致无意识的耦合性和资源的巨大消耗。

Replicator – 复制器
在消息需要以相同的定义复制到不同的endpoint上时应该该模式。它作为SOA消息流的一部分实现。

Compound Paterns – 复合模式

Centralized Schema – 集中化schema
一种跨应用边界的schema共享方法,避免额外的数据表示和服务定义。这里的schema是和服务契约脱离的。需要一个转换器把单一的schema转换到特定格式对应的不同应用上,也就是拆分单一schema到不同服务消费者。这种方法还没有实际用过,需要更仔细的看看书研究研究。

Concurrent Contracts – 并行契约
服务的schema要适应不同的服务消费者。因为这些消费者需要不同层次的服务抽象。这也需要一个转换器。这里一个服务schema转换到多种消费方式应该是和Centralized Schema最主要的不同点。深入的内容有待进一步研究。

Decompose Capability – 能力拆分
在业务流程不断膨胀和进化的过程中减少功能拆分影响的方法。在物理上分开的数据模型和服务定义,仅在二者生成特定服务实现的时候才组装,这样二者可以分别进化。

Enterprise Service Bus – ESB
ESB这个不用说了,典型的复合模式。

Fault-Tolerant Service Provider – 容错服务提供者
在冗余的服务提供者之前加负载均衡器。需要保证服务无状态和尽可能的可重入性。

Wrapper – 包装器
把遗留系统包装成通用的无状态服务。做系统集成的都这么干。

可以看到作者提到了Dynamic Routing、RouterRouting and Filtering这三种模式,看起来他们都和消息路由有关,希望拿到这本书之后能做个完整的对比。Centralized SchemaConcurrent Contracts,也需要看看细节内容才能更好的做个对比。

整本书看下来应该还是最后的Compound Paterns更值得仔细研读。而且从这本书也大概能看出为什么ESB能够得到如此多的推崇,书中大部分的模式都是ESB相关的。还有一点值得注意的是,这些模式都强调了降低耦合的重要性。

BTW: 希望有这本书电子版的同志们能发我一份-_-

 

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>