漫谈grpc 3:从实践到原理,带你参透 gRPC (10)

所以这将导致 kube-proxy 只有在连接建立时才会做负载均衡,而在这之后的每一次 RPC 请求都会利用原本的连接,那么实际上后续的每一次的 RPC 请求都跑到了同一个地方。

注:使用 k8s service 做负载均衡的情况下

总结

gRPC 基于 HTTP/2 + Protobuf。

gRPC 有四种调用方式,分别是一元、服务端/客户端流式、双向流式。

gRPC 的附加信息都会体现在 HEADERS 帧,数据在 DATA 帧上。

Client 请求若使用 grpc.Dial 默认是异步建立连接,当时状态为 Connecting。

Client 请求若需要同步则调用 WithBlock(),完成状态为 Ready。

Server 监听是循环等待连接,若没有则休眠,最大休眠时间 1s;若接收到新请求则起一个新的 goroutine 去处理。

grpc.ClientConn 不关闭连接,会导致 goroutine 和 Memory 等泄露。

任何内/外调用如果不加超时控制,会出现泄漏和客户端不断重试。

特定场景下,如果不对 grpc.ClientConn 加以调控,会影响调用。

拦截器如果不用 go-grpc-middleware 链式处理,会覆盖。

在选择 gRPC 的负载均衡模式时,需要谨慎。

参考

https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-HTTP2.md

https://juejin.im/post/5b88a4f56fb9a01a0b31a67e

https://www.ibm.com/developerworks/cn/web/wa-http2-under-the-hood/index.html

https://github.com/grpc/grpc-go/issues/1953

https://www.zhihu.com/question/52670041


漫谈grpc 3:从实践到原理,带你参透 gRPC

微信公众号【程序员黄小斜】作者是前蚂蚁金服Java工程师,专注分享Java技术干货和求职成长心得,不限于BAT面试,算法、计算机基础、数据库、分布式、spring全家桶、微服务、高并发、JVM、Docker容器,ELK、大数据等。关注后回复【book】领取精选20本Java面试必备精品电子书。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgffdj.html