Rumah > pembangunan bahagian belakang > Golang > Menganalisis pengimbangan beban gRPC Kubernetes (L4 lwn L7)

Menganalisis pengimbangan beban gRPC Kubernetes (L4 lwn L7)

藏色散人
Lepaskan: 2021-11-16 14:53:48
ke hadapan
2372 orang telah melayarinya

Artikel ini diperkenalkan oleh ruangan tutorial go language untuk memperkenalkan pengimbangan beban gRPC di Kubernetes. Saya harap ia dapat membantu rakan yang memerlukan.

Kebergantungan persekitaran pemasangan

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

Muat turun dan pasang Desktop Docker dan mulakan kluster Kubernetes terbina dalam.

# 安装 Gobrew install go# 安装 Protobufbrew install protobuf# 安装 Istiobrew install istioctl
kubectl config use-context docker-desktop
istioctl install -y
Salin selepas log masuk

Alamat projek

github.com/jxlwqq/grpc-lb

Tarik kod:

git clone git@github.com:jxlwqq/grpc-lb.gitcd grpc-lb
Salin selepas log masuk

Pengenalan Makefile

命令 说明
make init 安装 protoc-gen-go 和 protoc-gen-grpc
make protoc 基于 proto 文件,生成 *_pb.go 和 *_grpc.pb.go
make docker-build 构建 docker 镜像
make kube-deploy 在集群中部署服务
make kube-delete 删除服务
make istio-inject 注入 Istio 边车

Untuk logik tertentu, sila lihat fail Makefile.

L4 vs L7 pengimbangan beban

Lapisan empat yang dipanggil ialah pengimbangan beban berdasarkan port IP, manakala lapisan tujuh ialah pengimbangan beban berdasarkan maklumat lapisan aplikasi seperti URL; Kubernetes Pengimbangan beban Perkhidmatan terbina dalam adalah berdasarkan iptables/ipvs dan hanya menyokong L4. Dengan kata lain, Perkhidmatan menyokong protokol HTTP/1.1 tetapi tidak menyokong protokol HTTP/2.

Envoy (Istio) lebih serba boleh dan menyokong semua fungsi HTTP/2 yang diminta dan dibalas oleh gRPC sebagai penghalaan asas dan pengimbangan beban.

Seni Bina Projek

Projek ini menguji sokongan Perkhidmatan dan Utusan (Istio) untuk pengimbangan beban HTTP/RPC masing-masing.

  • cmd/server/main.go: Pelayan, menyediakan kedua-dua perkhidmatan HTTP dan RPC. Data tindak balas ialah nama Pod di mana bekas pelayan berada (berdasarkan API Ke Bawah).
  • cmd/client-http/main.go: Pelanggan HTTP, melalui kaedah HTTP, memanggil antara muka pelayan secara kitaran dan mencetak nilai pulangan.
  • cmd/client-grpc/main.go: klien gRPC, melalui mod RPC, menggelung untuk memanggil kaedah pelayan dari jauh dan mencetak nilai pulangan.

Prinsip Pengujian

Pelayan menggunakan 3 salinan dalam gugusan Kubernetes dalam bentuk Deployment Nama Pod bagi 3 salinan adalah berbeza, dan klien -http dan klien-grpc akan memanggil pelayan sekali setiap saat dan mencetak nilai pulangan. Jika ketiga-tiga nama Pod wujud dalam nilai pulangan, ini menunjukkan bahawa pengimbangan beban yang berkesan sedang dilakukan, sebaliknya, ini menunjukkan bahawa pengimbangan beban yang berkesan tidak dilakukan.

Perkhidmatan Ujian

Membina imej:

make docker-build # 构建镜像(构建好的镜像,不 push 到远程仓库中)
Salin selepas log masuk

Lihat imej:

docker images ls
Salin selepas log masuk

Kembali:

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
Salin selepas log masuk

Kerahkan ke kluster:

make kube-deploy  # 在集群中部署服务
Salin selepas log masuk

Lihat Pod:

kubectl get pods
Salin selepas log masuk
Salin selepas log masuk

Kembali:

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
Salin selepas log masuk

Lihat log klien-http Pod :

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
Salin selepas log masuk
Salin selepas log masuk

Pemulangan:

#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
Salin selepas log masuk

Lihat log Pod client-grpc:

export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
Salin selepas log masuk
Salin selepas log masuk

Pemulangan:

#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
Salin selepas log masuk

Anda boleh melihatnya Di luar kotak, permintaan HTTP melakukan muatan, manakala permintaan RPC melakukan muatan.

Utusan Pengujian(Istio)

Kami telah menggunakan Istio dalam kelompok, tetapi tiada ruang arahan untuk suntikan automatik, jadi kami melakukan suntikan manual di sini.

Suntikan manual:

make istio-inject # 注入 Istio 边车
Salin selepas log masuk

Lihat Pod:

kubectl get pods
Salin selepas log masuk
Salin selepas log masuk

Pulangan:

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
Salin selepas log masuk

Lihat log Pod klien-http:

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
Salin selepas log masuk
Salin selepas log masuk

Pulangan:

#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
Salin selepas log masuk

Lihat log klien-grpc Pod:

export CLIENT_GRPC_POD=$(kubectl get pod -l app=client-grpc -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_GRPC_POD}"
Salin selepas log masuk
Salin selepas log masuk

Pulangan:

#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
Salin selepas log masuk

Anda boleh lihat , kedua-dua permintaan HTTP dan permintaan RPC sedang melaksanakan muatan.

Bersihkan

make kube-delete
istioctl experimental uninstall --purge
Salin selepas log masuk

Atas ialah kandungan terperinci Menganalisis pengimbangan beban gRPC Kubernetes (L4 lwn L7). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:learnku.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan