知识卡片
RPC框架战国时代的三大发展方向与新的插件化趋势
内容
既然没有哪种RPC协议能同时做到[[Web Service验证了简单普适高性能三者不可 兼得]]中的三个目标,现代RPC框架不再追求”大而全的完美”,而是选定一个方向 做深:朝面向对象发展(RMI、.NET Remoting,让分布式系统里也能跨进程做 面向对象编程,又叫”分布式对象”);朝性能发展(gRPC、Thrift,靠专有高效 序列化器和更底层的传输协议——gRPC基于HTTP/2支持多路复用,Thrift直接基于 TCP省去应用层开销);朝简化发展(JSON-RPC,牺牲功能和效率换来协议轻便, 适合浏览器这类没有额外协议/客户端支持的场景)。这三个方向天然互斥:追求 面向对象就避不开Stub/Skeleton的繁琐,功能多了协议必然复杂,追求简单就要 接受牺牲配置灵活性,追求效率就要用二进制序列化和底层协议、牺牲语言覆盖面。 近几年出现了第四种应对方式:把核心问题设计成可插拔的扩展点,框架本身聚焦 提供负载均衡、注册、可观测性这类更高层能力(如Dubbo默认Dubbo协议+Hessian2 序列化,但都可以替换成JSON/Kryo等),用”可配置”缓和了”必须取舍”的困境。
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第2章"访问远程服务"2.1.5节
"分裂的RPC"(源文件:_epub-src对应OEBPS/Text/chapter18.xhtml)
- 结论依据:原文分别举例说明面向对象(RMI/.NET Remoting)、性能(gRPC/
Thrift)、简化(JSON-RPC)三个发展方向的取舍逻辑,并指出Dubbo/Thrift等
框架近年转向插件化、把功能设计成扩展点以缓和"必须取舍"的困境,直接支撑
本卡片结论。
- 原始内容:任何一款具有生命力的RPC框架,都不再去追求大而全的"完美",而是
以某个具有针对性的特点作为主要的发展方向……也正是每一种RPC框架都有不
完美的地方,所以才导致不断有新的RPC轮子出现……RPC框架有明显向更高层次
与插件化方向发展的趋势。