web-dev-qa-db-ja.com

grpcとzeromqの比較

Grpcの機能とzeromqとそのパターンを何らかの方法で比較したいと思います。そして、何らかの比較(機能セット)を作成したいと思います。同等の「フレームワーク」を取得します-ここでは、0mqの方がはるかに柔軟性が高いようです...

主な要件は次のとおりです。

  • ノード間の非同期req/res通信(インプロセスまたはリモート)
  • 柔軟なメッセージルーティング
  • ロードバランスのサポート
  • よく文書化されている

何か案は?

ありがとう!

36
user3169252
  • ノード間の非同期req/res通信(インプロセスまたはリモート)

どちらのライブラリも、通信の実装方法に応じて、同期通信または非同期通信が可能です。 gRPCのこのページを参照してください: http://www.grpc.io/docs/guides/concepts.html 。基本的にgRPCは、一般的なHTTP同期要求/応答または「websocketのような」双方向ストリーミングを可能にします。 0mqの場合、基本的に同期通信パスである単純なREQ-REP接続をセットアップするか、非同期のROUTER-DEALERタイプの類型を作成できます。

  • 柔軟なメッセージルーティング

「ルーティング」とは、本質的に、メッセージがブローカーを介してAからBに到達することを意味します。これは0mqで簡単に行われ、このようなものをサポートする多くの類型があります( http://zguide.zeromq.org/page:all#Basic-Reliable-Queuing-Simple-Pirate-Pattern =)。 gRPCでは、ストリームを介した接続のような「pub-sub」のような類型を作成できます。 gRPCは、メッセージへのメタデータの挿入をサポートしています( https://github.com/grpc/grpc-go/blob/master/Documentation/grpc-metadata.md )。これにより、 「pub-sub」接続がプルできるキューへのメッセージ。

  • ロードバランシングサポート

gRPCにはヘルスチェックのサポートがあります( https://github.com/grpc/grpc/blob/master/doc/health-checking.md )が、HTTP/2である必要があるためヘルスチェックをサポートするHTTP/2ロードバランサー。ただし、ロードバランサーが呼び出すHTTP/1.1サービスにヘルスチェックを結び付けることができるため、これはそれほど大きな問題ではありません。 0mqはtcp接続です。これは、ロードバランサーがtcpmodeで「ソケット接続」をチェックして接続を確認することを意味します。これは機能しますが、ニースほどではありません。この場合も、ロードバランサーが読み取るHTTP/1.1 Webサーバーを使用して、滑らかで0mqサービスをフロントエンドにすることができます。

  • よく文書化されている

両方とも十分に文書化されています。 0mqのドキュメントは、技術を完全に理解するために読む必要があり、より高度なものです。

大きな違いは次のとおりです。

  1. 0mqはtcpプロトコルであるのに対し、gRPCはバイナリペイロードを持つHTTPです。
  2. 0mqでは、フレーミングプロトコル(フレーム1 =バージョン、フレーム2 =ペイロードなど)を設計する必要がありますが、この作業の多くはgRPCで行われます。
  3. gRPCはREST( https://github.com/grpc-ecosystem/grpc-gateway )に透過的に変換されますが、話したい場合は0mqにミドルウェアアプリケーションが必要ですRESTそれに。
  4. gRPCは標準のtls x509証明書を使用し(Webサイトを考えてください)、0mqはカスタム暗号化/認証プロトコルを使用します( http://curvezmq.org/ )。 4.x以前では、0mqには暗号化のサポートがありませんでした。本当に必要な場合は、このくだらないものに飛び込む必要がありました: https://wiki.openssl.org/index.php/BIO 。 (信じないでください)
  5. 0mqはかなり病気のタイポロジを作成できます( https://github.com/zeromq/Majordomo )( https://rfc.zeromq.org/spec:7/MDP/ =)gRPCは基本的にクライアント/サーバーです
  6. gRPCは基本的にprotobufメッセージをコンパイルし、サービスをコードにインポートしますが、0mqのビルドと実行にはさらに時間がかかります。
44
ascotan

まったく同じではありません。 gRPCは主に異種サービスの相互運用性を目的としており、ZeroMQ(ZMQ/0MQ /ØMQ)は低レベルのメッセージングフレームワークです。 ØMQは、バイナリBLOBを渡す以外のペイロードシリアル化を指定しませんが、gRPCはデフォルトでプロトコルバッファーを選択します。 ØMQはデータセンター/クラウド間で同じマシンまたはマシンにほぼスタックしていますが、gRPCは実際のクライアント(モバイルまたはWeb、すでにiOSをサポートしている)でも動作する可能性があります。 ØMQを使用したgRPCは、http2要求/応答チェーンのオーバーヘッド、遅延、複雑さよりも、クラウド/データセンターサービスの方がはるかに高速で効率的です。 gRPC TLSセキュリティ がパブリッククラウドおよびモバイル/ウェブの使用にどのように(またはたとえ)適切であるかはわかりませんが、エンドツーエンドのセキュリティ要件(つまりlibsodium)をいつでも注入できます。アプリ/アプリフレームワークのルーター/コントローラーレベルで、プレーンテキストモードで実行します(これにより、OpenSSL fork BoringSSLがアップストリームの欠陥のためにメンテナンスの頭痛を引き起こすこともなくなります)。

非常に高遅延/低帯域幅のサービス(つまり、火星へのミッション)の場合、SMTP(つまりActive Directoryの代替複製)またはMQTT(つまりFacebook Messenger、ZigBee、SCADA)などのトランスポートを使用したRPCについて考えます。

ボーナス(トピック外):gRPCにØMQ(UNIXソケット、TCP、PGM、およびインプロセスもサポートする)などの代替のプラグ可能なトランスポートがあると便利です。HTTP/ 2はすべての言語でまだ安定しておらず、 ØMQ。また、nanomsg(特にHFTの世界)を検討する価値があります。RDMA/ SDP/MPIで拡張でき、低遅延/ゼロコピー/ Infiniband対応になります。

27
user246672