web-dev-qa-db-ja.com

SOAP vs. XML-RPCのパフォーマンスまたはREST

XML-RPCまたはRESTを使用したソリューションの単純さに関する議論は、理解しやすく、議論するのが困難です。

また、SOAPのオーバーヘッドの増加が使用帯域幅に影響を与える可能性があり、場合によっては遅延にさえ影響を与える可能性があるという議論もよく耳にします。影響を定量化したテストの結果を確認したいと思います。そのような情報のための良い情報源?

47
Bradley Harris

これに関して行われたいくつかの研究があります。以下をご覧ください。

MSDNフォーラム で、このトピックに関する(多少古くなっている)興味深いパフォーマンスに関する会話もあります。

つまり、これらのソースのほとんどは、SOAPおよびRESTは、汎用データのパフォーマンスとほぼ同じであることに同意しています。ただし、一部の結果はバイナリデータの場合、RESTは実際にはパフォーマンスが低下する可能性があることを示します。これの詳細については、リンクしたフォーラムのリンクを参照してください。

6
Troy Alford

SOAP vs. RESTの速度における主な影響は、ワイヤ速度とは関係なく、キャッシュ可能性と関係があります。RESTは、XML経由でトンネリングを試みるのではなく、Webのセマンティクスを使用することを提案しているため、RESTful Webサービスは通常、キャッシュヘッダーを正しく使用するように設計されているため、キャッシュプロキシやローカルブラウザーキャッシュなどのWebの標準インフラストラクチャとうまく連携します。また、 Webのセマンティクスは、ETagや自動Zip圧縮などが効率を高めるためのよく理解されている方法であることを意味します。

..そして今、あなたはベンチマークが欲しいと言います。さて、Googleの助けを借りて、私は 1人の男 を見つけました。そのテストは、RESTがSOAPおよび paper これもRESTを支持します。

63
pjz

プロトコルとしてのRESTではメッセージエンベロープの形式を定義していませんが、SOAPにはこの標準があります。

そのため、2つを比較してみるのはやや単純で、リンゴからオレンジまでです。

つまり、SOAPエンベロープ(データを差し引いたもの)はわずか数kなので、両方でシリアル化されたオブジェクトを取得する場合、速度に目立った違いはないはずですSOAPおよびREST。

19
FlySwat

SOAPや、XMLを使用するその他のプロトコルは、通常、メッセージをかなり膨らませます。これは、状況によって問題になる場合と問題にならない場合があります。

JSONのようなものはよりコンパクトであり、シリアライズ/デシリアライズの方が高速かもしれませんが、そのためにそれだけを使用しないでください。その時点で理にかなっていると思うことは何でも行い、問題がある場合は変更してください。

通常HTTPを使用するもの(HTTP 1.1キープアライブ接続を再利用している場合を除き、多くの実装ではそうではありません)は、各要求に対して新しいTCP接続を開始します。これは、特に待ち時間の長いリンクでは非常に悪いです。 。HTTPSの方がはるかに悪いです。1人の送信者から1人の受信者への短いリクエストが多い場合は、このオーバーヘッドを取り除く方法を考えてください。

あらゆる種類のRPC(SOAPまたはその他)にHTTPを使用すると、常にそのオーバーヘッドが発生します。他のRPCプロトコルでは、通常、接続を開いたままにすることができます。

8
MarkR

「pjz」の答えを拡張します。

多くの情報(get *タイプの呼び出し)ベースのSOAP操作)を取得している場合、現在それらをキャッシュする方法はありません。ただし、RESTを使用してこれらの同じ操作を実装する場合、前述のように、データ(ビジネスコンテキストによって異なります)がキャッシュされる可能性があります。SOAPはPOSTを操作に使用するため、サーバー側で情報をキャッシュできません。

5
anjanb

SOAPは明らかに低速です。ペイロードは非常に大きく、アセンブル、トランスポート、解析、検証、および処理が遅くなります。

4
pbreitenbach

ベンチマークの質問に対する答えはわかりませんが、SOAP形式については知っていますが、オーバーヘッドがありますが、リクエストごとにオーバーヘッドは増加しません。 1つの要素がWebサービスに送信され、オーバーヘッド+ 1要素の構造があり、1000の要素がWebサービスに送信された場合、オーバーヘッド+ 1000の要素が構築されます。XMLリクエストが特定の操作ですが、リクエスト内の個々の引数要素はすべて同じ形式です。

反復可能な短いデータバースト(たとえば、500要素)を使用する場合、速度は許容範囲内である必要があります。

2
MetroidFan2002

ここでの主な質問は、RPCとSOAPをどのように比較するかだと思います。

これらは両方とも、操作するスタブオブジェクトと、これらすべてがどのように処理されるかを実際に知らなくても返されるプリミティブ/複雑なデータ型を持つことで、通信抽象化の同じアプローチを提供します。

私は常に(JSON-)RPCを好みます

  • 軽量です
  • そこにはすべてのプログラミング言語のための多くの素晴らしい実装があります
  • 学ぶ/使用する/作成するのは簡単です
  • 高速です(特にJSONの場合)

sOAPを使用する必要がある理由があります。つまり、正しい順序に依存する代わりにパラメータに名前を付ける必要がある場合

このstackoverflowから得られるいくつかの詳細 question

0
smoebody