精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本欧美黄网站| 亚洲第一中文字幕| 大陆极品少妇内射aaaaaa| 亚洲精品成av人片天堂无码| 亚洲制服av| 中文字幕国产亚洲2019| 亚洲欧美激情一区二区三区| 黑人巨大亚洲一区二区久| 成人欧美一区二区三区在线播放| 99国产高清| 在线免费观看国产精品| 欧美国产免费| 一区二区欧美日韩视频| 年下总裁被打光屁股sp| aaaa欧美| 香蕉成人伊视频在线观看| 亚洲欧美影院| 五月婷婷六月色| 国产在线播放一区二区三区| 欧洲成人在线观看| 久久久久亚洲av无码专区体验| 九一国产精品| 精品国产91亚洲一区二区三区婷婷 | 中文天堂在线一区| http;//www.99re视频| 国产精品成人久久久| 99riav1国产精品视频| 久久资源免费视频| 91激情视频在线观看| 精品素人av| 正在播放亚洲一区| 日本成人黄色网| 麻豆免费在线| 一级日本不卡的影视| 亚洲第一综合| 黄色av免费在线观看| 成人av在线影院| 91在线精品播放| 91成品人影院| 麻豆成人综合网| 国产成人精品在线播放| 日本三级黄色大片| 亚洲天堂久久| 欧美另类暴力丝袜| 亚洲av无码一区二区三区在线| 日韩成人a**站| 免费看男男www网站入口在线 | 久久久在线观看| 一级黄色录像视频| 一区二区三区国产精华| 色婷婷综合久久久久| 一级片久久久久| 精品国产91久久久久久浪潮蜜月| 精品无人国产偷自产在线| 午夜视频在线观看国产| 国产精品久久久网站| 亚洲成人av中文字幕| 一级全黄裸体片| 视频在线观看免费影院欧美meiju| 欧美一区二区三区四区在线观看| 中文字幕视频三区| 性欧美video另类hd尤物| 欧美日韩精品一区二区天天拍小说 | 国产精品精品软件视频| 亚洲精品字幕在线观看| 成人免费毛片嘿嘿连载视频| 国产一区二区三区高清| 少妇喷水在线观看| 2021中文字幕一区亚洲| 日韩av电影免费在线| 国产在线超碰| 国产精品不卡在线观看| 欧美日韩中文字幕在线播放| 午夜小视频在线观看| 亚洲成人免费看| 国产超级av在线| 成人国产激情在线| 91精品在线观看入口| 特级特黄刘亦菲aaa级| 日韩av资源网| 中国人与牲禽动交精品| 神马久久精品综合| 在线日韩欧美| 国产精品久久久久久久午夜| 国产精品视频一二区| 粉嫩嫩av羞羞动漫久久久| 精品欧美一区二区精品久久| 大乳在线免费观看| 亚洲人成网站在线| 无码aⅴ精品一区二区三区浪潮| 成人日韩av| 精品国产在天天线2019| 中文字幕国产综合| 五月婷婷亚洲| 欧美制服第一页| 91精品中文字幕| 成人精品一区二区三区四区| 欧美一进一出视频| 18+激情视频在线| 色综合久久88色综合天天| 国内自拍第二页| 亚洲精品一级二级三级| 久久天天躁日日躁| www.国产毛片| 粉嫩av亚洲一区二区图片| 日韩精品一区二区三区四区五区| 18+视频在线观看| 在线观看一区二区视频| 久久久无码人妻精品无码| 精品国产成人| 性欧美暴力猛交69hd| 一炮成瘾1v1高h| 91污在线观看| 香港三级日本三级a视频| 欧亚一区二区| 日韩av在线免费看| 精品99久久久久成人网站免费| 日韩和欧美的一区| 国内精品久久国产| 在线观看三级视频| 欧美日韩精品三区| 香蕉网在线播放| 亚洲二区精品| 91免费观看| 在线观看h片| 日本精品免费观看高清观看| 人妻换人妻a片爽麻豆| 欧美在线首页| 91精品国产综合久久香蕉的用户体验 | 亚洲品质视频自拍网| 日本三级中文字幕| 丰满岳乱妇一区二区三区| 宅男av一区二区三区| 亚洲mmav| 亚洲午夜久久久久久久| jizz国产在线观看| 91麻豆国产精品久久| 丝袜人妻一区二区三区| 午夜日韩影院| 操91在线视频| 国产av一区二区三区精品| 中文字幕在线不卡| 国产3p在线播放| 99精品视频在线观看免费播放| 国产精品白嫩美女在线观看| 精品美女视频在线观看免费软件| 精品欧美aⅴ在线网站 | 成人免费视频在线观看| www.激情小说.com| 日韩精品看片| 成人精品在线观看| 成人午夜在线影视| 日韩一级大片在线观看| 亚洲国产成人精品综合99| 国产精品一区二区三区四区| 女人床在线观看| 亚洲成人黄色| 91精品国产91久久| 男操女在线观看| 欧美中文字幕久久| 国产黄色片在线| 韩日av一区二区| 日韩精品手机在线观看| 超碰成人免费| 68精品国产免费久久久久久婷婷| 深夜福利视频一区| 在线免费亚洲电影| 福利视频第一页| 国产又黄又大久久| 久久综合久久网| 香蕉精品久久| 国产乱人伦真实精品视频| 思思99re6国产在线播放| 3atv一区二区三区| 国产无遮挡又黄又爽在线观看| 97精品久久久午夜一区二区三区 | 超碰超碰人人人人精品| 伊人久久久久久久久久久久久| 中文字幕一区2区3区| 亚洲婷婷在线视频| 成熟妇人a片免费看网站| 久热精品视频| 一级黄色录像免费看| 久久99国产精品久久99大师| 国产精品69久久| 黄网站免费在线播放| 亚洲激情视频在线观看| 最近中文字幕av| 一区二区高清视频在线观看| 毛片网站免费观看| 国产一区不卡在线| 成年人观看网站| 一区二区影院| 欧美色图亚洲自拍| 国产精品一区二区美女视频免费看 | 毛片不卡一区二区| 国产精品无码免费专区午夜| 精品免费在线| 成人av资源| av久久网站| 久久人人爽国产| av在线女优影院| 亚洲国产美女久久久久| 一区二区三区免费观看视频| 亚洲一区二区三区国产| 欧美午夜激情影院| av在线播放一区二区三区| 自拍偷拍21p| 在线亚洲一区| 欧美少妇在线观看| 欧美精选视频在线观看| 国产综合18久久久久久| 精品国产鲁一鲁****| 日韩av大片免费看| 羞羞网站在线看| 在线观看国产精品日韩av| 少妇av在线播放| 日韩欧美你懂的| 91在线公开视频| 欧美在线看片a免费观看| 男女啊啊啊视频| 亚洲卡通动漫在线| 999久久久国产| 久久久.com| 国产又黄又粗又猛又爽的视频| 国内一区二区视频| 孩娇小videos精品| 日欧美一区二区| 精品国产一区三区| 亚洲性视频h| 中国女人做爰视频| 99热在线成人| 亚洲综合首页| 成人精品影院| 日本一区视频在线| 久久综合欧美| 欧美国产一二三区| 中文有码一区| 蜜桃成人免费视频| 日日狠狠久久偷偷综合色| 国产一区二区中文字幕免费看| 91精品入口| 成人国产1314www色视频| 精品一区91| www久久99| 97se亚洲| 国内一区在线| 亚洲精华一区二区三区| 欧美极品一区| 中文字幕亚洲影视| 欧美一区二区三区成人久久片| 亚洲精品国产精品粉嫩| 久久久久久久免费| 欧美猛男男男激情videos| 欧美人与性禽动交精品| 精品1卡二卡三卡四卡老狼| 小h片在线观看| 久久久久久久色| 国模私拍视频在线播放| 欧美极品欧美精品欧美视频| 欧美人体视频xxxxx| 欧美精品激情blacked18| 美洲精品一卡2卡三卡4卡四卡| 色综合久久88色综合天天看泰| 国内小视频在线看| 国产做受高潮69| 精精国产xxxx视频在线播放| 欧美一级电影在线| 国产 日韩 欧美一区| 国产精品欧美久久久| 日韩免费在线电影| 91在线视频成人| 日韩一二三区在线观看| 精品不卡一区二区三区| 日韩欧美国产大片| 天天综合色天天综合色hd| 欧美国产小视频| 青青视频免费在线观看| 亚洲每日更新| 日韩肉感妇bbwbbwbbw| 国产一区二区三区不卡在线观看| 亚洲欧美综合视频| 久久久久久97三级| 久久久久久久麻豆| 亚洲 欧美综合在线网络| 波多野结衣一区二区三区四区| 欧美精品粉嫩高潮一区二区| 国精产品乱码一区一区三区四区| 亚洲精品丝袜日韩| 黄网页免费在线观看| 亚洲伊人色欲综合网| 色姑娘综合网| 欧美日韩综合| 91视频免费版污| 国产a区久久久| 亚洲AV无码成人精品区明星换面| 自拍偷拍欧美精品| 亚洲影院在线播放| 日韩一区二区免费电影| 九九热视频在线观看| 欧美剧在线观看| 欧美色片在线观看| 精品不卡一区二区三区| 99久久夜色精品国产亚洲96| 久久久久久久久久久99| 国内成人精品2018免费看| 亚洲最大成人网站| 亚洲影视资源网| 91女人18毛片水多国产| 亚洲精品自拍视频| 亚洲小说区图片| 国产精品一区久久| 亚洲小说图片视频| 免费拍拍拍网站| 国产一区二区三区在线观看免费视频 | 国产无遮挡免费视频| 884aa四虎影成人精品一区| 欧洲一区av| 韩国三级电影久久久久久| 久久av偷拍| 一区二区三区国产福利| 日韩和欧美一区二区三区| 日本免费福利视频| 亚洲一区在线电影| 国产极品999| 久久精品国产成人| 99热播精品免费| 日韩片电影在线免费观看| 99日韩精品| 亚洲精品国产成人av在线| 亚洲女同ⅹxx女同tv| 在线观看中文字幕网站| 亚洲图片欧美日产| 亚洲校园激情春色| 久99久视频| 一本一本久久| 欧美肉大捧一进一出免费视频| 亚洲精品久久久蜜桃| 国产强伦人妻毛片| 久久综合色影院| 国产精品亚洲欧美日韩一区在线| 亚洲啪啪av| 久久精品久久精品| 日韩av网站在线播放| 欧美日韩五月天| 在线观看的av| 成人激情视频小说免费下载| 爽成人777777婷婷| 国产色视频在线播放| 国产精品二三区| 国产美女免费看| 欧美老女人性生活| 亚洲一区二区三区四区电影| 欧美一级免费播放| 99re视频精品| 日本一区二区免费电影| 亚洲色图综合网| 78精品国产综合久久香蕉| 亚洲欧洲精品一区二区三区波多野1战4| 久久青草久久| 国产成人福利在线| 欧美色图第一页| av在线下载| 国产精品一区二区免费| 亚洲中字黄色| 久久精品三级视频| 欧美一区二区美女| 6699嫩草久久久精品影院| 蜜桃视频在线观看成人| 日本伊人色综合网| 久草综合在线视频| 亚洲大胆人体av| 人人视频精品| 中文字幕剧情在线观看一区| 国产精品一区二区黑丝| 日韩大片免费在线观看| 国产亚洲精品一区二区| 伊人国产精品| 日韩小视频在线播放| 欧美—级在线免费片| 国产原创中文av| 国内外成人免费激情在线视频网站 | av手机在线观看| 神马一区二区影院| 国产成人在线免费| 国产suv精品一区二区33| 麻豆乱码国产一区二区三区 | 亚洲精品不卡在线| 99久久久国产精品免费调教网站| 免费极品av一视觉盛宴| 久久久一区二区| 亚洲第一成年人网站| 日韩免费观看视频| 欧美三级视频| 永久免费毛片在线观看| 亚洲精品一区二区在线观看| 视频精品导航| 欧美老熟妇喷水| 亚洲欧美一区二区三区久本道91| 欧洲毛片在线|