在很多场合的交流中,常常遇到把
SOA
和
Web Service
混用的情况,所以想在这次的
Blog
里,结合网上的各种观点,谈谈个人对两个概念的理解。用一句话来概括基本的观点就是“
SOA
不是
Web Service
,
Web Service
是目前最适合实现
SOA
的技术”。 之所以
SOA
和
Web Service
被混为一谈,最可能的原因了也就在于此吧。
早在
1996
年
Gartner
就前瞻性地提出了面向服务架构的思想
(SOA)
,该年赫赫有名的
Netscape
才发布了
Navigator 2.0
,整个互联网刚刚庆祝超过
500,000
网站的诞生,网络上的商业应用还是凤毛麟角,
Web Service
不知为何物,
SOA
还只是束之高阁的理论概念。直到
2000
年以后,
W3C
才成立了相关的委员会,开始讨论
Web Service
的相关标准;各大厂商一边积极参与标准制定,一边推出了一系列实实在在的产品。新的技术和新的产品出现,
SOA
找到了可以依托的凭借。随着
Web Service
技术的推出和应用,
SOA
的思想被一个个效益显著的信息系统建设项目不断的示范,才逐渐成为现今的热门话题。类似的情况让人联想到爱因斯坦提出来的理论,著名的质量能量转化等式
E=mc2
,直到人们掌握了核子裂变技术,才成功生产出了原子弹,向世人展示了这个理论等式的巨大威力。
因为现在几乎所有的
SOA
应用场合都是和
Web Service
绑定的,所以不免有时候这两个概念混用。不可否认
Web Service
是现在最适合实现
SOA
的技术,
SOA
的走红在很大程度上归功于
Web Service
标准的成熟和应用普及。因为现在大家基本上认同
Web Service
技术在几方面体现了
SOA
的需要:
首先是基于标准访问的独立功能实体满足了松耦合要求:在
Web Service
中所有的访问都通过
SOAP
访问进行,用
WSDL
定义的接口封装,通过
UDDI
进行目录查找,可以动态改变一个服务的提供方而无需影响客户端的配置,外界客户端是根本不关心访问服务器端的实现。
其次,适合大数据量低频率访问符合服务大颗粒度功能:基于性能和效率平衡的要求,
SOA
的服务提供的是大颗粒度的应用功能,而且跨系统边界的访问频率也不会象程序间函数调用那么频繁。通过使用
WSDL
和基于文本
(Literal)
的
SOAP
请求,可以实现能一次性接收处理大量数据。
最后,基于标准的文本消息传递为异构系统提供通讯机制:
Web Service
所有的通讯是通过
SOAP
进行的,而
SOAP
是基于
XML
的,
XML
是结构化的文本消息。从最早的
EDI
开始,文本消息也许是异构系统间通讯最好的消息格式,适用于
SOA
强调的服务对异构后天宿主系统的透明性。
综合上述观点,
Web Service
不愧为当前
SOA
的最好选择。然而,就
SOA
思想本身而言,并不一定要局限于
Web Service
方式的实现。更应该看到的是
SOA
本身强调的是实现业务逻辑的敏捷性要求,是从业务应用角度对信息系统实现和应用的抽象。随着人们认识的提高,还会有新技术不断的发明出来,更好的来满足这个要求。就好像在核子裂变之后,人们又发现了威力更加强大的核子聚变。为了要有一个更高的角度来看待问题,
SOA
和
Web Service
还是不应该混为一谈。