问题:
-
gRPC在k8s默认使用最初链接的pod。
-
http1.1在k8s上可以正常的使用service下的多个pod
-
分析: golang http client的实现原理
(复用别人的,太懒了)
其中最核心的
graph TD
A[roundTrip] --> B[getConn]
B -->|存在| C[queueForIdleConn存在空闲链接]
B -->|不存在| D[queueForDial]
D --> E[开启协程 dialConnFor]
E --> F[pconn.readLoop writeLoop]
方法
pconn:=list[len(list)-1]
每次从空闲listconnect中获取最后一个pconn,循环使用。
那么何时是否呢?
- gRPC的链接如何管理 至于如何通过loadblance resolver获取地址产生http2链接,这边就不介绍
参看http2Client 只有个conn,也就是默认不使用链接池。
原因:
-
与HTTP / 2相比,HTTP / 1.1无法复用请求
-
请求时在并发条件下大量产生的,我们需要建立多个HTTP / 1.1连接,并在所有这些连接中发出请求。HTTP / 1.1请求通常在多个TCP连接之间循环,因此连接级别平衡起作用