「秒間●リクエスト」の具体的な定義がモヤモヤしていたので調べてみた話

最近個人的にアプリケーションのみならず ミドルのあたりを触る機会が増えて、サーバのパフォーマンスを意識するようになってきた。
とはいえそのあたりの負荷テストに対する認識等、割とざっくりとやってしまっていたので ここらで一度しっかり落とし込んでおこうと考え、色々調べてみた。

特に「秒間にさばけるリクエスト数って、何をもって秒間●リクエストって言えるのか」 とか、
「秒間リクエストを測る際に、ユーザごとの端末の違いは考えなくて良いの?例えば有線のPCと3Gのスマホだと全然速度違うから、サーバ-クライアント間のコネクションが続く時間も変わってきてしまうんじゃないの?」
とか色々考えていたけど、調べているうちに自分なりに何となくハッキリしてきたので 情報の整理がてら共有。
もしかしたら認識誤りで 間違った事を言っているかもしれないので、その場合はご指摘いただければ本当に嬉しいです。

「秒間リクエストを測る際に、ユーザごとの端末の違いは考えなくて良いの?」について

結論から言うと、サーバが秒間でさばけるリクエスト数はユーザが使用しているネット回線には依存しない

これは速度の差が発生するのがどこのネットワークにおいてかを考えるとわかりやすいかも。
PCでもスマホでも ユーザ側のネットワークにおける速度が変われど、サーバ側における通信の速度は(PC/スマホごとにネットワーク側で別々の処理が行われていない、またはサーバ側でリクエスト元のIPに対して特定の帯域制限等をしていない 等の限りにおいて)変わらないことがわかる。
以下はそれを示した図である。

network

ユーザ側のネットワークの帯域制限(図で言うと Aくんの使用しているWiFiのネットワークにおける帯域制限)とか媒体のネットワークは、飽くまでユーザ側のネットワークにおけるものであり、さらに言うと、サーバ自体のネットワーク領域は同じなので、ユーザ側のネットワークの帯域はサーバがさばける秒間リクエスト数には関係しない。

ので、秒間リクエスト数を測る際に 秒間リクエストに直接関わってくるネットワーク周りの問題は、サーバ側のネットワークが提供しているスペック、つまり以下の部分となる。

network2

上記の赤枠で囲まれたネットワーク部分からサーバ間通信( アプリケーション自体のレスポンス、DBサーバのレスポンス速度等 )等を見て最終的なレスポンスの速度を判断し、ボトルネックを見つけて改善し続けていく工程が「秒間●リクエストをさばく」という事の意味なのかなと思った。

つまり「秒間●リクエスト」とは

「秒間●リクエストをさばける」事が保障するのは、その量のリクエストが来た時にサーバがダウンすることなく稼動し続けられる事、及びシステム全体におけるボトルネックの特定が可能になる事( アプリケーションの特定のSQLクエリが重く、結果的にAPサーバで遅延が発生している、各サーバ上では処理に時間がかかっていないがネットワークの帯域のスペックがそもそも微妙でレスポンスが遅れている 等)である。
言い換えると、サービスがユーザにとってサクサク見られるかどうかを”完全に保障するわけではない”

「秒間で沢山リクエストをさばける=ユーザがサクサクページを見られる」ではない

勿論、サーバが十分にリクエストをさばくことができないと 待ち行列ができてレスポンスが遅延してユーザがサクサクページを見られないので、サーバが想定されるリクエストを十分にさばけることは最低限保障されている必要があるが、さらにユーザがサクサクページを見られるようにするための工夫は秒間リクエストの話とは別に別途必要になる
例えば以下のような事を考慮する必要がある。

1. ターゲットとするユーザが主に使用するであろう端末

有線で見れば速いページでも、スマホ媒体向けに提供されている特定の回線で見たら遅い、且つサービスが提供するターゲットとなるユーザがスマホ媒体 なんてこともあるので、(当たり前だけど)ターゲットとする人達が利用するであろう端末での速度面の検証作業は必須になるだろうなあと思う。
それでもって、明らかに媒体に対してコンテンツのサイズが大きすぎる場合は圧縮したりキャッシュを利用したり何なりの手立てが必要になる

2. ターゲットとするユーザの居住地

基本的にインターネットは様々な異なるネットワークを経由してできているため、距離が遠ければ遠い程 パケットがネットワーク上を移動するのに要する距離・時間が長くなる。
更に、国によっては 海外IPのサーバに対して自動で検閲が入るようになっている関係で遅くなったり、一つの国の中でも南部と北部で異常に重くなったりする事もあるそうなので、特に海外ユーザ向けにサービスを展開する場合は基本的に サービスを提供するユーザに近い場所にサーバを置くのが良いらしい。

まとめ

サーバ側で「秒間●リクエスト」をはかる時、ユーザ側のネットワーク帯域までは見ない( ユーザが有線を使っていようが3G回線を使っていようが、最終的に到達するサーバ周りのネットワーク領域は同じで、サーバ側のネットワーク領域側で特別な設定をしていない限りレスポンスの速度も基本的に同じだから )
「秒間●リクエストをさばける」事が保障するのはその量のリクエストが来た時にサーバがダウンすることなく稼動し続けられる事システム全体におけるボトルネックの特定が可能になる事
・ 「秒間で沢山リクエストをさばける=ユーザがサクサクページを見られる」ではない
・ ただし必要最低限の秒間リクエスト数をクリアできないと 勿論ユーザへのレスポンス遅くなる
・ ユーザがサクサクコンテンツを利用する上で、秒間リクエスト数の話とは別にターゲットとなるユーザの媒体とか居住地は別途考慮する必要はある

…という認識です。

僕自身 まだまだ勉強不足な部分もございますので、「ここの部分根本から認識間違ってるよ」という部分がございましたら、優しくマサカリを投げていただければ幸いです。。。(´・_・`)

Written by Nisei Kimura ( 木村 仁星 )

- Sponsored Links -

<<

Top

>>