我 是在2005年的时候接触SOA的概念的,当时是一个SOA项目的开发人员, 说来丢脸,在这个项目里的挺长一段时间里我不知道SOA是什么,就算这个项目结束了,我对SOA也不是十分的清楚,甚至有一段时间,我让为 WebService就是SOA。不说丢脸的事了,转入正题,首先我们说说SOA的定义,
不得不说,SOA有的定义是史上最混乱的,现在应该还是SOA的战国时代吧,我收集了一下,大概有以下几种定义
- W3C ,可以调用的一系列组件,其接口描述可以发布和发现。
- CBDI ,一组策略,实践和框架,支持将应用程序功能作为一组服务在与能够调用,发布和发现的服务使用者相关的粒度发布;这组服务是使用接口的单一标准形式从实现抽象出来的。
- Gartner: 面向服务的体系结构是一种客房机/服务器软件设计方法,其中的应用程序由软件服务和软件服务的使用者(也称为客户机或服务请求方)组成。SOA与更为通用的客户机/服务器模型不同,其定义强调软件组件间的松散偶合及对独立接口的使用。
- IBM :面向服务的体系架构(Service Oriented Architecture,SOA)是一个建设企业IT架构的架构风格。采用面向服务的原则,达到业务与支持业务的信息系统的紧密结合。
- BEA :面向服务的体系架构是一个IT战略,将企业应用中分散的功能组织成为支持互操作、基于标准的服务。这些服务可以被组合及快速重用以满足业务需求。
这些只是一些比较出名的公司或者组织给出的定义,对他的定义绝对不止如此, 虽然,不能给出标准的定义,但我们至少可以来说说 SOA的特点吧, SOA的特点也是各说各话,可大部分都可以分为以下几点
- 以业务为中心
以业务为中心,我觉得这应该是这几年的 IT界的一个共识吧, SOA更多的关注用户的业务,而不是技术, SOA所用的技术大部分都是成熟的现有技术,因为他关注的是业务,他通过让业务人员参与 SOA的系统的规则、设计、和管理,让 SOA系统能紧密的结合用户的业务。
- 随需应变
SOA系统是以业务为中心的,他利用一些松散的耦合的服务构建起来的,这些服务可以根据用户的要求进行重新的组合,所以他可以达到一个随需应变能力。
- 重用 IT资源,提升开发效率。
提升开发的效率永远是 IT界追求的目标,为了这个目标,我们已经过了许多的努力, SOA强调业务为中心,随需应变,这都是建立在一个个的服务的基础之上的,而一个个服务,不但有新开发的,还有许许多的对老系统的重用,把老系统的业务功能打包成一个个服务, SOA系统再重用这些服务,达到一个提升开发效率的目的。必竟软件业已经发建非常多年,一个系统已经为一个企业服务了很多年,要用一个新的系统来完全替代他,那成本会非常的高。
- 强调标准
SOA系统是建立在大量的标准协义之上的,它可以达到一个异构系统的互操作的能力,很轻易的能实现互联互通互操作的能力。
看看 SOA的特点, SOA给我们带来的最大的好处就是,软件复用的思想,从代码级别上升到了一个业务级别,他通过把业务,打包成一个个标准的服务注册到服务器中,再利用 ESB, BPML来对服务进行一系编排,来达到一个个新的服务,因为服务的编排是已经交给了业务人员,这也就可以达到了以业务为核心,随需应变。当然对业务人员的要求也就相对来说高许多。造成了,业务,设计,开发人员对 SOA有了不同的理解,如下,
- 对于开发人员,他们更关注底层的实现技术,如何开发服务,如何开发adapter,以发布新的功能,以及将已有的模块发面为服务,
- 对于设计人员,关注于如何将服务装配成业务流程,如何实现流程的管控、整合、安全等内容。
- 对于业务人员,关注于业务流程的设计、业务的研究以及根据市场的需求,灵活调整流程。
你发现了吗,开发人员的理解,和一个普通软件的开发的理解也没有什么大的相同,因为使用相对成熟的技术和技术的标准化,再加上网络和电脑硬件的发展,对软件的速度要求已经越来越低,对开发人员的要求也已经越来越低了。技术在 SOA系统中是次要的,如果你没有技术,现在的一些大公司,他们已经成熟的 SOA中间件,他们可以为你在技术上给你强力的支持,当然,这要求你有足够的资金了。当然,我不是一个提倡技术无用论的人,我是个做技术的, SOA系统的技术虽然成熟,但所用的东西还是非常多的,单 SOA系统中常会用到(记住,这不是必要的)的 web service就有 N多的标准了,想学全这些技术不知要花多少的时间,之所以说开发人员对技术的要求降低的前提是,开发人员不用去研究技术,也不用懂得 SOA应用到的有技术,技术的研发应该发在设计人员身上,开发人员只是写一些业务实现的服务,和把原有的业务打包成 apadpter。
反观对设计和业务人员的要求就相对来说高许多,要求以业务为核心,业务人员就已经不单纯只是提出业务对 IT系统的要求了,他需要参与到 IT系统的规划设计管理中去, SOA系统要求随需应变,业务人员就需要会对服务进行重新的编排,还要规划新的服务。这些可是技术活啊,想想现在的 OO思想,有那么多的模式是为了做这些的,而 SOA总的来说发展的时间还不是很长,他还没有那么多的模式供大家进行参考,很多服务的编排和规划都需要业务人员自己去模索,这当然对业务人员的要求提高了。也因此,一个 SOA的系统不是一挫而就的,他是一个长期的过程。
而对设计人员吗,因为现在的服务都是网络化的,他就需要考虑更多的问题来设计,比如网络化就造成对安全的极大的挑战, 还有 SOA的 N多的技术,技计人员做设计时,至少要知道吧,要不要怎么构建这个庞大的 SOA的构架怎么做技计啊。设计人员的要求也在不知不觉的提高中。