Naveen M 著
Kubernetes プラットフォーム チームの一員として、私たちはユーザーのワークロードをリアルタイムで可視化するという絶え間ない課題に直面しています。リソース使用量の監視から Kubernetes クラスターのアクティビティやアプリケーションのステータスの追跡まで、特定のカテゴリごとに利用可能なオープンソース ソリューションが数多くあります。ただし、これらのツールはさまざまなプラットフォームに分散していることが多く、その結果、ユーザー エクスペリエンスが断片化されます。この問題に対処するために、私たちはサーバー側ストリーミングの力を採用し、ユーザーがプラットフォーム ポータルにアクセスするとすぐにライブ リソースの使用状況、Kubernetes イベント、アプリケーションのステータスを配信できるようにしました。
サーバー側ストリーミングを実装することで、データをユーザー インターフェイスにシームレスにストリーミングでき、手動更新や定期的な API 呼び出しを必要とせずに最新の情報を提供できます。このアプローチはユーザー エクスペリエンスに革命をもたらし、ユーザーは統合された簡素化された方法でワークロードの健全性とパフォーマンスを即座に視覚化できるようになります。リソース使用率の監視、Kubernetes イベントに関する最新情報の入手、アプリケーション ステータスの監視など、当社のサーバー側ストリーミング ソリューションはすべての重要な情報を 1 つのリアルタイム ダッシュボードにまとめます。ライブ ストリーミング データをユーザー インターフェイスに提供します。
重要な洞察を収集するために複数のツールやプラットフォームをナビゲートする時代は終わりました。当社の合理化されたアプローチにより、ユーザーは当社のプラットフォーム ポータルにアクセスした瞬間に、Kubernetes 環境の包括的な概要にアクセスできます。サーバー側ストリーミングの力を利用することで、ユーザーがワークロードを操作および監視する方法を変革し、ユーザーのエクスペリエンスをより効率的、直感的、そして生産的なものにしました。
私たちはブログ シリーズを通じて、React.js、Envoy、gRPC、Golang などのテクノロジーを使用したサーバーサイド ストリーミングのセットアップの複雑さをガイドすることを目的としています。
このプロジェクトには 3 つの主要なコンポーネントが含まれています:
1. Golang を使用して開発され、gRPC サーバー側ストリーミングを利用してデータを送信するバックエンド。
2. Envoy プロキシ。バックエンド サービスに外部からアクセスできるようにする役割を果たします。
3.フロントエンド。React.js を使用して構築され、grpc-web を使用してバックエンドとの通信を確立します。
このシリーズは、開発者の多様な言語設定に対応するために複数のパートに分かれています。ストリーミングにおける Envoy の役割に特に興味がある場合、または Kubernetes での Envoy プロキシのデプロイについて知りたい場合は、2 番目のパート (Kubernetes のフロントエンド プロキシとしての Envoy) にジャンプしてその側面を探索するか、単にフロントエンド部分を確認したら、ブログのフロントエンド部分を確認してください。
この最初のパートでは、シリーズの最も簡単な部分「Go で gRPC サーバーサイド ストリーミングをセットアップする方法」に焦点を当てます。サーバーサイドストリーミングを使用したサンプルアプリケーションを紹介します。幸いなことに、インターネット上には、好みのプログラミング言語に合わせてこのトピックに関する豊富なコンテンツが用意されています。
計画を実行する時が来ました!次の概念の基本を理解していると仮定して、早速実装に入りましょう:
それでは、コードの実装を始めましょう。
ステップ 1: Proto ファイルを作成する
まず、クライアント側とサーバー側の両方で使用される protobuf ファイルを定義する必要があります。簡単な例を次に示します:
syntax = "proto3"; package protobuf; service StreamService { rpc FetchResponse (Request) returns (stream Response) {} } message Request { int32 id = 1; } message Response { string result = 1; }
このプロト ファイルには、Request パラメータを受け取り、Response メッセージのストリームを返す FetchResponse という単一の関数があります。
次に進む前に、Go プログラムで使用される対応する pb ファイルを生成する必要があります。各プログラミング言語には、プロトコル バッファ ファイルを生成する独自の方法があります。 Go では、protoc ライブラリを使用します。
まだインストールしていない場合は、Google が提供するインストール ガイドを参照してください。
プロトコル バッファ ファイルを生成するには、次のコマンドを実行します:
protoc --go_out=plugins=grpc:. *.proto
これで、data.pb.go ファイルが実装で使用できるようになりました。
ステップ 3: サーバー側の実装
サーバー ファイルを作成するには、以下のコード スニペットに従ってください:
package main import ( "fmt" "log" "net" "sync" "time" pb "github.com/mnkg561/go-grpc-server-streaming-example/src/proto" "google.golang.org/grpc" ) type server struct{} func (s server) FetchResponse(in pb.Request, srv pb.StreamService_FetchResponseServer) error { log.Printf("Fetching response for ID: %d", in.Id) var wg sync.WaitGroup for i := 0; iこのサーバー ファイルには、クライアントからリクエストを受信し、一連の応答を返す FetchResponse 関数を実装しました。サーバーはゴルーチンを使用して同時処理をシミュレートします。リクエストごとに、5 つの応答をクライアントにストリーミングして返します。さまざまな処理時間をシミュレートするために、各応答は一定の期間だけ遅延されます。
サーバーはポート 50005 をリッスンし、作成されたサーバーに StreamServiceServer を登録します。最後に、リクエストの処理を開始し、サーバーが起動したことを示すメッセージをログに記録します。
これで、クライアントからのストリーミング要求を処理するサーバー ファイルの準備が整いました。パート 2
パート 2 もお楽しみに。ストリーミング データのエキサイティングな世界と、それがユーザー インターフェイスにどのような革命をもたらすのかを引き続き掘り下げていきます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3