1、grpc四种通信模式?

       答:1)一元 RPC:客户端发起一个请求,服务端给出一个响应,然后请求结束;2)服务端流 RPC:客户端发起一个请求,服务端给一个响应序列,这个响应序列组成一个流; 3)客户端流RPC:客户端流则是客户端发起多个请求,服务端只给出一个响应;  4)双向流RPC:客户端多次发送数据,服务端也多次响应数据;

2、KeepAlived发送的是什么HTTP2帧?

3、KeepAlived是针对Connection还是Stream?

4、HTTP2有那些类型帧,各有什么作用?

       答:主要是分为数据帧和控制帧两种,1)数据帧 DATA:传输HTTP包体;2)数据帧 HEADERS:传输HTTP头部;3)数据帧 PRIORITY:指定Stream流的优先级;4)控制帧 RST_STREAM:终止Stream流;5)控制帧 SETTINGS:修改连接或者Stream流的配置;6)控制帧 PUSH_PROMISE:服务器推送资源时描述请求的帧;7)控制帧 PING:心跳检测,可以用于计算RTT;8)控制帧 GOAWAY:优雅的终止连接或者通知错误;9)控制帧 WINDOW_UPDATE:实现流量控制;10)控制帧 CONTINUATION:传递较大HTTP头部时持续的帧;

5、什么是拦截器,作用是什么?

       答:1)ClientInterceptor(客户端拦截器):a)请求日志记录及监控;b)添加请求头数据、以便代理转发使用;c)请求或者结果重写;2)ServerInterceptor(服务端拦截器):a)访问认证;b)请求日志记录及监控;c)代理转发;

6、什么是Resolver(解析器),常见有那些?

      答:Resolver是用来做地址解析的,内置的 resolver.Resolver 有:a)dns.dnsResolver:通过域名解析服务地址;b)manual.Resolver:手动设置服务地址;c)passthrough.passthroughResolver:将 grpc.Dial 参数中的地址作为服务地址,这也是默认的;

7、什么是Balance(均衡器),常见有那些?

       答:Balancer是从解析好的地址里面选择一个,进行底层的连接,内置的 balancer.Balancer 有:a)grpc.pickfirstBalancer:只使用一个服务地址;b)roundrobin:在多个服务地址中轮转;c)grpclb:使用一个单独的服务提供负载均衡信息(可用的服务地址列表);

9、健康检查状态有那些?

      答:

10、健康检查失败是阻塞还是返回失败?

        

11、什么是链接的fast fail?

         答:

12、失败重试的策略有那些?

        答:1)retry(重试)策略:发送rpc,服务端应用层返回指定的异常码后,客户端的LIB层继续重试,直到到达次数,返回给客户端应用层;2)hedging(对冲)策略:该策略不需要等待前一个请求返回,并发访问服务端,这需要服务端Application保证幂等性,否则多个请求到达服务端执行,将会影响业务逻辑;

13、什么是Pushback?

         答:

14、为什么GRPC支持多路复用?

        答:HTTP/2 将每一个请求变成流,每一个流都有自己的 ID,有自己的优先级,这些流可以由客户端发送到服务端,也可以由服务端发送到客户端,将数据划分为帧,头部信息为 head 帧,实体信息为 data 帧,消息又由一个或多个帧组成,多个帧之间可以乱序发送,根据帧首部的流标识可以将多个帧重新组装成一个流;

15、grpc、http2、Stream之间的关系是什么?

         答:

16、grpc流量控制策略有那些?

         答:BDP(带宽延迟)采样流量控制:针对全局端到端的流量控制;connect level 流量控制:针对的是HTTP/2协议下的TCP连接做流量控制,在服务端限制额度,然后通过客户端限制与交互调整;steam level流量控制:管理的是 connection 中诸多 stream 中的一个;

17、grpc高性能的原因是什么?

         答:gRPC利用了HTTP/2协议中的多路复用、流控、头部压缩等特性,将多个RPC请求打包成一个HTTP/2连接中的多个流,从而减少了网络连接和数据传输的开销。另外,gRPC使用Protocol Buffers协议进行数据序列化和反序列化,可以将数据大小缩小到JSON或XML的数倍,减少了网络带宽和存储空间的使用;

18、grpc监控、调试的方法有那些?

        答:grpcurl 和 grpcui 都是调试grpc的利器,前者用于命令行,类似curl工具;后者是以web的形式进行调试的,类似postman工具;

19、什么是matedata,客户端、服务端能够携带matadata的帧有那些?

        答:服务的端实现要在发送数据前,发送设置携带metadata的HEADERS(调用stream.SendHeader);服务端在远程方法退出前,设置携带metadata的HEADERS TRAILER(调用stream.SetTrailer);客户端在创建stream完成后,调用stream.Header()获取服务端HEADERS的metadata;客户端在接收io.EOF后调用stream.Trailer()获取服务端HEADERS TRAILER的metadata;

20、简述从客户端创建Stream到调用远程服务结束、关闭Stream的流程?

        答:

21、grpc默认是否有压缩算法,系统默认支持那些压缩算法,压缩算法的配置受那些因素影响?

       答:NoCompression: 不进行压缩(默认); Deflate 算法; Gzip 算法;

22、connection有那些状态?

         答:

23、如何能够获取服务端的Servcei List、File Descriptor等?

         

24、健康检查与负载均衡策略的关系?默认的负载均衡策略可否应用健康检查?

25、健康检查服务端是否要重新定义proto文件、定义远程方法?

26、Stream的Send方法是否线程安全,Stream的Send方法和Recv方法是否协程安全?

27、简述Stream流量控制,客户端与服务端完整处理流程,包括配额管理?

28、当connection中断后,如何确定链接已经建立完成,在调用远程服务?

29、什么是HEADERS TRALER帧,什么时候回发送帧?

30、客户端与服务端如何同步压缩算法?

31、客户端与服务端发送http帧之前需要经过那些处理(controlbuf)?

32、如何配置grtpc TLS双向认证?

33、客户端TLS Config中Servcie Name有什么作用?

34、GOAWAY帧由谁发起,什么含义?

35、Backoff是什么,有哪些模块处理使用Backoff?

36、connection创建及失败重连流程?

37、rpc调用失败的三种情况?

38、BinaryLog日志作用?

            答:

39、客户端建立connection全流程?

40、gRPC是否实现连接池,为什么?

41、gRPC服务类型有哪些?

42、gRPC 通信报文格式?

        答:使用二进制传输报文的,

43、gRPC如何为每个Steam进行限流,什么是Flow Control?

44、什么是HPack?

          答:

45、如何实现gRPC全链路追踪?

         答:

46、传输报文中metadata通常存放哪些内容?

          答:metadata是一个字符串与字符串切片的映射结构,可以做一些认证等;

47、 HTTP 2.0 标准设计?

        答:如多路复用、二进制帧、头部压缩、推送机制;这些功能给设备带来重大益处,如节省带宽、降低 TCP 连接次数、节省 CPU 使用等,gRPC 既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现两端的通信和简化通信系统的构建;