面向服务的模糊性
2005年7月1日
每当Thoughtworks鲁莽地让我站在客户面前时,我一定会被问到一个问题:“您对SOA(面向服务的架构)有什么看法?”这个问题几乎不可能回答,因为SOA对不同的人意味着截然不同的东西。
- 对于一些人来说,SOA 是关于通过 Web 服务公开软件。这群人进一步细分为那些期望各种 WS-* 标准的人和那些接受任何形式的 XML over http(甚至可能不是 XML)的人。
- 对于一些人来说,SOA 意味着一种架构,其中应用程序会消失。相反,您拥有提供业务功能和数据的核心服务,这些服务由 UI 聚合器隔开,这些聚合器应用呈现方式,将核心服务提供的元素聚合在一起。
- 对于一些人来说,SOA 是关于允许系统通过某种形式的标准结构(通常是基于 XML 的)与其他应用程序通信。在最糟糕的情况下,这就像“带尖括号的 CORBA”。在更复杂的形式中,这涉及到提出某种形式的组织标准主干,并让应用程序与之协同工作。这个主干可能涉及也可能不涉及 http。
- 对于一些人来说,SOA 就是关于使用(主要是)异步消息传递在不同系统之间传输文档。本质上,这是 EAI,但没有所有昂贵的 EAI 供应商将您锁定。
我听到有人说 SOA 的好处是它将数据与流程分离,它将数据与流程结合起来,它使用 Web 标准,它独立于 Web 标准,它是异步的,它是同步的,同步性无关紧要……
几年前,我在微软 PDC 上。我坐了一整天听关于 SOA 的演讲——最后我参加了 SOA 小组讨论。我开玩笑地问是否还有其他人理解 SOA 到底是什么。后来有人评论说,这种模糊性也发生在面向对象方面。这有一定的道理,关于 OO 的含义存在(并且仍然存在)一些不同的观点。但与面向服务的模糊性相比,面向对象的模糊性要少得多。
那么我们该怎么办?首先,我们必须始终牢记有多少种(并且大多数情况下不兼容的)想法属于 SOA 阵营。这些想法确实需要独立于 SOA 进行适当的描述(和命名)。我认为 SOA 已经变成了一个无意义的概念,可以与“组件”和“架构”相提并论。它已经无法挽救——因此,确实有一些实质内容的具体想法需要独立发展。