从我第一次听说SOA到现在有几年的时间了,其间和各种各样的人士有了各式各样的讨论,越来越发觉这不是个可以用定义来说得明白的概念,以前软件行业里还没有个词容易引起如此多的非议与争论,我有时觉得SOA很想禅宗里讲的,“说是一物即不中”。其中最难的,就是把这样一个抽象的概念说给没有技术背景的人去听,建立概念唯一的办法就是利用比喻。在我听说过的几十个关于SOA的比喻之中,有几个比喻得到更多人的认同。那些想把这个概念说给业务人员和管理者的技术人员,不要再冒险了,用这几个比喻试一下。 乐高玩具—作为一种设计哲学的SOA
这是最早的一个成功的比喻,传统的应用好比是普通的玩具,不可拆卸和拼接。基于SOA的应用都是由更小的服务组件组成的,如同乐高玩具的模块。用乐高玩具可以搭建各种不同的形状,好比可以实现不同的应用,乐高玩具的模块式基于标准的,而且可以重用。这个比喻的好处是很快给非技术人员建立一个头脑中的形象,在一个研讨会里面,组织者发了一些乐高玩具的模块,让客户们自己做出一些东西来。由此很快让听众明白,他们就是在做和软件开发类似的事情。
也许有人会说,SOA那么复杂,用小孩玩具来比喻是否太浅显了,这时,进入深层次探讨的机会来了。看上去,乐高玩具这么简单,似乎没什么深究的。这背后隐含了一种设计哲学,设计乐高玩具的团队都是一群拥有博士的设计专家,他们必须解决的一个矛盾是,如何把标准,松耦合,模块的功能,力学等要素在设计和规划的时候统统解决,留给使用者的,只有玩乐的乐趣。一个有趣的事实是,乐高玩具这样一个看上去如此简单的东西一直没有模仿者。软件工程师都可以用十分钟说他知道SOA是怎样一会事了,就像所有人看到乐高玩具时一样。然而,当一个人用设计者而不会玩家的角度来理解乐高和SOA类似的设计哲学时就会发现,两者的服务对象其实正是不需要关心技术的人,而且,他们都是为技术买单的人。工程师的位置,到底是个玩家,还是设计者?作为玩家,工程师懂得似乎多了一点,做为设计者,他还有太多东西要学,就像要成为乐高玩具的设计者一样。
电视与电脑—一个基于标准的结构
修电视比修电脑难多了,虽然电脑比电视复杂多了。因为电脑有一个基于标准的结构,总线结构,即插即用的契约标准,这些IT界的流行语塑造了PC行业。SOA也拥有几个标准的参考结构,总线,松耦合这些理念和PC行业的基本理念完全相同。这个比喻的好处是,电脑是一个更为具体的例子。这个例子隐含了用比喻说技术的几个规则。第一,被比喻的事物之间一定要有同构,这是比喻的一个逻辑前提,就是说在基本结构上,两者的设计理念是近似的。第二,用于比喻的事物最好是人们喜闻乐见的,通俗的,第三,至少可以举出几点证明两者的相似之处。
城市规划—SOA的实施需要一种循序渐进的模式
技术总是跳跃的,应用系统永远是中庸的。应用在这个例子里面被比喻为普通的建筑物,而作为企业架构的SOA实施则被比喻成为一座城市。城市的演进必然是循序渐进的,这比喻了SOA的实施是一个旅程,比如,北京的交通总是难以解决拥堵的问题,几个环路的办法实际上等同于EAI的办法,结果是总线拥塞。如果把北京城区的许多大院打散成为更小的社区,类似于将应用的颗粒度变小,象旧金山那样,很多地方至少不会堵死.然而这个改造需要循序渐进的实施方式,想想为了奥运会北京的地铁花了多少时间来与地下的管道打交道就知道,企业应用架构的改造有多复杂。
正面的例子的是丽江古城,这座规划于八百年前的城市,现在仍然生机勃勃,因此被称为“活的古城”。用一条河流分成不同水道流经整个古城,每家门前都有流水声,可以用水洗衣,做饭,所有的街道按照经络学说布置,所有的街区都成为在同一基础设施上的服务,最有意思的是,作为市场的四方街,采用了自动水冲洗设施。整个的地势东高西低,四方街是中间高,边缘低,因此每天人们用挡板把水累积高时,水就可以自动冲击街面了。这种设计,据说,阿姆斯特丹也有一个,只是不知道那一个更早。我们可以说,丽江古城的设计是面向服务的,水就是他们的公共服务。他们还通过一些规则来,规范水的使用,比如在以前,清晨的水在同一时间,所有人可以用来做饭,下午的某个时间,所有人都可以洗衣服。SOA里面讲的,服务契约,管控规则,基础设施优化都可以看到。