gRPC快速入门总结

455 阅读3分钟

前言

掌握一种自己学习的方式,结合自己的时间限制、当前需求做出的阅读总结,有一种模式成为 加法-减法 模式。简单而言就是砍掉一些当前不是很重要的事情,专心在于自己目前最重要的事情上面。最近刚换了新的公司,目前内部的服务调用都是通过gRPC来调用,因此我得快速了解 gGPC 是什么,他有什么用,能让我在工作上快速适应到这种模式的一个总结。

在此阶段,并不追求极致,也就是说没必要深究到gRPC如何 encoding、或者其stub的原理、甚至说去抓HTTP/2 协议包再去分析gGPC的调用过程传递参数过程等等。

凡是学习都有一个阶段性,在每个阶段性中,都需要持续保持自己在舒适圈外。没什么事可以一撮而就,都是日积月累。在时间精力有限的情况下,选择出最优最适合自己的知识才是最重要的。

如果时间允许,当然建议把每个知识点逐步深耕下去!

认知

  • grpc 是google开源的rpc框架,底层基于http2作为传输协议,rpc协议在客户端和服务端都需要有一个stub作为序列化和反序列化参数、方法等信息。
  • rpc还能通过rabbitMQ作为传输协议,这样就能将同步变成了异步的操作
  • 同样的rpc框架 还有 阿里的 Dubbo、Facebook的Thrift

gRPC 的四种模式

gRPC 通常有四种模式,unaryclient streamingserver streaming 以及 bidirectional streaming,对于底层 HTTP/2 来说,它们都是 stream,并且仍然是一套 request + response 模型。

  • unary 一次来回通讯
  • client streaming 客户端多次请求,服务端一次返回
    • 在同一个http请求中,服务端必须会等待客户端全部发送完毕后再返回
  • server streaming 客户端一次请求 服务端多次发送
    • 在同一个http请求中,服务端会等待客户端请求完,服务端再多次返回
  • bidirectional 双向流。 双方都可发送多次
    • 同时进行,无需等待请求完成

别人是如何讲解gRPC的

  • 大部分grpc的文章都在讲解以下几点
    • protobuf 的定义
    • protogen的实用方法,生产.proto 文件
    • go server和client调用的实例代码
    • grpc stream的控制
    • grpc 订阅发布控制

其他关于grpc的知识点

  • Interceptors - 拦截器
    • 拦截器可以认为是middleware
    • 可以分为 unary interceptor 和 stream interceptor
    • 拦截器可以被配置在client site 和 server site
  • deadline
    • 用于设置整个rpc链路的返回时间
    • 例如 A → B → C
    • A在发起request的时候就已经得把deadline设置好
    • 如果不设置,那么A会一直等待着整个链路回来
  • multiplexing
    • gRPC支持多路复用,可以把多个gRPC服务器注册到同一个服务上
  • metadata
    • 想传一些参数又跟rpc调用无关的时候,则可以使用metadata来传输数据
    • metadata被构建在gRPC的headers里面 image.png
  • load-balance
    • gRPC的load-balance必须全面支持http/2的协议、例如Nginx、Envoy proxy等
    • 当然你也可以把自己实现一个client-site的load-balance
  • security
    • gRPC支持TLS
    • 分别为one-way secured connection 和 mTLS secured connection
    • 两者的区别的,前者只需要配置在客户端,客户端传送的时候会把参数加密
    • 后者是客户端和服务端都需要先进行证书认证,确保双方证书都有效后,才会进行数据传输
  • authentication
    • 支持多种认证、例如 basic authentication、OAuth 2.0、JWT、 Google Token-Based Authentication

实战

  • 用grpc做一个流的计算器(双向流)
  • 做grpc做个简单的调用 (unary)
  • 用grpc做一个订阅发布 (单向流)

书籍

  • gRPC & UP Running 出本社是 O'reIlly 封面是只鸭子的

问题

  • http和rpc的分别是什么
  • 为什么http2 可以这么快?