各家官网

相关资料

重点资料

对于 RPC 框架,在架构上能够支持多语言非常重要。不同的业务场景,适合不同的语言,例如后端复杂业务逻辑使用 Java 开发效率更高,对于 API 网关或者边缘服务,适合 GO 语言。对于一些序列化框架,由于使用了一些特定语言的特性,例如 Exception、泛型等,这对于跨语言演进是个灾难,像 protostuff 就绑定了 Java 语言。

参考资料

RPC 更像是熟人之间的对话,HTTP 更多的陌生人之间的约定。

其实rpc没有我们想的很复杂,它与http的使用上面差别也不是很大,但是从服务的角度来说,确实rpc更多适用于内部服务的调用,这样服务的调用会非常方便,就像在使用本地服务一样。同时我们也对比了jsonrpc和grpc从实现的角度上面来说jsonrpc实现起来更加方便一些,不过grpc从性能和使用的角度来说更加稳健一些。

关于 RPC 和 RESTful 的比较

RESTful API在很多实际项目中并不实用。因此真的做了项目,你可能会发现只能用HTTP+JSON来定义接口,无法严格遵守REST风格。一些业务逻辑或者动作,很难被看作资源。

所以不是RESTful不好(实际上『真·REST』有许多巨大的优点是RPC无法企及的),而是绝大多数程序员根本掌握不了。那么与其写一个半吊子的伪RESTful API,同志们还是老老实实写RPC API吧。

简而言之,JSON-RPC无法像REST一样享受HTTP的各种优点(standard interface, stateless, cache..),又必须承担HTTP作为基于文本的协议,payload过大传输的成本以及序列化反序列化的开销。

抛开技术,从应用层面来说大概前端工程师会更喜欢RESTful,而后端工程师会更喜欢JSON-RPC。

RPC更偏向内部调用,REST更偏向外部调用。

主流 RPC 框架

  • grpc —— https://grpc.io, 这个是国外比较流行的,有 google 背书,支持多语言,听说使用的公司也比较多,看上去是比较成熟的框架。
    • grpc的扩展性,多语言可支持的特点,导致选型方面的优势是无可替代的。
  • Thrift 是一个轻量级、跨语言的开源RPC框架,并且能够根据 *.thrift 文件自动生成联合代码。
  • sofa —— https://tech.antfin.com/sofa 这个是国内阿里开源的,目前阿里开源的 Eggjs 框架也开源了基于 sofa 的最佳实践。
  • DUBBO —— 阿里开源的 java RPC 框架
  • Hasor是一套基于 Java 语言的开发框架,区别于其它框架的是 Hasor 有着自己一套完整的体系,同时还可以和先有技术体系做到完美融合。它包含:IoC/Aop容器框架、Web框架、Jdbc框架、RSF分布式RPC框架、DataQL引擎,等几块。

参考资料

Nodejs 生态中的 RPC