インターネット技術の継続的な発展に伴い、分散システム アーキテクチャがますます一般的になってきました。 RPC (Remote Procedure Call) は、分散システム アーキテクチャの通信方式として、開発者からますます注目を集めています。 RPC サービスの実装では、パフォーマンスをいかに向上させるかが重要な問題になります。この記事では、Grpc と Protobuf を使用して高パフォーマンスの RPC サービスを実装する方法を紹介します。
1. Grpc および Protobuf とは
Grpc は、Google が開発した高性能、軽量、クロスランゲージ RPC フレームワークです。 HTTP/2 ベースのプロトコルを使用しており、クライアントとサーバーの両方のストリーミング データ送信、データ圧縮、SSL セキュリティ認証などの多くの機能をサポートしており、クラウド コンピューティング、ビッグ データ、モノのインターネットなどの分野で広く使用されています。
Protobuf (プロトコル バッファー) は、Google がオープンソース化した効率的なシリアル化形式です。ネットワーク送信とデータ ストレージに使用され、構造化データをバイナリ形式にシリアル化し、異なるプラットフォームや言語上のプログラム間で送信および解析できます。 Protobuf の最大の特徴は、サイズが小さい、高速である、言語に依存しないという点であり、ネットワークの送信や保存に非常に適したデータ形式です。
2. Grpc と Protobuf の利点
RPC サービスの実装プロセスにおいて、Grpc と Protobuf を使用すると次の利点が得られます:
- 効率的なデータ送信
#Grpc は、HTTP/2 ベースのプロトコルを使用し、多重化、ヘッダー圧縮、フロー制御などの機能をサポートしており、セキュリティを確保しながらデータ転送効率を向上させることができます。
Protobuf はバイナリ エンコーディングを使用しており、従来の XML や JSON データ形式よりもデータの送信と保存が効率的で、データ パケットのサイズを削減し、ネットワーク送信のコストを削減できます。
クロスプラットフォーム、多言語サポート-
Grpc は、C、Java、Python、Go、Node.js、Ruby などの複数のプログラミング言語をサポートしています。クロスプラットフォームで使用できます。
Protobuf は、C、Java、Python、Go、Ruby、C# などの複数のプログラミング言語もサポートしており、異なる言語が同じデータ形式を介して通信できるようにします。
コード ジェネレーターはコードを自動的に生成します。-
Grpc および Protobuf のコード ジェネレーターは、定義された Protobuf ファイルに基づいて対応するサーバー コードとクライアント コードを生成し、手動での重複コードの作成を回避します。仕事。
3. 実装手順
以下では、Grpc と Protobuf を使用して高パフォーマンス RPC サービスを実装するための具体的な手順を紹介します:
Grpc と Protobuf をインストールする-
まず、Grpc と Protobuf をインストールする必要があります。対応するインストール パッケージを公式 Web サイト (https://grpc.io/docs/langages/) からダウンロードするか、パッケージ マネージャーを通じてインストールできます。
プロトコル バッファー ファイルの定義-
プロトコル バッファー ファイルを定義するときは、メッセージ形式、サービス インターフェイス、RPC メソッドなどを指定する必要があります。たとえば、以下はサンプル ファイルです。
syntax = "proto3";
message Request {
string message = 1;
}
message Response {
string message = 1;
}
service GrpcService {
rpc SayHello(Request) returns (Response) {}
}
ログイン後にコピー
このうち、Request と Response はメッセージ形式、GrpcService はサービス インターフェイス、SayHello は RPC メソッドです。プロトコル バッファー ファイルを定義することで、異なる言語でも同じデータ形式を使用して通信できます。
サーバー側コードの作成
サーバー側コードでは、定義されたサービス インターフェイスを実装する必要があります。定義された Protobuf ファイルに基づいてサーバー側コードを自動的に生成し、その中に SayHello メソッドを実装できます。 PHP を例にとると、コードは次のとおりです。
require __DIR__ . '/vendor/autoload.php';
use GrpcServerGrpcGrpcServiceServer;
use GrpcServerGrpcRequest;
use GrpcServerGrpcResponse;
class GrpcService extends GrpcServiceServer
{
public function SayHello(Request $request) : Response
{
$response = new Response();
$response->setMessage("Hello " . $request->getMessage());
return $response;
}
}
$server = new SwooleCoroutineHttpServer("0.0.0.0", 9090);
$server->handle("/grpc", GrpcService::class);
$server->start();
ログイン後にコピー
このうち、GrpcService は、生成された Grpc サーバー コード内の GrpcServiceServer クラスを継承し、SayHello メソッドを実装します。サービスの開始時に、GrpcService クラスをアドレス ポートにバインドしてサービスを開始できます。
クライアント コードの記述
クライアント コードでは、まず Grpc クライアントを作成し、サーバーの SayHello メソッドを呼び出す必要があります。定義された Protobuf ファイルに基づいてクライアント コードを自動的に生成することもできます。 PHP クライアントのコード例は次のとおりです。
require __DIR__ . '/vendor/autoload.php';
use GrpcServerGrpcGrpcServiceClient;
use GrpcServerGrpcRequest;
$client = new GrpcServiceClient("localhost:9090", [
'credentials' => GrpcChannelCredentials::createInsecure(),
]);
$request = new Request();
$request->setMessage("John");
$response = $client->SayHello($request);
echo $response->getMessage();
ログイン後にコピー
その中で、Grpc クライアントが作成され、サーバーのアドレスとポート、および関連する証明書情報が渡されます。次に、Request オブジェクトを作成し、その message 属性を設定し、Grpc サーバー内の SayHello メソッドを呼び出して応答結果を取得して出力します。
4. 概要
この記事では、Grpc と Protobuf を使用して高パフォーマンスの RPC サービスを実装するための具体的な手順を紹介します。 Grpc と Protobuf には、ネットワーク転送とデータ ストレージにおいて大きな利点があり、RPC サービスのパフォーマンスを効果的に向上させることができます。実際の開発では、特定のアプリケーション シナリオに応じて適切な RPC フレームワークを選択できるため、分散システムの効率とパフォーマンスが向上します。
以上がPHP 開発: Grpc と Protobuf を使用した高パフォーマンス RPC サービスの実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。