gRPC k8s 链接池

532 阅读1分钟

问题:

  1. gRPC在k8s默认使用最初链接的pod。

  2. http1.1在k8s上可以正常的使用service下的多个pod

  3. 分析: golang http client的实现原理

image.png (复用别人的,太懒了) 其中最核心的


graph TD

A[roundTrip] --> B[getConn]

B -->|存在| C[queueForIdleConn存在空闲链接]

B -->|不存在| D[queueForDial]

D --> E[开启协程 dialConnFor] 
E --> F[pconn.readLoop writeLoop]

方法

image.png

pconn:=list[len(list)-1]
每次从空闲listconnect中获取最后一个pconn,循环使用。
那么何时是否呢?
  1. gRPC的链接如何管理 至于如何通过loadblance resolver获取地址产生http2链接,这边就不介绍

image.png

参看http2Client 只有个conn,也就是默认不使用链接池。

原因:

  1. 与HTTP / 2相比,HTTP / 1.1无法复用请求

  2. 请求时在并发条件下大量产生的,我们需要建立多个HTTP / 1.1连接,并在所有这些连接中发出请求。HTTP / 1.1请求通常在多个TCP连接之间循环,因此连接级别平衡起作用