RPC
远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一台计算机)的子程序,而程序员就像调用本地程序一样,无需额外地为这个交互作用编程(无需关注细节)。基于该协议实现的RPC框架,如dubbo,springcloud,grpc等。
gRPC
gRPC(Google Remote Procedure Call)是现在最流行的二进制 RPC 框架之一。
- 该技术遵循一个使用 HTTP 2.0 协议的 RPC API 实现,但 HTTP 不会呈现给 API 开发人员或服务器。因此,开发人员无需担心 RPC 概念如何映射到 HTTP,从而降低了复杂性。
- grpc序列化方式采用protobuf,protobuf比json和xml要好很多,缺点就是没有json好阅读。protobuf是Google设计的一种序列化方案,他可以将 对象转换为字节流,这个过程就成为序列化;反之,也能将字节流再转换位对象,这个过程叫反序列化。
四种调用方式:
- 单向RPC
- 服务端流式RPC
- 客户端流式RPC
- 双向流RPC
RESTful
符合REST设计风格的Web API称为RESTful API:
- 资源是由URI来指定。
- 对资源的操作包括获取、创建、修改和删除,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
- 依赖于JSON来收发数据
gRPC vs Restful
那么可以从RPC风格的url和Restful风格的url上进行比较。
比如你提供一个查询订单的接口,用RPC风格,你可能会这样写:
/queryOrder?orderId=123
用Restful风格:
Get
/order/123
gRPC是面向过程,Restful是面向资源,并且使用了Http动词。从这个维度上看,Restful风格的url在表述的精简性、可读性上都要更好。
参考文档:gRPC使用,官方文档