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 既能够在客户端应用,也能够在服务器端应用,从而以透明的方式实现两端的通信和简化通信系统的构建;