目次
#インストール環境の依存関係" >#インストール環境の依存関係
プロジェクトアドレス" >プロジェクトアドレス
cmd/client-http/main.go: HTTP クライアントは、HTTP モードを通じてサーバー インターフェイスを周期的に呼び出し、戻り値を出力します。 " >cmd/server/main.go: HTTP サービスと RPC サービスの両方を提供するサーバー。応答データは、サーバー コンテナーが配置されているポッド名です (Downward API に基づく)。 cmd/client-http/main.go: HTTP クライアントは、HTTP モードを通じてサーバー インターフェイスを周期的に呼び出し、戻り値を出力します。
テストサービス" >テストサービス
ホームページ バックエンド開発 Golang Kubernetes gRPC ロード バランシングの分析 (L4 と L7)

Kubernetes gRPC ロード バランシングの分析 (L4 と L7)

Nov 16, 2021 pm 02:53 PM
grpc kubernetes

この記事は、Kubernetes での gRPC ロード バランシングを紹介する go language チュートリアル コラムで紹介されています。

    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 の概要

コマンド説明#make init##proto ファイルに基づいて protoc を作成しますBuild docker imagemake kube-deployクラスターにサービスをデプロイサービスの削除Istio サイドカーの注入L4 と L7 のロード バランシング
protoc-gen-go と protoc-gen-grpc をインストールします
## 、*_pb.go と *_grpc.pb.go を生成します #make docker-build
##make kube-delete
make istio-inject
特定のロジックについては、Makefile を確認してください。
いわゆるレイヤー 4 は IP ポートに基づくロード バランシングですが、レイヤー 7 は次のようなアプリケーション層の情報に基づくロード バランシングです。 URL、Kubernetes 組み込みのサービス負荷分散は iptables/ipvs に基づいており、L4 のみをサポートします。つまり、サービスは HTTP/1.1 プロトコルをサポートしますが、HTTP/2 プロトコルはサポートしません。

Envoy (Istio) はより汎用性が高く、基盤となるルーティングと負荷分散として gRPC によって要求および応答されるすべての HTTP/2 機能をサポートします。

プロジェクト アーキテクチャ

このプロジェクトでは、HTTP/RPC ロード バランシングのための Service と Envoy (Istio) のサポートをそれぞれテストします。

cmd/client-grpc/main.go: gRPC クライアントは、RPC を通じてループ内でサーバー メソッドをリモートで呼び出し、戻り値を出力します。

  • テスト原則
  • サーバーは、デプロイメントの形式で Kubernetes クラスターに 3 つのコピーをデプロイします。3 つのコピーのポッド名は異なり、クライアントは-http と client-grpc は 1 秒ごとにサーバーを呼び出し、戻り値を出力します。戻り値に 3 つの 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
ログイン後にコピー

Deployment クラスターに移動します:

make kube-deploy  # 在集群中部署服务
ログイン後にコピー
ポッドを表示します:

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 ポッドのログを表示します:

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
ログイン後にコピー
ログイン後にコピー
Return :

#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}"
ログイン後にコピー
ログイン後にコピー
Return:

#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 リクエストはペイロードを伝送していることがわかります。無効な荷物を運んでいます。

Test Envoy(Istio)

Istio をクラスターにデプロイしましたが、自動インジェクション用のコマンド スペースがないため、ここでは手動インジェクションを実行します。

手動インジェクション:

make istio-inject # 注入 Istio 边车
ログイン後にコピー
ポッドの表示:
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
ログイン後にコピー
クライアント http ポッドのログの表示:

export CLIENT_HTTP_POD=$(kubectl get pod -l app=client-http -o jsonpath={.items..metadata.name})kubectl logs "${CLIENT_HTTP_POD}"
ログイン後にコピー
ログイン後にコピー
Return:

#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}"
ログイン後にコピー
ログイン後にコピー
Return:

#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 と L7)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

gRPC を使用して Golang でファイルのアップロードを実装するにはどうすればよいですか? gRPC を使用して Golang でファイルのアップロードを実装するにはどうすればよいですか? Jun 03, 2024 pm 04:54 PM

gRPC を使用してファイルのアップロードを実装するにはどうすればよいですか?リクエストおよびレスポンスメッセージを含むサポートサービス定義を作成します。クライアントでは、アップロードされるファイルが開かれてチャンクに分割され、gRPC ストリーム経由でサーバーにストリーミングされます。サーバー側では、ファイル チャンクが受信され、ファイルに保存されます。ファイルのアップロードが完了すると、サーバーはアップロードが成功したかどうかを示す応答を送信します。

gRPC を使用して Golang で同時データ送信を実装するためのベスト プラクティス gRPC を使用して Golang で同時データ送信を実装するためのベスト プラクティス Jul 18, 2023 pm 10:17 PM

gRPC を使用して Golang で同時データ送信を実装するためのベスト プラクティス はじめに: クラウド コンピューティングとビッグ データ テクノロジの発展に伴い、データ送信の需要はますます緊急になっています。 Google のオープンソースの高性能リモート プロシージャ コール フレームワークである gRPC は、その効率性、柔軟性、および言語間の機能により、多くの開発者の最初の選択肢となっています。この記事では、プロジェクト構造の構築、接続プールの使用、エラー処理など、gRPC を使用して Golang で同時データ送信を実装する方法のベスト プラクティスを紹介します。 1. 初期段階でのエンジニアリング体制の構築

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 は、クラウド プラットフォームでのアプリケーションの展開と管理のための 2 つの非常に人気のある強力なツールになりました。 BeegoはGolangで開発されたWebフレームワークで、HTTPルーティング、MVC階層化、ロギング、構成管理、セッション管理などの豊富な機能を提供します。この記事では、Docker と Kub の使用方法について説明します。

gRPC を使用して Golang でデータ暗号化を実装するためのベスト プラクティス gRPC を使用して Golang でデータ暗号化を実装するためのベスト プラクティス Jul 19, 2023 pm 03:17 PM

gRPC を使用して Golang でデータ暗号化を実装するためのベスト プラクティス はじめに: 情報セキュリティが高く評価されている今日の時代では、データのセキュリティを保護することがますます重要になっています。分散システムでは、ネットワーク伝送時のデータのセキュリティをどのように確保するかが重要な課題となります。 gRPC は、データのシリアル化と送信に ProtocolBuffers を使用することでより高度なデータ セキュリティを提供し、TLS/SSL 暗号化送信をサポートする、高性能の言語間リモート プロシージャ コール フレームワークです。

PHP で gRPC を使用して同時実行性の高い API を処理する方法 PHP で gRPC を使用して同時実行性の高い API を処理する方法 Jun 17, 2023 pm 04:46 PM

最新のネットワーク アプリケーションでは、高い同時実行性の処理は非常に重要な問題です。このプロセスでは、gRPC を使用すると、リモート プロシージャ コール (RPC) を通じて効率的なクライアント サーバー通信を実現する優れた方法となります。 PHP アプリケーションでは、gRPC を使用して、同時多発 API リクエストを処理できます。この記事では、gRPC を使用して PHP で同時実行性の高い API を処理する方法を紹介します。 gRPC とは何ですか? gRPC は、Google によって開発された高性能 RPC フレームワークです。それ

React と Kubernetes を使用して信頼性の高いコンテナ化アプリケーションを構築する方法 React と Kubernetes を使用して信頼性の高いコンテナ化アプリケーションを構築する方法 Sep 26, 2023 am 09:07 AM

React と Kubernetes を使用して信頼性の高いコンテナ化アプリケーションを構築する方法 クラウド ネイティブ テクノロジの急速な発展に伴い、コンテナ化アプリケーションは今日のソフトウェア開発における注目のトレンドになっています。人気のあるフロントエンド フレームワークである React は、その柔軟性と効率性により、多くの開発者にとって最初の選択肢となっています。この記事では、React と Kubernetes を使用して信頼性の高いコンテナ化アプリケーションを構築する方法を紹介し、いくつかの具体的なコード例を示します。 React アプリケーションの作成 まず、基本的な React を作成する必要があります。

Java を使用して Spring Cloud Kubernetes に基づくコンテナ オーケストレーション アプリケーションを開発する方法 Java を使用して Spring Cloud Kubernetes に基づくコンテナ オーケストレーション アプリケーションを開発する方法 Sep 20, 2023 am 11:15 AM

Java を使用して Spring Cloud Kubernetes に基づいたコンテナ オーケストレーション アプリケーションを開発する方法 コンテナ テクノロジの開発と広範な適用に伴い、コンテナ オーケストレーション ツールは開発者にとって不可欠な部分になりました。 Kubernetes は最も人気のあるコンテナ オーケストレーション ツールの 1 つとして業界標準になっています。この状況において、Spring Cloud と Kubernetes を組み合わせることで、コンテナ オーケストレーションに基づいたアプリケーションを簡単に開発できます。この記事で詳しく紹介します

See all articles