珍惜SOA 请WOA到一旁“休息”去
2005 年底,着名 IT 分析机构 Gartner 的一个分析师 Nick Gall 发明了一个新词 -- WOA (Web-Oriented Architecture) 。大家知道,发明新缩写字 (acronym) 一向是 Gartner 的绝活。
几个月后,SOA界着名的 blogger 和专栏作家 Dion Hinchcliffe 对它表示支持,他甚至画了一幅图,说明基于 SOAP和 WS-* 的 Web services,和基于 REST、POX和 JSON 的 WOA,以及其他 SOA 相关科技,在复杂度和丰富程度上的比较。本以为 "WOA" 的命运,差不多已经和先前广遭声讨的 "SOA 2.0" 一样,开始消声匿迹,但最近在一片大谈 REST 声中(前两篇帖子的主题),发现 WOA 已死灰复燃。
到底什么是 WOA?来看看始作俑者是怎么定义的。Nick Gall 在评论一篇同事的 blog 时为 WOA 下了以下的定义:
Shorthand version: WOA = SOA + WWW+ REST
精简版:WOA = SOA + WWW + REST
他接着说:
BTW, Since WOA is a substyle of SOA (ie it imposes additional constraints above and beyond those imposed by SOA), you may be interested in our definition of SOA:
附带一提,因为 WOA 是 SOA 的一种子样式(也就是说,它在原本基于 SOA 的制约之上,还多了些额外的限制),你可能也会有兴趣看看我们对 SOA 的定义:
Service-Oriented Architecture:
面向服务架构:
Long version: An architectural style in which certain discrete functions are packaged into modular, shareable, distributable elements ("services"), which can be invoked by consumers in a loosely coupled manner.
冗长版:一种架构样式,将某些特定的功能包装成模块化、可共享、可发布的元素(即“服务”),这些服务可以被消费者以松耦合的方式调用。
我想信他所谓的“SOA + WWW + REST”并非如算数的加法(联集),而指的是必须兼具 SOA、WWW,和 REST,是交集。但以上这些定义,真把 WOA 说清楚、讲明白了吗?
正因为Web是个偌大的空间,加上所有在上面不断发生的事,使得 “Web”成了一个非常大而模糊的概念,许多对技术不娴熟的用户,更是常把 “Internet”和 “Web”混为一谈。一个很经典的例子是“Web 2.0”这个已存在两年的词汇–恐怕到现在,许多人对到底什么是“Web 2.0”,仍存在着不尽相同的理解和看法。炒作 “WOA”,一个“面向Web的架构”,有着同样的问题,因为 Web 概念太宽了,到底什么是它的核心精神?扯不完!Web 2.0 相关科技 (AJAX, mashups) 能不能算是 WOA?那PHP, Rubyon Rails, Perl, Python开发的 Web 应用呢?JSP、ASP的应用呢?SaaS (Software as a Service) 应用又算不算 WOA?如果按照 Nick Gall 的定义,所有的 WOA 都必须符合 SOA,但不见得所有SOA 都是 WOA;还有一个关键是 REST。有人可能会抗议地说:凭什么只有 RESTful 和面向服务的算是 WOA?!凭什么说走 HTTP的 SOAP Web services就不是 Web?争议的根源,正是在于 “Web”所涵盖的面太广了,大过 SOA 所在的企业计算领域。所以如果反过来硬要把 WOA 局限定义成 SOA 的子集,绝对是招引争议和混淆的好方法。如果目标是提倡 REST,那么先前帖子中提过的面向资源的架构 ROA (Resource-Oriented Architecture) ,是一个比 WOA 更适合的名称。“资源”和“服务”是两个更适合相提并论的抽象概念,并且“资源”充分地凸显出 REST 的设计哲学。
嗯... WOA... 反覆思索后,还是感觉它的概念很虚。乍看之下,看似是一个和 SOA 互别苗头的新架构,但主张者又强调,它是一个 SOA 的子集,是实现 SOA 的一种特殊的 style。无疑地,如前两篇帖子所谈,REST 的确是个好东西,可以利用在某些 SOA、SaaS,和 Web 2.0 领域的应用,但如果硬要搞出一个 WOA 并把它和 SOA 的关系扯复杂的话,可预见未来在许多企业的 SOA 发展史上,将应验两千多年前孔老夫子已预测到的情节:“名不正(某大大炒作出一个 "WOA" 的词),则言不顺(但仔细检验后,其实概念很虚);言不顺,则事不成(用 REST 做了一堆点应用 [point solutions],便洋洋得意以为已经是 SOA 化,其实差得远了);事不成,则礼乐不兴(没有规规矩矩从 SOA 方法论入手,分析企业战略目标、业务架构、信息架构等,做完善规划);礼乐不兴,则刑罚不中(SOA 治理 [governance] 不到位,未能清楚定义执行战略和可量化的评价指标,因而无从得知 SOA 执行的效果和投资回报);刑罚不中,则民无所措手足(end users 感觉不出来 所谓 "SOA" 的项目和做法比过去传统作法有何高明之处)。
聪明的 SOA 治理团队和架构小组,无疑会开始探索 REST 之美,并把它善用在架构当中,但不会迷失在 WOA,或无谓的 SOAP vs REST 之争当中。选择 REST 绝不是基于“为了 REST 而 REST”。
不久前听到 "JBOWS" (也有人用 "JBOS")一词,它和 RedHat的 JBoss 没有直接关系,尽管发音相近。这是个讽刺搞笑的说法,代表 "Just a Bunch Of Web Services"。意思是说,目前许多已经采用了一堆 Web services 的企业,不等于已经做到 SOA,就像采用了 AJAX 不见得就具备 Web 2.0 精神一样。着名的 SOA 分析师 Jason Bloomberg 前不久才大声疾呼,用了不少篇幅强调这个重点(另一篇相关文章:SOA != Web Services)。基于 SOAP 的实现,是一种 Web services 的 style,而 RESTful 则是另一种 Web services 的 style。也就是说,Web services != SOA 的公式,放到 REST 的上下文中,依然成立。
正本要清源,擒贼要擒王。实施 SOA 的动机,应出自于加强 IT 和业务部门间的磨合,提高业务敏捷和未来应变的弹性和灵活性,而不是因为新冒出一个超酷、超简单,名为 WOA 或 REST 的技术实现手段。中文的老话叫“本末倒置”,新话叫“屁股领导脑袋”;而老外则有:“拖车放在马前面”"putting the cart in front of the horse" 一词。别告诉我:“你说的那种 SOA,是企业级的 SOA;而我们现在谈的,是比较广义的,很多用 REST 架构的 Web 应用,都可算是广义的 SOA,包括一些 Web 2.0 和 Enterprise 2.0 的应用”。如果是这样的话,那干脆把所有 IT 的东西统统叫 SOA 算了!大家对 SOA 本来就已经够模糊了,这么做,只会徒增混淆,火上浇油,而太便宜了那些炒概念的分析师。某个科技概念的价值,是会随着它的定义被灌水、扩大解释而锐减的。分析师大大和厂商们,请珍惜 SOA,别残害它。
- 最新文章
- 以ESB为导向建立SOA是有害的[01-04]
- SOA中的数据之将数据转换成信息[01-04]
- SOA从试点到普及还需要什么?[01-04]
- 提高软件开发生产力的秘方[01-04]
- 剪贴板中的观察者Observer模式[01-04]
- Mike Milinkovich:展望Eclipse和SOA[01-04]
- 相关文章
