浅谈SOA

我最早接触到SOA这个词的时间大概是07年,那时有个面试我的技术总监问我了解SOA吗?他们公司的技术架构将会基于SOA进行开发,我很茫然。于是回家大致搜索了一下SOA的资料,那感觉如同刚接触EJB2一样,大把浮夸的资料加上一个实际案例都未找到,让我兴趣乏乏不了了之。

 

最近找工作,这个词不断的出现在招聘要求中,看得颇让人心烦。5年过去了,SOA已经应用成熟了吗?看来在小公司呆时间长了,很容易OUT...

 

抽象的概念性的文章很容易让人迷失,做了这么多年的技术,我一直觉得技术不是什么玄幻的东西,从实际的例子或代码开始,会让我更快的去了解这个领域。于是我找到了Apache Tuscany,一个SCA的实现,但直觉告诉我这更多的就像一个异构系统的集成框架。以前我们局限于ws/hession/http等技术,现在只是多了更多的其它选择。

 

然后又是浏览各种资料,一些相关联的东西渐渐浮出来了,什么ESB/EAI/SDO,找着找着找到了Spring Integration。我比较喜欢Spring的风格,把复杂的东西变简单。

 

Spring Integration的官方文档浏览了一下,这里的概念就比较具体了:消息/管道/路由/转换器/适配器/聚合器/分解器/服务端点等等。然后去github把官方的sample弄下来,hello world/cafe/file/xml 这些例子跑一跑然后看一看代码和配置,就大致明白可以用来干什么了。既然看到了Spring Integration,不可避免就会看到Apache Camle,两者及其类似,理论基础都是基于Enterprise Integration Patterns一书的。

 

Spring Integration的自我定位是企业应用集成框架即EAI,Apache Camle的自我定位是基于路由和媒介的规则引擎,好吧两个如此类似的东西都可以有两种说法,这都是他们自己说了算的。反倒是对于是不是ESB他们有个比较一致的说法:一个内嵌式的不包含运行时环境的轻量级的ESB。简单来讲,当你应用程序启动后,他们就有了运行时环境,因为他们是嵌入式的而非独立运行的。用Spring Integration的讲法就是,只要你的应用上下文可用,那么总线就存在。

 

Spring Integration和Apache Camle是嵌入式的ESB,那么独立的ESB呢,有Mule/Apache ServiceMix,还没去了解,东西真多。

 

好了,先不管那么多,那么SOA和ESB之间有什么关联?

如果是从概念的解释来看,还真没什么关联。SOA是面向服务体系结构,ESB是企业服务总线。说白了,SOA是一套架构理论,ESB是一个能具体运行的容器。关联就是在SOA的体系架构下,通常会采用ESB来进行服务调用。把时间倒流回去,回到刚刚推出web service的那会,看看下面这张经典的图:

 

UDDI提供服务的注册和搜索,WSDL用于描述服务接口,SOAP是传输协议。这个经典图到今天的现实的实施情况是怎样的我就不想说了。总的来看,SOA没有脱离这个图,只是这个图变成了SOA其中一种服务调用的实现方式。UDDI通常用来做ESB的Portal,也就是说ESB就在这张图的下面。

 

既然Spring Integration和Apache Camle都是轻量级的ESB,那么用来理解ESB的运作机制就不会有太多的偏差。总的来说它是基于消息通道来实现系统之间的信息交互的,支持的不仅仅是web service,还包括rmi、xml、文件、ftp、tcp/udp、jdbc、AMQP....等等,实际这块是可扩展的,你可以自己去实现这样的适配器。相比web service这样单一的信息交换机制,ESB强大得多了,用来做企业应用集成框架确实是一个强大的支撑。

 

通过Spring Integration的例子来看,我们可以了解到它所支持的信息交换接口以及简单的运行实例。它本身提供的功能足够灵活和强大,倒是怎么灵活和合理的应用它是一个比较考验开发者的问题。那个cafe的例子,实在不能说明其应用场景,在一个系统内的话完全没有必要那样去做。我努力回忆之前做过的项目中的一些应用需求,还是没找到一个比较适合的应用场景,感觉那些应用场景web service已经搞定了,没有必要一定需要Spring Integration来介入。这个或许更多熟悉以后会想到好的应用场景。

 

再回到SOA这个理论性的概念上来,IBM专门针对SOA提出了一套SOAM的分析方法,即面向服务的分析方法。如何从系统中合理的抽取出服务组件?这个问题看来要比在系统中定义一个服务接口艰难得多,方法论都提出来了,可见不是一般人能搞明白的。

 

先不说怎么搞明白SOA那套分析方法吧,我在想到底有多少企业需要用到SOA?正如那时EJB2时代一样,逢系统必EJB2,搞得你不懂EJB2都不好意思出门,结果呢,J2EE without EJB出来以后迅速的扑灭了那场闹剧。那到底有多少企业的应用系统需要SOA?千分之一?万分之一?还是十万分之一?还是我们逢系统就要SOA?

 

另外如果实施SOA架构会给企业增加多少成本?又带来多少收益?是不是要找家咨询公司来评估一下?好吧好吧,大公司都喜欢搞这套,所以Oracle/IBM/微软他们都来了,国内的企业自然要跟风而上,希望能分一杯羹。至于将来会不会被EAI without SOA之类的给扑灭掉,就我这点浅薄认识还真是估计不到。只是我感觉一个好的东西,它的传播会很快,1到2年就会被传播到各个角落,像Hibernate、Spring,那种普及速度根本让你都没什么时间来去质疑它。

 

SOA到今年是第几年了?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值