为了能支撑业务迅速发展,应用系统需要重构,做相应的分层和拆分,原来在一个系统内部能处理完的逻辑现在可能分散到多个系统协作完成,系统间调用的方式有很多种,比如Http,Hession,RMI,WebService,还有同步和异步的区分,可以想象一下如果不通过SOA平台进行封装和统一,光这些调用方式就会让系统变得很乱,也会增加学习和开发成本。如何做SOA化?下面对两个方案进行了比较(整理自bluedavy的《分布式java应用:基础和实践》):
SOA框架 | Tuscany(IBM和BEA捐献给Apache的产品) | Mule |
实现原理 | 基于SCA(Service Component Architecture)规范实现的,此规范是由IBM、Oracle等多家厂商制定的 | 基于ESB,消息中间件实现 |
发布服务 | 支持将spring、java、bpel、OSGI、resource等对象发布为SCA Service | 支持将spring或普通java对象发布为Mule Service,相比Tuscany要弱 |
调用服务 | 和发布服务一样,支持多种应用集成和调用方式 | 通过发送消息给总线进行调用,相比Tuscany麻烦 |
支持的通信方式 | Web Service、JMS、Ajax、corba、erlang、jsonrpc、rmi、ejb等 | Web Service和JMS |
交互方式 | 可通过设置CallbackEndpoint来实现异步,不指定默认是同步调用 | 通过参数synchronous实现同步,不指定默认异步调用 |
调试/跟踪 | 服务端抛出异常,会将异常带到调用端 | / |
依赖管理 | /(可自行扩展) | MuleSoft提供了一个MuleGalaxy来做服务治理 |
高性能、高可用 | /(可自行扩展) | / |
在建设SOA平台时,除了考虑上面列的那些点外,还需要考虑到集群环境、服务治理、资源动态分配等。