知识卡片
Web Service验证了简单普适高性能三者不可兼得
内容
Web Service(SOAP)曾是CORBA之后统一RPC的第二次好机会:用XML描述数据和 接口,商业运作交由中立的W3C管理,连微软都放弃自家DCOM转投它的怀抱。但它 最终暴露出两个致命缺陷:一是XML本身信息密度低(同一个字段用XML描述往往 比原始值多占十几到上百倍空间),跨语言的严格数据定义又加剧了这个问题, 导致性能奇差;二是”贪婪”——不满足于解决核心的远程调用问题,还想在一套 协议体系里一揽子解决事务、一致性、安全、防重放等所有分布式计算难题,于是 衍生出WS-*这一整个协议家族,学习负担沉重(呼应[[SOA标准化程度过高反而 导致自己被淘汰]]中同样的过度扩张逻辑)。把CORBA(面向对象、追求普适但 复杂)、Web Service(追求普适、想屏蔽复杂性但性能差)放在一起看,能得出 一个更抽象的教训:简单、普适、高性能这三个目标很难被同一个RPC协议同时 满足——面向透明简单的协议(DCE/RPC、RMI)依赖操作系统或语言;面向通用 普适的协议(CORBA)躲不开复杂性;靠技术手段屏蔽复杂性的协议(Web Service) 又被性能问题拖累。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第2章"访问远程服务"2.1.4节
"统一的RPC"(源文件:_epub-src对应OEBPS/Text/chapter17.xhtml)
- 结论依据:原文指出Web Service因XML信息密度低导致性能差、因WS-*协议族
过度扩张导致学习负担重,并总结"面向透明的、面向普适的、意图屏蔽复杂性的
RPC协议各自受制于不同短板,简单、普适、高性能似乎真的很难同时满足",
直接支撑本卡片结论。
- 原始内容:那些面向透明的、简单的RPC协议……总有一些先天约束;那些面向
通用的、普适的RPC协议,如CORBA,就无法逃过使用复杂性的困扰;而那些意图
通过技术手段来屏蔽复杂性的RPC协议,如Web Service,又不免受到性能问题
的束缚。简单、普适、高性能这三点,似乎真的很难同时满足。