目錄
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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1653
14
CakePHP 教程
1413
52
Laravel 教程
1304
25
PHP教程
1251
29
C# 教程
1224
24
Golang中使用gRPC實現並發資料傳輸的最佳實踐 Golang中使用gRPC實現並發資料傳輸的最佳實踐 Jul 18, 2023 pm 10:17 PM

Golang中使用gRPC實現並發資料傳輸的最佳實踐引言:隨著雲端運算和大數據技術的發展,資料傳輸的需求越來越迫切。而gRPC作為Google開源的高效能遠端過程呼叫框架,以其高效、靈活和跨語言的特性,成為了許多開發者選擇的首選。本文將介紹如何在Golang中使用gRPC實現並發資料傳輸的最佳實踐,包括工程結構的搭建、連接池的使用和錯誤處理等。一、搭建工程結構在開始使

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

如何使用gRPC實作檔案上傳?建立配套服務定義,包括請求和回應訊息。在客戶端,開啟要上傳的檔案並將其分成區塊,然後透過gRPC串流傳輸到服務端。在服務端,接收文件區塊並將其儲存到文件中。服務端在文件上傳完成後發送回應,指示上傳是否成功。

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

Golang中使用gRPC實現資料加密的最佳實踐引言:在當今資訊安全高度重視的時代,保護資料的安全性變得越來越重要。而在分散式系統中,如何確保資料在網路傳輸過程中的安全性,是必須關注的問題。 gRPC是一種高效能、跨語言的遠端過程呼叫框架,它透過使用ProtocolBuffers進行資料序列化和傳輸,並支援TLS/SSL加密傳輸,從而可以提供更高的資料安

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

隨著網路規模的不斷擴大以及用戶需求的不斷增加,微服務架構的優勢越來越受到重視。隨之而來的是,容器化的微服務架構也變得特別重要,它可以更好地滿足高可用性、高效能、高擴充性等方面的需求。而在這個趨勢下,go-zero和Kubernetes成為了最受歡迎的容器化微服務框架。本文將介紹如何使用go-zero框架和Kubernetes容器編排工具來建構高可用性、高效能

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

隨著網路的快速發展,越來越多的企業開始將應用程式遷移到雲端平台。而在雲端平台上進行應用程式的部署和管理,Docker和Kubernetes已經成為了兩種非常流行且強大的工具。 Beego是使用Golang開發的Web框架,它提供了諸如HTTP路由、MVC分層、日誌記錄、設定管理、Session管理等豐富的功能。在本文中,我們將介紹如何使用Docker和Kub

如何利用React和Kubernetes來建構可靠的容器化應用 如何利用React和Kubernetes來建構可靠的容器化應用 Sep 26, 2023 am 09:07 AM

如何利用React和Kubernetes建立可靠的容器化應用隨著雲端原生技術的快速發展,容器化應用成為了當今軟體開發的熱門趨勢。而React作為一個流行的前端框架,它的靈活性和高效性使得它成為了許多開發者首選。本文將介紹如何利用React和Kubernetes來建立可靠的容器化應用,並提供一些具體的程式碼範例。在創建React應用程式首先,我們需要建立一個基本的Reac

PHP gPRC 進階之道:深入剖析 gPRC 的核心機制 PHP gPRC 進階之道:深入剖析 gPRC 的核心機制 Feb 21, 2024 am 09:57 AM

前言:grpc(grpcRemoteProcedureCalls)是一種現代化的高效能遠端過程呼叫框架,廣泛應用於微服務架構和分散式系統的通訊。如果你已經對gRPC的基礎知識有所了解,那麼這篇進階指南將帶你深入探討其核心機制,幫助你掌握gRPC的精髓,充分發揮其效能優勢。服務端串流處理:gRPC支援服務端串流處理,允許伺服器端向客戶端傳送一系列訊息流。在PHP中,可以使用ServerWriter或ServerCallWriter建立服務端串流式。以下是一個示範發送5個訊息的程式碼:namespace

Redis在Kubernetes的應用詳解 Redis在Kubernetes的應用詳解 Jun 20, 2023 am 11:17 AM

Kubernetes是一個現代化的容器編排系統,其強大的伸縮性和可靠性對於開發和維運人員來說無疑是非常重要的。其中一個關鍵的應用是Redis,作為一個高效能快取和資料庫的組合,Redis在Kubernetes的應用也越來越受到重視。本文將詳細介紹Redis在Kubernetes中的應用,透過實際案例來說明如何在Kubernetes平台上部署、管理、監控Re

See all articles