Dynamics CRM 2011 ネットワークパフォーマンス考察 - WCF パケットの圧縮

みなさん、こんにちは。

とても寒い日が続いていますが、いかがお過ごしでしょうか。気温が低く
日照時間も短いため気分も落ち込みがちですが、せめてブログの記事だけでも
エキサイティングな内容になるよう努めてまいります。

今回は、US の Dynamics CRM プレミアフィールドエンジニアリングチームが
公開しているブログより、パフォーマンスに関する記事を紹介します。
パフォーマンスを聞くだけでエキサイティングですね!!

元記事 : Enable WCF Compression to Improve CRM 2011 Network Performance

今までに一度でもネットワークトラフィックを解析したことがある方は既にお気づきだと
思いますが、Internet Information Service (IIS) は、画像や JScript ファイル、CSS や
HTML ページなど、様々なコンテンツを圧縮してからネットワークに送信しています。

圧縮を利用することで、データのサイズだけでなく全体の通信回数も削減できるため
サーバー、クライアント間のネットワークパフォーマンスの向上が期待できます。

Microsoft Office Outlook 用 Microsoft Dynamics CRM 2011 クライアントは、サーバー
との通信を行い際、Windows Communication Foundation (WCF) を利用しますが、
既定では IIS は WCF で利用する 'application/soap+xml;charset=utf-8' の mineType
を圧縮しないため、Dynamics CRM 4.0 と比較してネットワークトラフィックの増加や
パフォーマンスの低下が発生することがあります。

一般的な利用環境では、圧縮を有効にすることでパケットサイズが 30 - 40 % 程度減少
しますが、SSL を利用している環境では、80 - 90 % 程度パケットサイズが削減されることも
あります。

以下の表は IIS での圧縮を行う前と後の比較を行っています。このデータはカスタマイズを
一切行っていない Dynamics CRM 2011 環境で、データもサンプルデータのみの場合です。
こちらの結果より Outlook で複数のビューを参照した場合のパフォーマンスが向上している
ことが確認できます。

ビュー

圧縮なし

圧縮あり

SSL 環境で圧縮あり

活動

Bytes Sent: 82,234

Bytes Received: 971,139

Bytes Sent: 82,234

Bytes Received: 722,786

Bytes Sent: 53,249

Bytes Received: 36,658

取引先企業

Bytes Sent: 105,084

Bytes Received: 219,102

Bytes Sent: 105,084

Bytes Received: 149,424

Bytes Sent: 67,586

Bytes Received: 25,837

取引先担当者

Bytes Sent: 78,286

Bytes Received: 177,504

Bytes Sent: 78,286

Bytes Received: 122,090

Bytes Sent: 50,283

Bytes Received: 19,791

潜在顧客

Bytes Sent: 78,286

Bytes Received: 202,589

Bytes Sent: 78,286

Bytes Received: 141,021

Bytes Sent: 50,274

Bytes Received: 19,769

※補足 : IIS で圧縮を有効にしているため、クライアントからの送信は圧縮の有り無しでは
影響が見られません。SSL の場合には、非 SSL 環境より通信サイズが少ないのは、WCF で
利用しているバインディングとデータの暗号化が影響しているためです。

圧縮の設定方法

圧縮の設定は、コマンドラインまたは config ファイルを修正することで変更可能です。

注意: 圧縮を利用することでネットワーク帯域は節約できますが、CPU 使用率が上がります。
必要に応じて CPU 利用率の監視をお勧めします。

コマンドラインを利用した設定方法

a. Dynamics CRM サーバー上でコマンドプロンプトを開きます。

b. 以下のコマンドを実行します。Run the following command:

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

c. IISRESET を実行します。

ApplicationHost.Config を編集する方法

a. Dynamics CRM サーバー上で、以下のファイルをメモ帳で開きます。
C:\Windows\System32\Inetsrv\Config\applicationHost.config

b. 次のセクションを探します : “<httpCompression directory=”  
上記セクション配下に以下のような項目があります。
<add mimeType="application/x-javascript" enabled="true" />

c. 一番下に、以下の内容を付け足します。
<add mimeType="application/soap+xml; charset=utf-8" enabled="true" />

d. ファイルを保存して、IIRESET を実行します。

参考 : IIS を利用した HTTP 圧縮の追加情報は以下のリンクをご覧ください。
https://technet.microsoft.com/en-us/library/cc771003(WS.10).aspx

参考:英語のドキュメントですが、以下の文書でも、パフォーマンスの最適化に関する
情報が提供されています。
Optimizing and Maintaining the Performance of a Microsoft Dynamics CRM 2011 Server Infrastructure

まとめ

IIS の圧縮を利用する場合、CPU 負荷とネットワーク負荷のバランスを
取ることが重要にはなりますが、是非一度検証環境等でお試しください。

- Dynamics CRM サポート 中村 憲一郎