2章プロトコルバッファによる構造化データ

分散サービスを構築する際には、ネットワークを介してサービス間の通信を行います。構造体などのデータをネットワーク経由で送信するには、データを送信可能な形式にエンコードする必要があり、多くのプログラマはJSONを選択しています。公開APIを構築する場合、すなわち、自分たちでクライアントを開発しないプロジェクトでは、人間が読むことができて、コンピュータも解析できるJSONが適しています。しかし、非公開のAPIを構築する場合、すなわち、自分たちでクライアントを開発するプロジェクトでは、話が異なります。つまり、JSONに比べて生産性が高く、速く、多くの機能を持ち、バグの少ないサービスを作ることができるデータの構造化と送信の機構を利用できます。

その機構は、プロトコルバッファ(Protocol Buffersprotobufとも呼ばれる)です。プロトコルバッファは、データを構造化してシリアライズするための、Googleが設計した言語とプラットフォームに依存しない拡張可能な機構です。protobufを使う利点は、次のとおりです。

  • 型の安全性を保証します。
  • スキーマ違反を防ぎます。
  • 高速なシリアライズを可能にします。
  • 後方互換性を提供します。

protobufではデータをどのように構造化するのかを定義し、そのprotobufをさまざまな言語のコードにコンパイルし、構造化されたデータをさまざまなデータストリームとの間で読み書きできます。プロトコルバッファは、二つのシステム間(マイクロサービスなど)の通信に適しています。そのため、Google社は、高性能なRPCフレームワークであるgRPCを構築した際にprotobufを使いました。

あなたがprotobufを使ったことがなければ、私と同じように「protobufは余計な作業が多いのではないか」という懸念を持つかもしれません。しかし、この章とこの本の残りの部分でprotobufを使ってみると、それほど悪いものではないことが分かると思います。JSONよりも多くの利点があり、結果的に多くの作業を省けます。 ...

Get Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.