web-dev-qa-db-ja.com

gRPC / Protobufインターフェースのバージョン管理

GRCP/Protobufを使用して多くのアプリケーションを接続するとします。これらのアプリケーションは、独自のチームで独自の速度で開発およびリリースされます。時間の経過とともに、定義されたインターフェイスで異なるバージョンを使用する同じアプリの異なるバージョンが存在するようになります(たとえば、デスクトップアプリはユーザーPCにインストールされます)。

Protobufは下位互換性を可能にすることを目的としていますが、さまざまなポイントで実行されているインターフェイスのバージョンを知る方法はありますか?

最も簡単な実装は、インターフェースのバージョンをアプリのバージョンと同じにすることです。しかし、多くの言語が使用されているため、それらすべてにアプリのバージョン管理を実装することは簡単ではありません。

では、バージョンインターフェイスとサーバーにクライアントのバージョンを知らせる方法は?サーバーはログに記録できるはずだと思います

AppNamev.versionからのDATETIME接続[インターフェイスv.versionを使用]

12
Paul Verest

GRPCの今後のバージョンでは、サーバーリフレクションと呼ばれる新機能があります。これにより、クライアントは、使用されているプロトファイルを記述子する記述子をサーバーに要求できます。サーバーがクライアントが実行しているバージョンを知るのではなく、クライアントはサーバーが実行しているものを知っています。サーバー記述子がクライアントがすでに持っているものと一致する場合、サーバー記述子はそれらが同じバージョンで話していることを認識します。

これはバージョン1.1でリリースされます。

Protobufsは、しないでくださいこれを行う必要があるように設計されていることに注意してください!プロトを正しく設定すると、古いバージョンと新しいバージョンのクライアントとサーバーが連携するはずです。

3

プロトコルバッファバージョン2を使用している場合は、デフォルト値を使用してこれを実装できます。 Protocol Buffers 3はデフォルト値のサポートを削除したため、この回答はそこでは機能しません。

インターフェイスを定義する.protoファイルには、次のようなものがあります。

message MyLoginMessage
{
    ... normal login fields ...

    // Increment this number when you make new releases
    // of this .proto.
    optional int32 protocol_version [default=55];
}

このようにして、すべてのクライアントは.protoから取得したバージョン番号を自動的に含めます。

編集:ああ、proto3タグに気づいたばかりです。だから、この答えは結局あなたには役に立たないと思います。

0
jpa