コネクション棄却率と応答時間

2008年8月27日(水)
佐竹 伸介

データから最適な設定を考える

 「第2回:コネクション受付制御のパラメータ(http://www.thinkit.co.jp/article/118/2/)」は、Webサーバー構築ソフトウェアApacheにおいて、ユーザーの要望(確実なコネクションの確立、迅速な応答)に応えるための代表的な設定項目として「MaxClients」および「KeepAlive」の説明を行い、それぞれの設定が密接に関係していることについて説明した。

 最終回となる今回は、「KeepAlive」や「MaxClients」の設定を考えるとき必要であるWebサーバーの転送ファイルサイズ、新規クライアントとリクエストの到着について過去の研究結果から考察する。そして最後に、到着リクエスト数増大による棄却率や応答時間への影響について説明する。

Webサーバーの転送ファイルサイズ

 クライアントからのファイル転送要求に対し、Webサーバーが転送するファイルの大きさは、ネットワークやサーバーの負荷に大きな影響を与える。つまり、ユーザーへの応答時間や棄却率を考えるとき、検討すべき重要な要件の1つであると言える。

 転送ファイルサイズの大きさは、過去に行われた測定データの分析によると、一般的なWebサーバーにおいて、共通した特徴を有していることが明らかにされている。一般的な分布特性を図1に示す。

 図1からわかることは、まず、小さいファイルの割合が非常に大きいことである。小さいファイルとは、HTMLファイルや画像ファイルなどのことであり、一般的なWebページの大部分がこのようなファイルにより構成されていることを表している。

 次に、すそが非常に長くなっており、大きなファイルの転送も無視できないことである。写真データや音声・動画ファイル、マニュアルのファイルなどが、これら大きなファイルに該当するものと考えられる。

 もっとも、これらの特徴はWebサイトごとに多少異なる。例えば、テキストデータを中心としたWebサイトでは、小さいファイルの割合がもっと大きくなり、反対に動画像を配信しているWebサイトでは、大きなファイルの転送が占める割合が大きくなる。

 しかし、過去のさまざまな研究によると、傾向に大きな変化はないことが報告されており、この傾向を知ることは非常に重要である。

 以上で説明した一般的な特性から、Apacheの設定をどのように考えればよいのかを検討する。まず、小さなファイルの転送が頻繁に行われることから、KeepAliveをあまり小さくしすぎてはいけない。1つのWebページに含まれるファイルの転送要求ごとにコネクションの確立・解放を繰り返してしまうからである。過去の研究から約1秒が妥当であると報告されている。

 また、大きなファイルの転送については、発生頻度が少ないことから、コネクションの確立・解放による影響は小さい。しかし、長期間のファイル転送は、転送期間中、ネットワークやサーバーに負荷をかけることになる。よって、Webサーバーを過負荷状態にしないために、同時接続数を制限するMaxClientsの調整が不可欠であり、サーバーの処理能力やネットワークの帯域を考慮し、必要以上に大きくしすぎないことが重要である。

 次は、Webサイトに訪れたユーザーの挙動の特性について考える。

ユーザーのWebサイトで挙動特性

 前回およびここまでの説明は、Webサイト側のみに着目し、「MaxClients」および「KeepAlive」の設定が、一般的に、どのようにコネクション棄却率やユーザーへの応答時間に影響を与えるかについて説明してきた。

 しかし、実際に棄却率や応答時間を考える場合、当該Webサイトに新規ユーザーが訪れる特性や閲覧中のユーザーがWebサイト内の新たなWebページを閲覧する特性(クリックするタイミングなど)といった、ユーザーの挙動を知ることは非常に重要である。

 実際、それらユーザーの挙動によりネットワークやサーバーにかかる負荷は大きく変動することが知られている。よって、これらの特性を知り、サーバー負荷の急激な上昇に対する対策を講じなければならない。新規クライアントの到着と新たなページ閲覧要求の到着の特性は異なるので、それぞれについて説明する。

 まず、新規クライアントの到着間隔は過去の研究により、「1.おのおののユーザーは干渉せず、それぞれの都合でランダムにWebサイトに到着する(独立性)」「2.ある期間内に到着するユーザーの数は開始時刻にかかわらず同一の分布に従う(定常性)」「3.非常に短い期間に2つ以上のユーザーが同時に到着する確率は無視できるほど小さい(希少性)」という3つの性質を有しており、指数分布に従う到着間隔すなわちポアソン到着(参考:ポアソン分布(http://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A2%E3%82%BD%E3%83%B3%E5%88%86%E5%B8%83))で近似できることが知られている。この分布の特徴は、平均値に比べ、小さい値での発生確率が高いことである。また、比較的大きな値も発生することである(図2)。

 次に、既にページ閲覧を行っているユーザーが同一Webサイト内での新たなページ閲覧を行うのに要する到着間隔について説明する。この到着間隔はユーザーの思考時間であり、シンクタイムと言われている。また、ユーザーによって大きく異なることが知られている。

 例えば、閲覧するWebページにユーザーが欲している情報がない場合、すばやく次のページへ移動するのでシンクタイムは短い。反対に、欲している情報がそのページに含まれている場合、長い時間をかけてそのページを閲覧するので、シンクタイムは長くなる。過去の研究によると、この特性はPareto分布で近似できることが報告されている。このPareto分布は先ほど説明した指数分布に比べ、短い時間間隔での発生確率が高く、また、すそが非常に長いのが特徴である(図2)。

急激な負荷上昇への対応

 ここまで説明してきた2つの特性から、もっとも注意しなければならないのは、共に、ある期間に集中的にリクエストが到着する可能性を有していることである。Webサイトへの集中したリクエストの到着は、サーバーの負荷を急激に上昇させる原因となり、最悪の場合、サーバーがダウンしサービスを提供できなくなる可能性もある。

 しかし、あらかじめそのような到着を想定し、すべてのリクエストに対応できるようなシステムを備えておくことは現実的ではない。ユーザーとWebサイトが許容できる棄却率および応答時間を検討し「MaxClients」や「KeepAlive」の値を調整することで、サーバーの処理能力を十分に生かすことが必要である。それでも、対応できないほどの負荷がWebサーバーにかかる場合は、複数台のサーバーにより構成されるWebサーバークラスタを検討しなければならない。

 ここでは、2つの特性のみ簡単に説明したが、実際にはWebページの人気度、Webページに含まれるファイル数、サーバーの処理能力や提供されるコンテンツの種類(HTMLファイル、画像ファイル、音声ファイル、動画ファイルなど)なども考慮しなければならない。

 次に到着リクエストと棄却率について考える。

到着リクエスト数増大による棄却率への影響

 ここまで説明したさまざまなWebサイトの特性やユーザーの挙動特性を知ることができれば、モデル化を行うことが可能である。よって解析またはシミュレーションにより、棄却率や応答時間を算出することができる。KeepAliveやMaxClientなどを設定後、すぐに実証実験を行っても構わないが、解析やシミュレーションにより期待される結果を知り、その後、実証実験を行った方が効果的である。

 ここでは到着リクエスト数の増大が棄却率およびシステム時間(サーバー処理時間)に及ぼす影響について解析結果を示す。この結果により、本連載で述べてきたことを証明することができる。

 図3は、サーバー1台で最大同時接続数をKと設定した場合における「(1)コネクション棄却率(Y軸対数表示)」および「(2)平均システム時間の性能曲線」を示す。コネクション棄却率とは、コネクション確立要求がサービスを受けられず、棄却される確率を表す。また、平均システム時間とはサーバーにリクエストが到着してから、そのリクエストに対する処理が完了するまでに要する時間のことである。横軸はトラヒック量(到着するリクエスト量)を表す。

 図3の(1)から、K(同時接続可能なコネクション数)が大きくなるほど、棄却率が小さくなっていることが確認できる。しかし、Kの値に関わらず、トラヒック量が大きくなるに従い、棄却率は急激に上昇し、最終的には1に収束していることがわかる。これは(2)を参照していただければわかるが、K、トラヒック量ともに大きくなることで、個々のリクエストに対するシステム滞在時間が増大するからである。すなわち、コネクション確立から解放までに要する時間が長くなり、新規のコネクション確立要求を受け入れにくくなっているからである。

 このような結果を示すことで、許容できる応答時間と棄却率を決定し、同時接続数の最大値を設定することが可能となる。予想されるトラヒック量、許容できる応答時間および棄却率を決定し、2つの性能曲線から同時接続数を決定すればよい。

 しかし、同時接続数が決定できない場合は、所望する応答時間・棄却率のどちらか一方、または両方について要求する性能を下げるしかない。性能を下げることができない、または、同時接続数が少ない場合は、もはやそのサーバーで処理することは困難である。よって、高性能なサーバーに変更する、もしくは複数台のWebサーバーによるクラスタ構成を検討するなどの対策を講じなければならない。

最後に

 本連載では、3回にわたり「高速かつ確実なWebサーバー」という題目のもと、Webサーバーにおけるコネクション受付制御について説明した。

 本連載を通してWebサーバーの性能を最大限に利用し最大のパフォーマンスを得るためには、サーバーだけでなくユーザーの挙動なども考慮しなければならないことを認識し、今後のWebサーバー構築に生かしていただければ幸いである。

平成5年岡山電業(株)入社後、ネットワークシステムの提案・設計を主たる業務として従事。平成15年岡山県立大学大学院入学。平成20年同大学院修了。主にWebサーバシステムの負荷分散に関する研究を行っている。博士(工学)。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています