RPC 相关学习
各家官网
- gRPC
- Apache Dubbo™ 是一款高性能Java RPC框架。
- SOFARPC 介绍
相关资料
重点资料
对于 RPC 框架,在架构上能够支持多语言非常重要。不同的业务场景,适合不同的语言,例如后端复杂业务逻辑使用 Java 开发效率更高,对于 API 网关或者边缘服务,适合 GO 语言。对于一些序列化框架,由于使用了一些特定语言的特性,例如 Exception、泛型等,这对于跨语言演进是个灾难,像 protostuff 就绑定了 Java 语言。
- grpc typescript 实例 这个实现漂亮!
参考资料
- 【基础】RPC、JSON-RPC和HTTP区别
- 谈谈RPC——golang中jsonrpc和grpc的使用
- nodejs 使用 gRPC,代码 grpc-node
- grpc官方指南搬运 Node.js+grpc示例
- RPC选型
- Microbuilder is a toolkit that helps you build system across micro-services implemented in various languages communicating via RESTful JSON API.
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引擎,等几块。
参考资料
- 什么样的RPC才是好用的RPC 国内各个 RPC 框架比较。
- RSF 分布式 RPC 服务框架的分层设计 基于 Hasor 构建
- zerorpc An easy to use, intuitive(直觉的), and cross-language RPC