精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

在 Kubernetes 環境中實現 gRPC 負載均衡

開發 前端
以 Dubbo 的調用過程為例,調用的時候需要從服務注冊中心獲取到提供者的節點信息,然后在客戶端本地根據一定的負載均衡算法得出一個節點然后發起請求。

前言

前段時間寫過一篇 gRPC 的入門文章,在最后還留了一個坑沒有填:

圖片圖片

也就是 gRPC 的負載均衡問題,因為當時的業務請求量不算大,再加上公司沒有對 Istio 這類服務網格比較熟悉的大牛,所以我們也就一直拖著沒有解決,依然只是使用了 kubernetes 的 service 進行負載,好在也沒有出什么問題。

由于現在換了公司后也需要維護公司的服務網格服務,結合公司內部對 Istio 的使用現在終于不再停留在理論階段了。

所以也終有機會將這個坑填了。

gRPC 負載均衡

負載不均衡

原理

先來回顧下背景,為什么會有 gRPC 負債不均衡的問題。由于 gRPC 是基于 HTTP/2 協議的,所以客戶端和服務端會保持長鏈接,一旦鏈接建立成功后就會一直使用這個連接處理后續的請求。

圖片圖片

除非我們每次請求之后都新建一個連接,這顯然是不合理的。

所以要解決 gRPC 的負載均衡通常有兩種方案:

  • 服務端負載均衡
  • 客戶端負載均衡 在 gRPC 這個場景服務端負載均衡不是很合適,所有的請求都需要經過一個負載均衡器,這樣它就成為整個系統的瓶頸,所以更推薦使用客戶端負載均衡。

客戶端負載均衡目前也有兩種方案,最常見也是傳統方案。

圖片圖片

這里以 Dubbo 的調用過程為例,調用的時候需要從服務注冊中心獲取到提供者的節點信息,然后在客戶端本地根據一定的負載均衡算法得出一個節點然后發起請求。

換成 gRPC 也是類似的,這里以 go-zero 負載均衡的原理為例:

圖片圖片

gRPC 官方庫也提供了對應的負載均衡接口,但我們依然需要自己維護服務列表然后在客戶端編寫負載均衡算法,這里有個官方 demo:

https://github.com/grpc/grpc-go/blob/87eb5b7502493f758e76c4d09430c0049a81a557/examples/features/load_balancing/client/main.go

但切換到 kubernetes 環境中時再使用以上的方式就不夠優雅了,因為我們使用 kubernetes 的目的就是不想再額外的維護這個客戶端包,這部分能力最好是由 kubernetes 自己就能提供。

但遺憾的是 kubernetes 提供的 service 只是基于 L4 的負載,所以我們每次請求的時候都只能將請求發往同一個 Provider 節點。

測試

這里我寫了一個小程序來驗證負債不均衡的示例:

// Create gRPC server
go func() {  
   var port = ":50051"  
   lis, err := net.Listen("tcp", port)  
   if err != nil {  
      log.Fatalf("failed to listen: %v", err)  
   }  
   s := grpc.NewServer()  
   pb.RegisterGreeterServer(s, &server{})  
   if err := s.Serve(lis); err != nil {  
      log.Fatalf("failed to serve: %v", err)  
   } else {  
      log.Printf("served on %s \n", port)  
   }  
}()
// server is used to implement helloworld.GreeterServer.  
type server struct {  
   pb.UnimplementedGreeterServer  
}  
  
// SayHello implements helloworld.GreeterServer  
func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {  
   log.Printf("Received: %v", in.GetName())  
   name, _ := os.Hostname()  
   // Return hostname of Server
   return &pb.HelloReply{Message: fmt.Sprintf("hostname:%s, in:%s", name, in.Name)}, nil  
}

使用同一個 gRPC 連接發起一次 gRPC 請求,服務端會返回它的 hostname

var (  
   once sync.Once  
   c    pb.GreeterClient  
)  
http.HandleFunc("/grpc_client", func(w http.ResponseWriter, r *http.Request) {  
   once.Do(func() {  
      service := r.URL.Query().Get("name")  
      conn, err := grpc.Dial(fmt.Sprintf("%s:50051", service), grpc.WithInsecure(), grpc.WithBlock())  
      if err != nil {  
         log.Fatalf("did not connect: %v", err)  
      }  
      c = pb.NewGreeterClient(conn)  
   })  
  
   // Contact the server and print out its response.  
   name := "world"  
   ctx, cancel := context.WithTimeout(context.Background(), time.Second)  
   defer cancel()  
   g, err := c.SayHello(ctx, &pb.HelloRequest{Name: name})  
   if err != nil {  
      log.Fatalf("could not greet: %v", err)  
   }  
   fmt.Fprint(w, fmt.Sprintf("Greeting: %s", g.GetMessage()))  
})

創建一個 service 用于給 gRPC 提供域名:

apiVersion: v1  
kind: Service  
metadata:  
  name: native-tools-2
spec:  
  selector:  
    app: native-tools-2
  ports:  
    - name: http  
      port: 8081  
      targetPort: 8081  
    - name: grpc  
      port: 50051  
      targetPort: 50051

同時將我們的 gRPC server 部署三個節點,再部署了一個客戶端節點:

? k get pod
NAME                                READY   STATUS    RESTARTS
native-tools-2-d6c454689-52wgd      1/1     Running   0              
native-tools-2-d6c454689-67rx4      1/1     Running   0              
native-tools-2-d6c454689-zpwxt      1/1     Running   0              
native-tools-65c5bd87fc-2fsmc       2/2     Running   0

我們進入客戶端節點執行多次 grpc 請求:

k exec -it native-tools-65c5bd87fc-2fsmc bash
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2
Greeting: hostname:native-tools-2-d6c454689-zpwxt, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

會發現每次請求的都是同一個節點 native-tools-2-d6c454689-zpwxt,這也就證明了在 kubernetes 中直接使用 gRPC 負載是不均衡的,一旦連接建立后就只能將請求發往那個節點。

使用 Istio

Istio 可以拿來解決這個問題,我們換到一個注入了 Istio 的 namespace 下還是同樣的 代碼,同樣的 service 資源進行測試。

關于開啟 namespace 的 Istio 注入會在后續更新,現在感興趣的可以查看下官方文檔:https://istio.io/latest/docs/setup/additional-setup/sidecar-injection/

Greeting: hostname:native-tools-2-5fbf46cf54-5m7dl, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-xprjz, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-5m7dl, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-5m7dl, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-xprjz, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-xprjz, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-5m7dl, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-5m7dl, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-nz8h5, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

Greeting: hostname:native-tools-2-5fbf46cf54-nz8h5, in:worldistio-proxy@n:/$ curl http://127.0.0.1:8081/grpc_client?name=native-tools-2

可以發現同樣的請求已經被負載到了多個 server 后端,這樣我們就可以不再單獨維護一個客戶端 SDK 的情況下實現了負載均衡。

原理

其實本質上 Istio 也是客戶端負載均衡的一種實現。

圖片圖片

以 Istio 的架構圖為例:

  • 每一個 Pod 下會新增一個 Proxy 的 container,所有的流量入口和出口都會經過它。
  • 它會從控制平面 Istiod 中拿到服務的注冊信息,也就是 kubernetes 中的 service。
  • 發生請求時由 proxy 容器中的 Envoy 進行最終的負載請求。

可以在使用了 Istio 的 Pod 中查看到具體的容器:

? k get pod native-tools-2-5fbf46cf54-5m7dl -n istio-test-2 -o json | jq '.spec.containers[].name'
"istio-proxy"
"native-tools-2"

可以發現這里存在一個 istio-proxy 的容器,也就是我們常說的 sidecar,這樣我們就可以把原本的 SDK 里的功能全部交給 Istio 去處理。

總結

當然 Istio 的功能遠不止于此,比如:

  • 統一網關,處理東西、南北向流量。
  • 灰度發布
  • 流量控制
  • 接口粒度的超時配置
  • 自動重試等

這次只是一個開胃菜,更多關于 Istio 的內容會在后續更新,比如會從如何在 kubernetes 集群中安裝 Istio 講起,帶大家一步步使用好 Istio。

本文相關源碼:https://github.com/crossoverJie/k8s-combat

參考鏈接:

責任編輯:武曉燕 來源: crossoverJie
相關推薦

2023-10-27 12:36:37

gRPCKubernetes

2022-08-31 08:30:32

kubernetesMetalLB

2023-02-13 16:39:45

Kubernetes容器負載均衡器

2018-03-01 14:10:37

Kubernetes負載均衡容器

2010-05-10 17:52:30

實現負載均衡

2023-09-07 13:01:24

Java計算

2022-07-14 08:53:48

MetalLBkubernetes

2013-12-13 09:55:44

VDI負載均衡

2010-05-06 12:18:34

IP負載均衡

2021-07-14 18:21:38

負載均衡K8SgRPC

2022-12-27 07:42:12

2018-06-25 09:54:14

LinuxDNS負載均衡

2022-02-28 18:26:13

KubernetePostgreSQL負載均衡

2021-10-26 10:28:41

開發架構Kubernetes

2010-05-07 12:27:53

nginx負載均衡

2017-07-03 08:08:25

負載均衡分類

2020-11-26 08:46:52

Spinnaker

2023-09-07 11:43:10

2023-09-24 19:17:57

負載均衡網絡

2013-07-25 17:06:37

SQL
點贊
收藏

51CTO技術棧公眾號

精品福利av导航| 亚洲观看高清完整版在线观看| 精品中文字幕久久久久久| 97超碰青青草| 69久久夜色| 成人精品免费看| 91精品国产色综合| 天堂а√在线中文在线鲁大师| 忘忧草在线日韩www影院| 国产日产欧产精品推荐色| 亚洲一区二区免费在线| 国产 日韩 欧美 在线| 色88久久久久高潮综合影院| 亚洲风情亚aⅴ在线发布| 污污网站免费观看| 亚洲一区站长工具| 一区二区三区不卡视频在线观看 | 精品综合在线| 中文字幕一级片| 在线亚洲免费| 美女av一区二区三区| 久久久久久九九九九九| 日韩三级久久| 欧美在线视频全部完| 秋霞无码一区二区| 国产区在线看| 国产精品色哟哟| 久久99蜜桃综合影院免费观看| 国产一级18片视频| 欧美激情1区2区| 一区二区三区回区在观看免费视频| 国产精品欧美激情在线观看| 性直播体位视频在线观看| 日本一二三不卡| 久久99导航| 日本xxxxxwwwww| 国产一区二三区好的| 国产精品久久久久久久久免费| 男人的天堂av网| 免费日韩一区二区三区| 日韩欧美一二三| 亚洲一区二区偷拍| av有声小说一区二区三区| 午夜不卡在线视频| 中国丰满熟妇xxxx性| 1区2区3区在线视频| 亚洲视频一区二区免费在线观看| 成人动漫在线观看视频| 国产99视频在线| 九九**精品视频免费播放| 国产精品美女无圣光视频| 三级网站在线播放| 日韩精品午夜视频| 国产精品视频网址| 亚洲综合一区中| 韩国视频一区二区| 99r国产精品视频| 亚洲精品中文字幕成人片 | 精品久久久久久无码国产| av色在线观看| 懂色av一区二区三区| 18岁网站在线观看| 免费观看亚洲| 欧美午夜精品久久久久久超碰 | 国产精品xxxx| 国产 欧美 精品| 波多野洁衣一区| 国产一区二区三区奇米久涩 | 欧美α欧美αv大片| 亚洲区 欧美区| 伊色综合久久之综合久久| 精品久久久久av影院 | 亚州国产精品视频| 亚洲综合丁香| 国产成人综合亚洲| 亚洲av综合一区| 国产综合成人久久大片91| 99久久自偷自偷国产精品不卡| 免费在线观看av的网站| 美女国产一区二区三区| 91九色国产在线| 农村少妇久久久久久久| 久久久久国产免费免费| 一本一本a久久| 日本在线视频中文有码| 黑人狂躁日本妞一区二区三区| 四虎精品欧美一区二区免费| 国产传媒在线| 欧洲精品视频在线观看| 国产伦精品一区二区三区妓女下载| 男人天堂久久| 精品日韩在线观看| 久久丫精品忘忧草西安产品| 欧美暴力喷水在线| 国产va免费精品高清在线观看| 精品无码人妻一区二区三区| 国产亚洲毛片在线| 亚洲一区二区少妇| 美女欧美视频在线观看免费| 亚洲免费观看视频| 色综合av综合无码综合网站| 国产精品igao视频网网址不卡日韩| 欧美三级电影精品| 性高潮免费视频| 日韩大片在线| 亚州国产精品久久久| 一级黄色录像大片| 91视频精品在这里| 黄色三级中文字幕| 91综合国产| 日韩精品中文字幕在线| 国产黄色的视频| 日韩国产欧美一区二区三区| 国产青春久久久国产毛片| 9色在线视频网站| 精品美女永久免费视频| 日韩欧美中文在线视频| 精品免费av| 国产91精品久久久久久| 精品区在线观看| 国产精品传媒在线| 国产性生交xxxxx免费| 精品中国亚洲| 毛片精品免费在线观看| 亚洲天堂手机版| 国产情人综合久久777777| 人人干视频在线| 日韩精品三级| 久久91精品国产91久久久| 依依成人在线视频| 国产欧美日韩视频一区二区| 日韩精品一区二区三区久久| 成人免费在线电影网| 久久亚洲成人精品| 国产精品高潮呻吟久久久| 欧美精彩视频一区二区三区| 国产av无码专区亚洲精品| 国产亚洲成av人片在线观黄桃| 亚洲女人天堂成人av在线| 久久久久香蕉视频| 国产精品中文有码| 中文字幕精品在线播放| 少妇高潮一区二区三区99| 最好看的2019的中文字幕视频| 老熟妇高潮一区二区三区| 美女视频黄免费的久久 | 午夜美女福利视频| 亚洲欧美日韩系列| 91福利免费观看| 99久久www免费| 成人欧美一区二区三区黑人孕妇 | 97人妻精品视频一区| 91网站最新网址| 女人和拘做爰正片视频| 国产一区丝袜| 欧美在线视频观看| 日韩亚洲视频在线观看| 色综合婷婷久久| 国产精品久久免费观看| 六月丁香婷婷久久| 懂色av一区二区三区四区五区| 日本а中文在线天堂| 日韩高清不卡av| 无码日韩精品一区二区| 中文字幕第一区| 99九九99九九九99九他书对| 中文字幕免费一区二区| 国产精品久久久一区二区三区| 国产福利免费在线观看| 欧美日韩五月天| h色网站在线观看| 成人18视频在线播放| 男人操女人逼免费视频| 久久av中文| 成人免费网站在线观看| 草美女在线观看| 欲色天天网综合久久| 国产裸体永久免费无遮挡| 亚洲国产一区二区视频| 欧美一区二区三区成人精品| 久久精品999| 国产尤物av一区二区三区| 欧美日韩导航| 国产这里只有精品| 97天天综合网| 色诱女教师一区二区三区| 国产刺激高潮av| 91国模大尺度私拍在线视频| 少妇久久久久久被弄高潮| 久久一二三国产| 九九久久久久久| 亚洲精品乱码久久久久久蜜桃麻豆| 999精品视频一区二区三区| 91高清视频在线观看| 一区国产精品视频| 人妻少妇精品无码专区久久| 91黄视频在线观看| 久久精品久久精品久久| 国产精品乱码久久久久久| 亚洲成年人av| 久久99久久久久久久久久久| 日本www在线视频| 久久久久国产精品| 欧美日韩一区在线视频| 午夜精品在线| 国产精品三级网站| 天堂在线中文网官网| 欧美成人精品在线观看| 阿v免费在线观看| 亚洲电影免费观看高清完整版在线| 国产精品99精品| 国产精品久久久久毛片软件| 亚洲制服丝袜在线播放| 国产又黄又大久久| 自拍偷拍一区二区三区四区| 亚洲一区二区网站| 国产一线二线三线女| 91日韩视频| 日韩福利视频| 亚洲性视频大全| 国产日韩在线一区二区三区| 国产亚洲高清一区| 国产日本欧美一区| 免费在线成人激情电影| 欧美专区中文字幕| 嗯~啊~轻一点视频日本在线观看| 日韩精品免费在线播放| 999国产精品视频免费| 欧美视频在线一区二区三区 | 激情在线视频| 欧美精品一区二区三区蜜桃视频| 四虎成人永久免费视频| 亚洲成av人片www| 久草视频在线资源| 亚洲欧洲制服丝袜| 啪啪一区二区三区| 中文字幕不卡在线观看| 特级西西www444人体聚色| xfplay精品久久| 亚洲自拍偷拍一区二区| 91蜜桃婷婷狠狠久久综合9色| 色播五月综合网| 免费的成人av| 五月花丁香婷婷| 捆绑调教一区二区三区| 日本人69视频| 国产麻豆精品视频| 91福利视频免费观看| 国产精品123区| 爱情岛论坛亚洲自拍| 国产一区二区三区四区五区入口| 欧美成人一区二区在线观看| 99精品99| 国产成人精品无码播放| 青娱乐精品在线视频| 亚洲精品性视频| 国内精品在线播放| 26uuu国产| 99在线精品一区二区三区| 黄色正能量网站| 国产精品五月天| 精品国产视频在线观看| 亚洲自拍欧美精品| 国产无人区码熟妇毛片多| 日韩欧中文字幕| 在线视频欧美亚洲| 日韩女优av电影| 日夜干在线视频| 深夜成人在线观看| 里番在线播放| 茄子视频成人在线| 韩国理伦片久久电影网| 99久久精品免费看国产四区 | 青青青草视频在线| 97视频在线观看网址| 日韩免费小视频| 5g国产欧美日韩视频| 色婷婷久久久| 伊人久久大香线蕉午夜av| 国产一在线精品一区在线观看| 日韩福利在线| 一区二区免费不卡在线| 高清在线观看免费| 久久精品久久综合| 免费不卡的av| 国产精品天干天干在线综合| 欧美日韩在线国产| 色哟哟在线观看一区二区三区| 国产亚洲欧美精品久久久久久| 国产精品久久久久一区| 国产一级一级片| 欧美日韩大陆一区二区| 黄色av小说在线观看| 中文字幕亚洲欧美在线| 51精品在线| 成人免费看黄网站| 九九精品在线| 福利视频免费在线观看| 另类中文字幕网| 中文字幕av网址| 亚洲免费成人av| 无码人妻一区二区三区线 | 国产精品一品二区三区的使用体验| 欧美午夜视频网站| 免费a级片在线观看| 在线免费观看羞羞视频一区二区| jyzzz在线观看视频| 亚洲91av视频| 视频二区欧美| 亚洲乱码一区二区三区| 亚洲欧美日韩国产综合精品二区 | 亚洲视频小说| 一区二区三区成人精品| 人妻精品久久久久中文字幕69| 国产精品一区三区| jizz18女人高潮| 欧美视频二区36p| 蜜桃视频污在线观看| 久久天天躁狠狠躁老女人| 国产一区二区三区影视| 欧美日韩国产精品一卡| 亚洲美女色禁图| 99热这里只有精品2| 国产精品福利电影一区二区三区四区| 国产精品白丝喷水在线观看| 91高清在线观看| 韩日视频在线| 91国语精品自产拍在线观看性色| 亚洲不卡系列| 久久精品五月婷婷| 99热精品在线观看| 无码国产精品一区二区免费式直播 | 青青青手机在线视频观看| 久久久免费精品| 影音先锋欧美激情| 男女日批视频在线观看| 国产91精品一区二区| 欧美黑人猛猛猛| 日韩欧美精品三级| 二区在线播放| 91精品久久香蕉国产线看观看 | 先锋影音亚洲资源| 日韩专区一卡二卡| 欧美激情 一区| 欧美日韩一区二区电影| 日本视频在线免费观看| 国产一区二区香蕉| 99久久精品网| 天堂在线精品视频| 亚洲一区在线观看网站| 国产91免费在线观看| 欧美亚洲视频一区二区| 一区三区在线欧| 福利在线一区二区三区| 国产精品灌醉下药二区| 国产毛片一区二区三区va在线| 亚洲欧美另类国产| 免费在线成人激情电影| 日韩最新中文字幕| av一区二区三区四区| 亚洲久久在线观看| 中文字幕日韩专区| 精品国产一级| 欧美一级视频免费看| 国产视频一区二区三区在线观看| 国产在线视频99| 亚洲精品国产成人| av激情成人网| 最新av在线免费观看| 成人免费毛片高清视频| 三级视频在线观看| 最近2019中文免费高清视频观看www99| 黄色软件视频在线观看| 区一区二区三区中文字幕| 精品综合免费视频观看| 69av.com| 亚洲无av在线中文字幕| 亚洲精品福利| 97公开免费视频| 亚洲精品免费电影| 免费理论片在线观看播放老| 成人激情在线播放| 国产日韩欧美一区| 久久精品日韩无码| 亚洲激情视频在线| 成人mm视频在线观看| 国产精品国产三级国产专区51| 国产又粗又猛又爽又黄的| 欧美成人激情视频| 国产精品午夜一区二区三区| 日本成人在线免费观看| 一本色道综合亚洲| 在线观看免费视频你懂的| 日韩精品一区二区三区色偷偷| 久久久777| 久久av高潮av无码av喷吹| 国产亚洲一级高清| 超碰在线成人| 亚洲黄色av片| 在线免费观看视频一区|