日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
分析KubernetesgRPC負(fù)載均衡(L4vsL7)

本文由go語言教程欄目給大家介紹Kubernetes中的gRPC負(fù)載均衡 ,希望對(duì)需要的朋友有所幫助!

創(chuàng)新互聯(lián)是專業(yè)的中寧網(wǎng)站建設(shè)公司,中寧接單;提供網(wǎng)站制作、網(wǎng)站建設(shè),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行中寧網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!

安裝環(huán)境依賴

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

下載安裝 Docker Desktop ,并啟動(dòng)內(nèi)置的 Kubernetes 集群。

# 安裝 Gobrew install go# 安裝 Protobufbrew install protobuf# 安裝 Istiobrew install istioctl
kubectl config use-context docker-desktop
istioctl install -y

項(xiàng)目地址

github.com/jxlwqq/grpc-lb

拉取代碼:

git clone git@github.com:jxlwqq/grpc-lb.gitcd grpc-lb

Makefile 介紹

命令 說明
make init 安裝 protoc-gen-go 和 protoc-gen-grpc
make protoc 基于 proto 文件,生成 *_pb.go 和 *_grpc.pb.go
make docker-build 構(gòu)建 docker 鏡像
make kube-deploy 在集群中部署服務(wù)
make kube-delete 刪除服務(wù)
make istio-inject 注入 Istio 邊車

具體邏輯,請(qǐng)查看 Makefile 文件。

L4 vs L7 負(fù)載均衡

所謂的四層就是基于 IP + 端口的負(fù)載均衡,而七層就是基于 URL 等應(yīng)用層信息的負(fù)載均衡; Kubernetes 內(nèi)置的 Service 負(fù)載均衡基于 iptables/ipvs 實(shí)現(xiàn),僅支持 L4。換句話說, Service 支持 HTTP/1.1 協(xié)議,不支持 HTTP/2 協(xié)議。

而 Envoy(Istio) 則更為全能,支持被 gRPC 請(qǐng)求和響應(yīng)的作為路由和負(fù)載均衡底層的所有 HTTP/2 功能。

項(xiàng)目架構(gòu)

本項(xiàng)目分別測(cè)試 Service 和 Envoy(Istio) 對(duì) HTTP/RPC 負(fù)載均衡的支持情況。

  • cmd/server/main.go: 服務(wù)端,同時(shí)提供 HTTP 和 RPC 服務(wù)。響應(yīng)的數(shù)據(jù)為服務(wù)端容器所在的 Pod 名稱,(基于 Downward API)。
  • cmd/client-http/main.go: HTTP 客戶端,通過 HTTP 方式,循環(huán)調(diào)用服務(wù)端接口,并打印返回值。
  • cmd/client-grpc/main.go: gRPC 客戶端,通過 RPC 方式,循環(huán)遠(yuǎn)程調(diào)用服務(wù)端方法,并打印返回值。

測(cè)試原理

服務(wù)端 server 在 Kubernetes 集群中以 Deployment 的方式部署 3 個(gè)副本,3 個(gè)副本的 Pod 名稱各不相同,而 client-http 和 client-grpc 則會(huì)每秒調(diào)用一次服務(wù)端,并打印返回值。如果返回值中,三個(gè) Pod 的名稱都存在,則表明正在進(jìn)行有效的負(fù)載均衡,否則,則表明未進(jìn)行有效的負(fù)載均衡。

測(cè)試 Service

構(gòu)建鏡像:

make docker-build # 構(gòu)建鏡像(構(gòu)建好的鏡像,不 push 到遠(yuǎn)程倉(cāng)庫(kù)中)

查看鏡像:

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  # 在集群中部署服務(wù)

查看 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 請(qǐng)求在進(jìn)行有效負(fù)載,而 RPC 請(qǐng)求在進(jìn)行無效負(fù)載。

測(cè)試 Envoy(Istio)

我們?cè)诩褐幸呀?jīng)部署了一個(gè) Istio,但是沒有設(shè)置自動(dòng)注入的命令空間,所以我們?cè)谶@里進(jìn)行手動(dòng)注入。

手動(dòng)注入:

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

清理

make kube-delete
istioctl experimental uninstall --purge

當(dāng)前題目:分析KubernetesgRPC負(fù)載均衡(L4vsL7)
文章路徑:http://www.5511xx.com/article/cohsihp.html