目錄
L4 vs L7 負載平衡" >L4 vs L7 負載平衡
專案架構" >專案架構
測試原理" >測試原理
測試Service" >測試Service
測試 Envoy(Istio)" >測試 Envoy(Istio)
首頁 後端開發 Golang 分析Kubernetes gRPC負載平衡(L4 vs L7 )

分析Kubernetes gRPC負載平衡(L4 vs L7 )

Nov 16, 2021 pm 02:53 PM
grpc kubernetes

本文由go語言教學專欄為大家介紹Kubernetes中的gRPC負載平衡 ,希望對需要的朋友有幫助!

安裝環境依賴

  • docker-desktop >= 4.1.1
  • kubernetes >= 1.21.5
  • go >= 1.17
  • protobuf >= 3.17.3
  • istioctl >= 1.11.4

下載安裝Docker Desktop ,並啟動內建的Kubernetes 叢集。

# 安装 Gobrew install go# 安装 Protobufbrew install protobuf# 安装 Istiobrew install istioctl
kubectl config use-context docker-desktop
istioctl install -y
登入後複製

專案位址

github.com/jxlwqq/grpc-lb

拉取程式碼:

git clone git@github.com:jxlwqq/grpc-lb.gitcd grpc-lb
登入後複製

Makefile 介紹

安裝protoc-gen-go 和protoc-gen-grpc基於proto文件,產生*_pb.go 和*_grpc.pb.go建構docker 映像在叢集中部署服務#刪除服務#注入Istio 邊車
指令 說明
##make init
make protoc
#make docker-build
make kube-deploy
make kube-delete
make istio-inject
#具體邏輯,請查看Makefile 檔案。

所謂的四層就是基於IP 連接埠的負載平衡,而七層就是基於URL 等應用層資訊的負載平衡;Kubernetes內建的Service 負載平衡基於iptables/ipvs 實現,僅支援L4。換句話說, Service 支援 HTTP/1.1 協議,不支援 HTTP/2 協定。

而 Envoy(Istio) 則更為全能,支援被 gRPC 請求和回應的所有作為路由和負載平衡底層的 HTTP/2 功能。

本專案分別測試 Service 和 Envoy(Istio) 對 HTTP/RPC 負載平衡的支援情況。

    cmd/server/main.go: 服務端,同時提供 HTTP 和 RPC 服務。回應的資料為服務端容器所在的 Pod 名稱,(基於 Downward API)。
  • cmd/client-http/main.go: HTTP 用戶端,透過 HTTP 方式,循環呼叫服務端接口,並列印返回值。
  • cmd/client-grpc/main.go: gRPC 用戶端,透過 RPC 方式,循環遠端呼叫服務端方法,並列印回傳值。
服務端server 在Kubernetes 叢集中以Deployment 的方式部署3 個副本,3 個副本的Pod 名稱各不相同,而client-http 和client-grpc 則會每秒呼叫一次服務端,並列印回傳值。如果傳回值中,三個 Pod 的名稱都存在,則表示正在進行有效的負載平衡,否則,則表示未進行有效的負載平衡。

建置映像:

make docker-build # 构建镜像(构建好的镜像,不 push 到远程仓库中)
登入後複製
檢視鏡像:

docker images ls
登入後複製
返回:

REPOSITORY            TAG       IMAGE ID       CREATED          SIZE
grpc-lb/client-grpc   latest    95d32ead8d9b   12 seconds ago   16.6MB
grpc-lb/client-http   latest    dbf0341206f6   22 seconds ago   11.5MB
grpc-lb/server        latest    1ef346785b2a   29 seconds ago   18.2MB
登入後複製
部署到叢集中:

make kube-deploy  # 在集群中部署服务
登入後複製
查看Pod:

kubectl get pods
登入後複製
登入後複製
返回:

NAME                           READY   STATUS    RESTARTS   AGE
client-grpc-6c565594f4-tdf75   1/1     Running   0          2m48s
client-http-55d95c744d-f7nx4   1/1     Running   0          2m49s
server-7c4bfd74d-29c69         1/1     Running   0          2m51s
server-7c4bfd74d-4btvw         1/1     Running   0          2m51s
server-7c4bfd74d-fk8zf         1/1     Running   0          2m51s
登入後複製
查看client-http Pod 的日誌:

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
登入後複製
登入後複製
傳回:

#1: server-7c4bfd74d-4btvw#2: server-7c4bfd74d-4btvw#3: server-7c4bfd74d-29c69#4: server-7c4bfd74d-fk8zf#5: server-7c4bfd74d-fk8zf#6: server-7c4bfd74d-29c69#7: server-7c4bfd74d-fk8zf#8: server-7c4bfd74d-4btvw#9: server-7c4bfd74d-fk8zf
登入後複製
查看client-grpc Pod 的日誌:

export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
登入後複製
登入後複製
返回:

#1: server-7c4bfd74d-fk8zf#2: server-7c4bfd74d-fk8zf#3: server-7c4bfd74d-fk8zf#4: server-7c4bfd74d-fk8zf#5: server-7c4bfd74d-fk8zf#6: server-7c4bfd74d-fk8zf#7: server-7c4bfd74d-fk8zf#8: server-7c4bfd74d-fk8zf#9: server-7c4bfd74d-fk8zf
登入後複製
可以看出,HTTP 請求在進行有效負載,而RPC 請求在進行無效負載。

我們在叢集中已經部署了一個 Istio,但沒有設定自動注入的命令空間,所以我們在這裡進行手動注入。

手動注入:

make istio-inject # 注入 Istio 边车
登入後複製
查看Pod:

kubectl get pods
登入後複製
登入後複製
返回:

NAME                           READY   STATUS    RESTARTS   AGE
client-grpc-7864f57779-f6blx   2/2     Running   0          17s
client-http-f8964854c-jclkd    2/2     Running   0          21s
server-7846bd6bb4-bcfws        2/2     Running   0          27s
server-7846bd6bb4-fv29s        2/2     Running   0          40s
server-7846bd6bb4-hzqj6        2/2     Running   0          34s
登入後複製
查看client-http Pod 的日誌:

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
登入後複製
登入後複製
返回:

#1: server-7846bd6bb4-hzqj6#2: server-7846bd6bb4-fv29s#3: server-7846bd6bb4-hzqj6#4: server-7846bd6bb4-hzqj6#5: server-7846bd6bb4-hzqj6#6: server-7846bd6bb4-hzqj6#7: server-7846bd6bb4-hzqj6#8: server-7846bd6bb4-bcfws#9: server-7846bd6bb4-fv29s
登入後複製
查看client-grpc Pod 的日誌:

export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
登入後複製
登入後複製
返回:

#1: server-7846bd6bb4-fv29s#2: server-7846bd6bb4-hzqj6#3: server-7846bd6bb4-fv29s#4: server-7846bd6bb4-bcfws#5: server-7846bd6bb4-fv29s#6: server-7846bd6bb4-hzqj6#7: server-7846bd6bb4-fv29s#8: server-7846bd6bb4-bcfws#9: server-7846bd6bb4-fv29s
登入後複製
可以看出,HTTP 請求和RPC 請求都在進行有效負載。

清理
make kube-delete
istioctl experimental uninstall --purge
登入後複製

以上是分析Kubernetes gRPC負載平衡(L4 vs L7 )的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在 Golang 中使用 gRPC 實作檔案上傳? 如何在 Golang 中使用 gRPC 實作檔案上傳? Jun 03, 2024 pm 04:54 PM

如何在 Golang 中使用 gRPC 實作檔案上傳?

Golang中使用gRPC實現並發資料傳輸的最佳實踐 Golang中使用gRPC實現並發資料傳輸的最佳實踐 Jul 18, 2023 pm 10:17 PM

Golang中使用gRPC實現並發資料傳輸的最佳實踐

go-zero與Kubernetes的實踐:建構高可用性、高效能、高擴充性的容器化微服務架構 go-zero與Kubernetes的實踐:建構高可用性、高效能、高擴充性的容器化微服務架構 Jun 22, 2023 am 09:26 AM

go-zero與Kubernetes的實踐:建構高可用性、高效能、高擴充性的容器化微服務架構

在Beego中使用Docker和Kubernetes進行生產部署和管理 在Beego中使用Docker和Kubernetes進行生產部署和管理 Jun 23, 2023 am 08:58 AM

在Beego中使用Docker和Kubernetes進行生產部署和管理

如何在PHP中使用gRPC處理高併發API 如何在PHP中使用gRPC處理高併發API Jun 17, 2023 pm 04:46 PM

如何在PHP中使用gRPC處理高併發API

如何使用Java開發一個基於Spring Cloud Kubernetes的容器編排應用 如何使用Java開發一個基於Spring Cloud Kubernetes的容器編排應用 Sep 20, 2023 am 11:15 AM

如何使用Java開發一個基於Spring Cloud Kubernetes的容器編排應用

Golang中使用gRPC實現資料加密的最佳實踐 Golang中使用gRPC實現資料加密的最佳實踐 Jul 19, 2023 pm 03:17 PM

Golang中使用gRPC實現資料加密的最佳實踐

在Go語言中使用Google Kubernetes Engine(GKE):完整指南 在Go語言中使用Google Kubernetes Engine(GKE):完整指南 Jun 17, 2023 pm 01:25 PM

在Go語言中使用Google Kubernetes Engine(GKE):完整指南

See all articles