Thrift vs Protocol Buffers: どのシリアライゼーション?
Apache ThriftはIDL、シリアライゼーション、完全なRPCスタックをまとめて提供し、Protocol BuffersはRPCには通常gRPCと組み合わせるコンパクトなシリアライゼーション形式です。
Thriftはシリアライゼーションと、プラガブルなtransportを備えた完全なRPCフレームワークを1つのパッケージで提供します。Protobufはコンパクトでスキーマ駆動のシリアライゼーションに焦点を当て、RPCはgRPCに委ね、それが支配的な組み合わせとなっています。ThriftはオールインワンのRPC+シリアライゼーションシステムとして優れ、Protobufはシリアライゼーションの普及度とgRPCエコシステムの勢いで優れています。
| Thrift | Protobuf | |
|---|---|---|
| スコープ | シリアライゼーション + RPC | シリアライゼーション (RPCはgRPC経由) |
| IDL | Thrift IDL | .proto |
| Transport | プラガブル | gRPC (HTTP/2) |
| エコシステム | 成熟 | 非常に大きい |
| 最適な用途 | オールインワンRPC | 普及したシリアライゼーション |
ユースケースとスコープ
Thriftは、柔軟なtransportでシリアライゼーションとRPCの両方を1つのパッケージで望むチームに適しています。Protobufは、広くサポートされたシリアライゼーション形式を望むチームに適しており、通常はRPCにgRPCを用い、巨大な周辺エコシステムを備えます。
運用とCIへの適合性
どちらもビルド時にスキーマを言語stubにコンパイルします。Codegenとスキーマ互換性チェックがCIで実行され、より高速なマネージドrunnerが多言語生成とcontractテストを短縮します。
結論
単一のバンドルされたシリアライゼーション+RPCスタックが欲しいなら: Thrift。最も広く採用されたシリアライゼーション形式(とgRPC)が欲しいなら: Protobuf。バンドルされたRPCはThriftに、エコシステムの普及度はProtobufに有利です。