SOA学习笔记
面向服务的体系结构是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。
SOA ≈ 模块化开发 分布式计算
远程调用特指RPC(Remote Procedure Call)
以Java远程Service为例分析不同场景下,传输方式的某些可能较好选择:
内网 同框架Java客户端 大并发:多路复用的TCP长连接 kryo (二进制序列化) (kryo也可以用Protostuff,FST等代替)
内网 不同框架Java客户端:TCP Kryo
内网 Java客户端 2PC分布式事务:RMI/IIOP (TCP 二进制)
内网 Java客户端 可靠异步调用:JMS Kryo (TCP 二进制)
内网 不同语言客户端:thrift(TCP 二进制序列化)
外网 不同语言客户端 企业级特性:HTTP WSDL SOAP (文本)
外网 兼顾浏览器、手机等客户端:HTTP JSON (文本)
外网 不同语言客户端 高性能:HTTP ProtocolBuffer (二进制)
从性能上讲,tcp协议 二进制序列化更适合内网应用。从兼容性、简单性上来说,http协议 文本序列化更适合外网应用。
WebServices (经典的WSDL SOAP HTTP),满足了SOA的底线,而未必是某个具体场景下的最佳选择。
更理想的SOA Service最好能在可以支持WebServices的同时,支持多种远程调用方式,适应不同场景,这也是Spring Remoting,SCA,Dubbo,Finagle等分布式服务框架的设计原则。