浅谈RPC,gRPC和RESTful

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在表述的精简性、可读性上都要更好。

浅谈RPC,gRPC和RESTful_第1张图片

参考文档:gRPC使用,官方文档

你可能感兴趣的:(rpc,restful)