Dynamics CRM 2013 設置型 通信パフォーマンスを改善する方法

みなさん、こんにちは。

今回は、Windows Communication Foundation (WCF) 圧縮および SSL を有効にして
Microsoft Dynamics CRM 2013 設置型の通信パフォーマンスを改善する方法を紹介いたします。
この記事は弊社が提供しているブログ Dynamics CRM in the Field で紹介された
記事を翻訳したものです。なお、本記事で紹介する方法は設置型でのみに有効な方法です。
また Dynamics CRM 2011 における 同様の記事 も合わせてご確認ください。

WCF 圧縮および SSL 暗号化

前回の記事では、IIS は多くのコンテンツタイプを圧縮していることを説明しました。
しかし、既定では MIME タイプ「application/soap+xml;charset=utf-8」を持つ WCF レスポンスは
圧縮されません。 そのため、CRM Outlook クライアントがオンラインになった際、
ネットワークトラフィックが増加しパフォーマンスが劣化します。

これらの問題は、WCF 圧縮や SSL 暗号化を利用することで軽減できます。

WCF 圧縮と SSL を利用することで下記の図のように大きな改善を達成しました。
以下の図は、Dynamics CRM 2013 Outlookクライアントを起動していくつかの既定のビューを
表示してからのネットワークの統計情報です。

最初既定の状態でベースラインをキャプチャしました。 そして WCF 圧縮のみ利用、SSL のみ利用、
そして WCF および SSL を組み合わせて利用した 3 パターンを再びキャプチャしました。

パターン1. WCF 圧縮だけ利用した場合、サーバーが応答するレスポンスサイズを最大 28 % 削減
できる 可能性があります。サーバーからクライアントへのトラフィックにのみ圧縮されることから、
リクエストサイズはわずかな変化があるだけです。

パターン2. SSL のみ有効な場合、要求と応答両方のネットワークを介するサイズを 45 %以上
少なくなりました。

Q. SSL を有効にすることでどのようにはネットワークトラフィックが削減されたのか?

A. Fiddler にてトラフィックを比較することにより、SSL が存在しない場合、WCF は独自の
暗号化を実施していることがわかります。WCF リクエストとレスポンスに渡された暗号化
されたデータは大きな量となる結果となりました。
SSL が有効な WCF の場合、独自の暗号化は不要でもはやそれら余分な暗号化データは
サーバーとの送受信上では渡されません。

パターン3. 圧縮および SSL が有効な場合、最大 94 %応答サイズを削減できます。

image

これによりかなりのネットワークトラフィックを削減できます。
なお、ローカルネットワークで実施する場合は、応答時間の差はほとんど目立ちません。
この方法による最大のパフォーマンス上の利点は、遅いネットワーク回線により待たされていた
外部の利用者のためにあります。ネットワーク待ち時間 77 ms、転送速度 192 KB/sec という
パフォーマンス数値は、実際私が社外でお客様と作業する際によく見られます。
遅いネットワーク速度のユーザーは、Outlook クライアントが完全にロードするのに 16 秒以内、
1 つのビューをロードするのに 5.5 秒程度かかります。SSL とWCF 圧縮を利用すると応答時間が 44 %
短くできます。

image

これはよい結果ですが、トラフィックの圧縮と暗号化はサーバーのパフォーマンスに
どのような影響があるのでしょうか?

ほとんどの場合、CRMサーバーは十分な性能を持つため圧縮と SSL による
オーバーヘッドはほとんど目立ちません。また IIS は CPU が 90 %を超えた場合、
50 %以下に低下するまで圧縮を自動停止する機能を持っています。
もしサーバーのパフォーマンスに懸念がある場合、ロードテスの実施がこの設定に
よる環境への影響を理解する一番の方法です。

 

WCF 圧縮を有効にする方法

CRMサーバー上でコマンドラインまたは ApplicationHost.config ファイルを手動で変更することで
圧縮を有効にすることができます。
注記:圧縮を有効にすると CPU 使用率が増加することがあります。

A. コマンドラインを利用して圧縮を有効にする

1. CRM サーバーにシステム管理者でログインします。
2. コマンドプロンプトをシステム管理者で開きます。
3. 下記のコマンドを実行します。

%SYSTEMROOT%\system32\inetsrv\appcmd.exe set config -section:system.webServer/httpCompression /+"dynamicTypes.[mimeType='application/soap%u002bxml; charset=utf-8',enabled='true']" /commit:apphost

4. 設定を有効にするため IIS リセットを実行します。

B. 手動で ApplicationHost.Config ファイルを変更して圧縮を有効にする

1. CRMサーバーにシステム管理者でログインします。
2. 下記のファイルをメモ帳で開きます。
C:\Windows\System32\Inetsrv\Config\applicationHost.config
3. “<dynamicTypes>” セクションを検索し、下記の内容に変更します。

<add mimeType="application/x-javascript" enabled="true" />

4. その下に下記の行を追加します。

<add mimeType="application/soap+xml; charset=utf-8" enabled="true" />

5. ファイルを保存して、設定を有効にするため IIS リセットを実行します。

注記: HTTP 圧縮の設定については下記を参考にしてください。
IIS 7 で HTTP 圧縮を構成する

- プレミアフィールドエンジニアリング 河野 高也