WCF は多数のクライアント ユーザーにどの程度うまく対応できますか?
-
09-06-2019 - |
質問
Microsoft の WCF で構築された Web サービスが、多数のユーザーにどの程度うまく拡張できるかについて経験のある人はいますか?
私が考えているレベルは、アプリケーションのビジネス ロジックを提供する WCF サービスのコレクションに接続する 1000 人を超えるクライアント ユーザーの領域で、これらのサービスはデータベースと通信します (従来の 3 層アーキテクチャと同様)。
パフォーマンスを低下させる特別な問題や、このレベルのスケーラビリティを可能にするために学んだ設計上の教訓はありますか?
解決
WCF アプリケーションを確実に望ましいレベルにスケールできるようにするには、サービスが満たさなければならない統計についての考え方を微調整する必要があると思います。
「1000 人以上のクライアント ユーザー」にサービスを提供すると述べていますが、サービスがそのレベルで実行できるかどうかを評価するには、推定使用量の数値も必要になります。これは、アプリの 1 秒あたりのリクエスト数などのより簡単な統計を計算するのに役立ちます。対処する必要があります。
WCF プロジェクトの作業を終えたところで、テスト ハードウェアで 1 秒あたり 400 リクエストを取得することができました。これは、各ユーザーが 1 日あたり 300 リクエストを行うという予想される使用パターンと組み合わせると、1 日あたり平均 100,000 人のユーザーを処理できることがわかりました (一日を通して平坦な使用量グラフ)。
さらに、WCF サービス コードをステートレスにするのが非常に一般的であるため、ボックスを追加することで実際の WCF コードをスケールアウトするのは非常に簡単です。つまり、システム全体のパフォーマンスがビジネス ロジックやビジネス ロジックによって制限される可能性がはるかに高くなります。 WCF による永続化レイヤーよりも永続化レイヤーです。
他のヒント
おそらく、最初に検討し始めることができる 4 つの最大の事項 (適切なサービス コードがあるということ以外に) は、次の項目に関連する項目です。
- バインディング - 一部のバインディングとそれらが実行されるプロトコルは他のものより速いだけですが、tcp はどの http バインディングよりも高速になります。
- インスタンスモード - これにより、セッション呼び出し元に対してクラスがどのように割り当てられるかが決まります。
- 一方向および双方向の操作 - クライアントに応答を返す必要がない場合は、一方向を実行します。
- スロットリング - 最大セッション数/同時呼び出しとインスタンス
WCF はデフォルトで安全になるように設計されているため、デフォルトは非常に制限的です。