2

AzureでホストしているWCFサービスがあります。それはいくつかのxmlを取り、それをメモリ内で処理し(外部呼び出し/ dbなどはなく、約150msかかります)、いくつかのxmlを返します。

私たちはそれを負荷テストしており、1、2、および4コアのマシンで実行すると、プロセッサを最大限に活用し、1秒あたり最大40コールのスループットを得ることができます(4コアマシンで)。ただし、8コアマシンまたは2台の4コアマシンに切り替えると、1秒あたりの呼び出し数は約40になります。

処理を行うマシンの数を増やすと、スループットを上げることができないのはなぜですか?マシンを追加すると、スループットがかなり直線的に増加すると思いますが、そうではありません。なぜだめですか?

4

1 に答える 1

2

Azureに特定のスロットリングがあるかどうかはわかりませんが、.NET Frameworkには、一度にアクティブにできる同じアドレスへの発信接続の数に制限があります。このMSDNの記事「Webサービスのパフォーマンスの向上」では、これのデフォルト値は2であると述べています。

maxconnection属性を構成します

Machine.configのmaxconnection属性は、同時アウトバウンドコールの数を制限します。

注この設定は、ローカル要求(Webサービスと同じサーバー上のASP.NETアプリケーションから発信された要求)には適用されません。この設定は、現在のコンピューターからのアウトバウンド接続、たとえば、ASP.NETアプリケーションや他のリモートWebサービスを呼び出すWebサービスに適用されます。maxconnectionのデフォルト設定は、接続グループごとに2つです。Webサービスを呼び出すデスクトップアプリケーションの場合、2つの接続で十分な場合があります。Webサービスを呼び出すASP.NETアプリケーションの場合、通常は2つでは不十分です。開始点として、maxconnection属性をデフォルトの2から(CPU数の12倍)に変更します。

<connectionManagement>
  <add address="*" maxconnection="12"/>
</connectionManagement> 

CPUあたり12の接続は任意の数ですが、経験的な証拠は、ASP.NETを12の同時要求に制限する場合にもさまざまなシナリオに最適であることを示しています(この章で後述する「スレッド」セクションを参照)。ただし、状況に応じて適切な接続数を検証する必要があります。

これらの制限は、単一のユーザーがリモートサーバー上のすべてのリソースを独占すること(DOS攻撃)を防ぐために設けられています。これはAzureで実行されているサービスであるため、ユーザーが単一のIPからのすべての着信接続を消費するのを防ぐために、ユーザー側でスロットルを使用していると思います。

次のステップは、紺碧のWebロールに同時接続制限があるかどうかを確認して(このスレッドは、構成可能であることを示唆しています)、それを増やすことです。それ以外の場合は、複数のソースから負荷テストを実行して、同じ制限が発生するかどうかを確認します。

于 2012-10-23T20:12:52.810 に答える