知识卡片

RPC接口与基于XML的Web服务接口的选择

普通读书笔记卡

内容

分布组件的接口传统上基于远程过程调用(RPC);近些年基于XML的HTTP接口(以SOAP为代表的Web Service)兴起,有其独特优势:一次往返就能传递大量结构化数据(正好契合”最小化远程调用次数”的诉求),XML作为通用格式几乎每个平台都有解析器、配合HTTP的普及使不同平台系统之间天然能互通,而且XML是纯文本、便于人工核查传输内容,还因为走HTTP协议而更容易穿越出于安全或政策原因被限制开放的防火墙端口。但这些优势不是没有代价:把所有传输数据转成XML结构和字符串本身要花费不小的额外开销,因此如果两个系统天生共享相同的二进制编码机制(比如都在同一个平台上构建),直接用平台自带的远程调用机制效率要高得多,此时基于XML的接口反而成了华而不实的累赘——作者的建议是:只有当没有更直接的方式可用时,才应该选择基于XML的Web Service,Web Service真正的用武之地是不同平台之间的互操作,而不是同平台内部的常规远程调用。也可以把HTTP接口叠加在面向对象接口之上、兼得两种方式的好处,但代价是需要同时维护Web服务器和底层远程面向对象接口,增加了系统复杂度,只有当确实同时需要HTTP协议的普适性、又需要远程面向对象API在安全和事务处理上比本地对象更易操作的设施时,才值得这样做。此外,作者本人的偏好正在从同步的、基于RPC的接口转向异步的、基于消息的处理方式,认为后者尤其更适合Web Service场景,只是这个话题篇幅太大,本书未展开讨论。

参考来源

- 位置:《企业应用架构模式》第一部分"表述"之"第7章 分布策略"之"7.5 分布接口"(源文件:_epub-src/OEBPS/Text/000049.html) - 结论依据:原文说明"将所有的传输数据转化成XML结构和字符串给远程调用增加了可观的开销。因此,使用远程过程调用比使用基于XML的接口要高效许多。如果系统间的二进制编码机制相同,基于XML的接口只是一堆花哨的东西……我建议只有在无法使用更直接的方式时,才使用基于XML的Web Service",直接支撑本卡结论。 - 原始内容:如果两个系统是用相同的平台构建的,最好使用系统自己的远程调用机制。Web Service在不同平台相互交互时能提供便利。我建议只有在无法使用更直接的方式时,才使用基于XML的Web Service。