原创 SOA,现在进行时收藏

 | 

 

SOA,现在进行时
 
SOA现在正热得"烫手"。
对于SOA,目前我听到有两种说法:一种讲它是"颠覆性的革命架构",一种是"谨慎观望"。但无疑,SOA最近几年发展得非常快,各主要软件厂商纷纷高调跟进,关于SOA的报道可以说是不绝于耳。对"SOA热",程序员们有的兴奋和期待,有的则感到困惑,最近我在金蝶中间件于广州、上海等城市举行的"Java俱乐部"上和程序员们交流时,他们或是以一种朝圣者的表情说:"以前面向对象的技术过时了,SOA时代来了",或者一再恳切地追问我:"SOA到底是什么?作用是什么?"
那么,SOA是什么?到底能解决什么问题、解决得怎样?我们和客户都准备好了吗?我给出的答案是"Just Processing,SOA-现在进行中"。
SOA到底是什么?
SOA(Service-Oriented Architecture)的定义是面向服务的架构,就是说将软件按照功能设计成一个个服务,这些服务用标准的方式定义接口、并通过标准的协议进行调用。SOA所定义的接口和调用方式是独立于编程语言和运行平台的,广义上讲SOA可以基于不同的底层技术实现,比如CORBA和Web Services。但CORBA由于过于复杂和臃肿已很少使用,所以目前所说的SOA绝大多数是基于Web Services技术实现。在Web Services的实现方式下,SOA服务的接口用XML进行定义。
在SOA架构下,软件开发从业务流程分析开始,使用组件化业务建模的方法识别和分析各种业务模型,将各种实践融入其中,在这个基础上建立用例,用例直接产生BPEL,这些BPEL则可以被融入一个服务整合框架中,其描述了各种服务的信息,从而把ESB上的各个模块统一起来,形成一个巨大的服务仓。
这样,SOA甚至是所有软件人员的一个梦:将中间层再进行抽离,在中间层作一个跨技术架构的元数据和业务逻辑,使之成为跨技术架构的、可长期继承、并不断积累的企业业务库和最宝贵的信息资产,也就是面向服务的组件库,而且这个服务组件库也可以被其它企业复用,且不依赖于任何一种技术架构。夸张一点说,如果所有软件企业都使用SOA架构,那么世界软件业将会发生彻底的改变。显然,这样一个框架不是一种产品,也不仅仅是一种技术,而是一种解决问题的方法论。
SOA可能应用的两个场景及现有问题
那么,SOA要解决的问题是什么?我认为,从技术本质上讲,SOA可能应用于两个场景:第一种是业务互通互联;第二种是封闭交易系统,即将元数据和业务逻辑抽离,形成可复用。举个例子,在第一种场景中,当不同企业之间的业务需要相互调用,这时就可能采用SOA技术;在第二种场景中,在企业内部需要将系统进行迁移时,利用SOA技术定义的原有数据和业务流程,可以很快完成。
无疑,SOA是一个伟大的思想,它试图定义一个大家(各种软件厂商)都"认"的、都"遵循"的法则,大家都使用这样的方法来进行互联互通,从而实现无界限的联通,以及服务组件库的继承和复用,解放无效和重复劳动。打一个不那么恰当的比喻,就像人类的语言一样。SOA或许就像《圣经》中那个著名的"通天塔"的故事:人们用同一种语言交流产生的威力是如此之大,以至于他们在巴比伦几乎要修成一个"通天塔",直达上帝所在的天庭。
但是,在SOA应用的两个场景中,现存的问题同样也是明显的:
第一种场景:业务互联互通,就是应用系统互联。业务互联,与其说是技术问题,不如讲是业务问题,例如ERP、CRM的异步整合,数据层面整合都不能很好将两个系统整合,SOA仅仅是一种实现工具之一,整合效果并不会好不到那里去。我们可以说,在没有其他选项之前,SOA是一种最"不坏"的方式,但它并不能解决所有的问题,实际上EAI的牵涉面很广,而我们知道,有些问题并不是单纯靠技术就能解决的。
第二种场景:封闭交易系统,缺点是性能慢,而且基于Web Services的交易没有形成明确的规范。使用XML作信息交互比较慢是大家都承认的,性能问题将对SOA的发展造在一定的阻力。同时SOA规范本身没有完善,比如Transaction规范还在不断完善,而且Web Service多年来收效甚微。总的来说,SOA现在还处在一个发展阶段,很多标准还在制定,不同厂商间还存在不兼容的现象,因此SOA还不能说已经是一个成熟的技术,还需要时间的检验,还在"进行中"。当然,金蝶中间件作为JCP组织成员,也会推动SOA规范在J2EE平台上的实现。
中国用户的现实选择之惑
在憧憬SOA技术可能带来的前景之余,我们不得不回过头来冷静地说:SOA和我们大家的共同客户――中国企业还有距离。
中国信息化进程与欧美不同,大量的基础业务系统还没建立起来,整合需求并不如想象的那么大。从我们对客户的了解,发现很少有客户有SOA的需求。简单地总结就是,互通无基础,以新建系统为主,需求并不强烈。而欧美市场大量业务系统已建立起来需要整合,从这个角度讲,SOA是适用于他们的。同时,在成功案例极少的前提下,SOA还处于培育期,新建封闭交易系统使用SOA技术还是有一定风险的。
一项新技术需要市场的消化,大型企业出于保护企业投资,不会轻易地转移到新的技术平台;而即使像J2EE这样成熟的技术经过了这么多年的发展,也不敢说占有统治地位的市场份额。SOA还需要整个IT界的用户和供应商共同促进。
中国信息化需要什么样的技术架构、能够接受什么样的成本价位?这不仅仅是我们的客户需要考虑,我们软件厂商要比客户考虑得更清楚、更进一步。在这个充满变数的激烈竞争市场,只有冷静务实才能生存、发展。

发表于 @ 2007年03月16日 16:15:00|评论(loading...)|编辑

 | 

评论

#zhenting 发表于2007-04-11 20:25:25  IP: 58.60.219.*
大二时从程序员杂志开始关注您。
期待更多的文章。
#yeka 发表于2007-04-18 23:24:42  IP: 58.49.248.*
袁红岗先生:

若您有写作计划,或者您的朋友也有写作计划,请联系博文视点。

博文视点在线投稿网页:
http://bv.csdn.net/
上面有“作译者指南”和“出版流程”,还有详细的作译者常见问题解答集萃。

也可以直接与我联系:
MSN: yeka52@hotmail.com
Blog: http://blog.csdn.net/yeka
#zhongwanli 发表于2007-04-23 12:34:24  IP: 59.37.44.*
在中国,SOA需要打破一些规则的限制,而现在这种“限制”还占有着统治地位。
说一个现实的问题: 现在不是所有企业的系统都有所谓的“元数据”,面对SOA,他们没有太多的勇气重新来一遍。
#SOA320 发表于2007-05-16 21:38:43  IP: 219.133.155.*
请教袁红岗大师,
服务的本质是什么? 您可以定义一下吗?
#SOA320 发表于2007-05-16 22:03:53  IP: 219.133.155.*
袁大师,

您好

目前网上对于SOA的一些言论太多了,这让我们这些学习者不知道从何开始.而且近来发现一个自称为java初学者的人居然提出他个人对服务见解.简直是毗垺撼大树,不知天高地厚.相信有很多人看过他的帖子了,请看下面连接地址.

http://www.nabble.com/Introducation-Of-Jmin-service-tf3412164.html#a9507276

http://www.jdon.com/jivejdon/thread/31698.html


请问授这个和SOA有什么区别吗?,希望您可以帮我们这些SOA爱好者辨别一下真伪,以免误导学习者. 谢谢!
#xiaoweiba811127 发表于2007-08-10 16:02:15  IP: 202.104.115.*
袁大哥,虽然同在一家公司,但未见过一次,可恨啊
#mdot 发表于2007-12-06 22:23:21  IP: 59.41.191.*
我目前在研究SCA和BPEL,在做在职硕士的论文.但对SCA有很多问题,因此想请教.目前我有一个简化的实际场景如下:
在一个集团中,分别有A,B两间子公司的网站,它们分别是用PHP实现的电子购物网站.现在新有一个系统C,用JAVA
编写.现在想实现的效果是:当一个注册C网站的用户,在登陆C网站后,在最后的订单提交之后,想先通过SCA,
分别去调用A,B网站,通过A,B网站上的WEB服务分别得到这个有用户在A,B网站上的消费记录,然后通过规则计算出
C用户应该享受的折扣和优惠.

在这个场景中,我觉得如果仿照apache tuscany的DEMO的一些做法,可以在C中应用SCA,分别去调用
A,B提供的WEB服务(当然,我自己有点觉得这是单单为了写论文做DEMO服务),但如果换个角度来看,如果一定

要用SCA这样调用的话,大家觉得其好处是什么?比如我的这个场景,其实用传统的WEB服务调用也可以,
这就令我想到一个问题,到底用SCA有什么好处?
我目前学习所得,好象在对不同的异构系统使用SCA的时候,感觉都是要调用WEB服务(尽管可以绑定JSON,DWR,RMI,BPEL)
,但如果象我的这个场景的话,对于合作伙伴来说,还是要封装WEB服务呀.那这好象体现不出SCA的优点.
另外,如果对于同一个大系统来说.比如在同一台机器上,跑了一个SPRING的应用,一个EJB的应用,
那么是不是用SCA的话,它们之间的组件互相调用就不用WEB服务了?

#yfqfy 发表于2008-03-12 22:27:41  IP: 61.180.31.*
袁老师,您好;
您谈到的soa是能够做什么,我觉的您要是能再写一篇文章,阐述一下面对soa,我们能做什么,那样会对大家更有帮助,谢谢!
#go_to_work 发表于2008-04-24 14:29:45  IP: 221.193.192.*
一直在向袁老师学习中。。
#iwenlove 发表于2008-04-24 16:24:35  IP: 124.205.170.*
#mdot 发表于2007-12-06 22:23:21 IP: 59.41.191.*
我目前在研究SCA和BPEL,在做在职硕士的论文.但对SCA有很多问题,因此想请教.目前我有一个简化的实际场景如下:
在一个集团中,分别有A,B两间子公司的网站,它们分别是用PHP实现的电子购物网站.现在新有一个系统C,用JAVA
编写.现在想实现的效果是:当一个注册C网站的用户,在登陆C网站后,在最后的订单提交之后,想先通过SCA,
分别去调用A,B网站,通过A,B网站上的WEB服务分别得到这个有用户在A,B网站上的消费记录,然后通过规则计算出
C用户应该享受的折扣和优惠.

在这个场景中,我觉得如果仿照apache tuscany的DEMO的一些做法,可以在C中应用SCA,分别去调用
A,B提供的WEB服务(当然,我自己有点觉得这是单单为了写论文做DEMO服务),但如果换个角度来看,如果一定

要用SCA这样调用的话,大家觉得其好处是什么?比如我的这个场景,其实用传统的WEB服务调用也可以,
这就令我想到一个问题,到底用SCA有什么好处?
我目前学习所得,好象在对不同的异构系统使用SCA的时候,感觉都是要调用WEB服务(尽管可以绑定JSON,DWR,RMI,BPEL)
,但如果象我的这个场景的话,对于合作伙伴来说,还是要封装WEB服务呀.那这好象体现不出SCA的优点.
另外,如果对于同一个大系统来说.比如在同一台机器上,跑了一个SPRING的应用,一个EJB的应用,
那么是不是用SCA的话,它们之间的组件互相调用就不用WEB服务了?

=================================
SOA是种架构.书呆子了不是.
当你做够100个项目后,思考过为什么我就那么累之后,
你就明白SOA是什么了。
#zuode 发表于2008-06-23 08:56:57  IP: 116.209.230.*
袁大师,


发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 袁红岗