gRPC内容解析|青训营笔记

1,151 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记

前言

之前也对gRPC有过一些了解与实践,这里记录下gRPC相关内容的一些知识点,希望能对读者有所帮助

gRPC和RPC有什么关系

gRPC是由 google开发的一个高性能、通用的开源RPC框架,主要面向移动应用开发且基于HTTP/2协议标准而设计,同时支持大多数流行的编程语言。

gRPC基于 HTTP/2协议传输。而HTTP/2相比HTTP1.x,有以下一些优势:

Http1.x存在的问题:

  1. pipeling 传输方式浏览器在处理时有各自问题和bug,所以一般默认也未开启支持。另外对于大文件依旧会存在服务器阻塞。
  2. 主流用的还是keep-alive,在一个连接里资源的请求是串行的。为了加快并行速度浏览器会开多个连接,一个域名默认最多开约6个连接,超过限制数目的请求会被阻塞。(所以一些网站静态资源使用了多个域名,但域名太多管理不便且域名解析也需要时间)
  3. 只能客户端主动发起请求,不能服务器主动发起。
  4. 请求/响应首部太大了,未经压缩就发送,浪费
  5. 每次请求/响应的首部大都是冗余的重复的内容
  6. 数据压缩非强制,可能存在未经压缩的情况
  7. 请求顺序没优先级,只能听天命(HTML资源顺序)
  8. 客户端可以解析html发送一个个的资源请求,服务器也能啊

Http2.0的改进

  1. 基于二进制流。将一个TCP连接分为若干个流(Stream),每个流中可以传输若干消息(Message),每个消息由若干最小的二进制帧(Frame)组成。
  2. 多路复用(Multiplexing)。一个TCP连接,可以无限制处理多个请求
  3. 请求可以设置优先级
  4. 压缩Http首部
  5. 服务器推送(Server Push) 。客户端发送获取HTML的请求,服务器把HTML以及HTML里需要的资源一起发过去
  6. 服务器提示(Server Hints),preload 和prefetch。 浏览器会在空闲的时间加载这个大的图片,下次请求可能会用到

protobuf的优势 1.在微服务之间通信时,protobuf 更合适,在公开 API 或与浏览器通信时JSON 与 xml 更合适。

  1. protobuf 更加节省空间,高效。
  2. protobuf 放弃了可读性。
  3. protobuf 使用的编码方式可以使数据更加紧凑。
    5.protobuf 依赖生成的代码,需要一个protobuf 编译器根据你编写的 .proto 定义的数据生成,也称作消息。
  4. 你可以根据生成的代码初始化或解析发生的数据或接受的数据。