0%

grpc基础概念

[toc]

RPC全程 Remote Procedure Call ,远程过程调用
gRpc是使用protobuf协议的RPC框架。

在服务端,服务器应用实现方法并启动一个gRPC服务器来处理客户端调用。
在客户端,客户端有一个叫做stub的组件(在很多语言中称为客户端),提供和服务端一致的方法。
c8d8584b41419d707fe757fa64e38706b0219f5e

服务service器代码和stub客户端代码都可以通过protobuf自动生成。

因为使用protobuf做协议交换, 因此多语言都可以支持, python、java、golang、C++都有protobuf的实现。


Q: GRPC相比HTTP的优势?#

A:

  1. 底层使用HTTP/2协议, HTTP/2的长期实时通信支持比HTTP要好。、
  2. ,用的protocBuf对数据进行序列化, 是一种轻量级的消息格式, 成本是json是要小的。
  3. 多语言通用, python、C++、
  4. 逻辑上支持双向流,简化了操作便携度。
  5. 支持tcp多路复用,避免了频繁的tcp连接建立。

Q: 刚才讲到了HTTP2/,能详细说下区别吗?#

A;

  • HTTP / 1.1使用文本数据,这通常在网络上效率较低。而HTTP / 2是二进制数据。
  • HTTP / 1.1的标头没有压缩,而HTTP / 2的标头是gzip压缩的。
  • 在HTTP / 1.1中,服务器必须以接收请求的相同顺序发送响应。而,HTTP / 2是异步处理响应的
  • HTTP / 2允许同时在同一(单个)连接上发送多个请求和响应消息(多路复用)。某个请求任务耗时严重,不会影响到其它连接的正常执行
  • HTTP/2可以不需要响应必须先接请求, 而是可以自己响应(服务端主动推送)
    比如你需要两个文件1.html,1.css,如果是http1.0则需要请求两次,服务端返回两次。但是http2.0则可以客户端请求一次,然后服务端直接回吐两次

Q: 为什么http/1.1不能实现多路复用而http2.0可以? -#

A:

  • 在二进制分帧层上,HTTP 2.0 会将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码 ,
  • 这样分帧以后这些帧就可以乱序发送,然后根据每个帧首部的流标识符号进行组装
  • 对比http/1.1, 因为http1.1是基于文本以换行符分割每一条key:value,则会有以下问题:
  1. 一次只能处理一个请求或者响应,因为这种以分隔符分割消息的数据,在完成之前不能停止解析
  2. 解析这种数据无法预知需要多少内存,会给服务端有很大压力


Q: 为什么说protobuf比json快?#

A:
protobuf比json快6倍,原因如下:

  • protobuf的存储格式为 tag-length-value,通过tag+length能快速对value进行解码。
  • 通过length控制长度,不需要分隔符(逗号,双引号等)就能分隔字段
  • 空字段会省略

Q: grep和dubbo这个grpc框架的对比?哪个好?#

A:
dubbo适合需要完整管理体系、高可靠性的分布式微服务调用体系。 它的配置方式多、负载均衡方式多、容错多、支持4种注册中心。

grep的话, 负载均衡和注册中心都要自己扩展实现,但有提供插拔接口等。
grpc只有api(代码配置)的方式,只有failover。
和dubbo相比, grpc的亮点在于http/2的高性能,以及protobuf的多语言兼容。
146220bbd653f4c601a5ae989065ee0c1d01bd2b