WEBサイトのベンチマークテストはサービス稼動前に行うべき非常に重要な検証です。
そこで、同時セッションがどのくらいのアクセスに耐えられるかを測るために、"ab"コマンドというのがあります。
最近のLinuxOSであれば、デフォルトで入っているしMacターミナルでも、普通に使えます。
abコマンドについて
abコマンドは「ApacheBench」の略で、apacheアクセスを機械的にコマンドラインで行うことができるので、サーバー負荷などを簡単に計測できます。
例えば、同時アクセスで瞬間的に1万PVほど発生したら、サーバーってどうなるでしょうか?
エンジニアは、こうした経験を、本番サーバーで経験することが多く、「サイトが重くて見れない」「ダウンしてしまった」などの苦い体験をする事になります。
そして、そもそもサービス構築の際に、瞬間セッションがどのくらい耐えられるかという質問に性格に答えられるエンジニアが少ないのも事実です。
このabコマンドを使って、レスポンス時間が、ロスなくアクセスできる数値を本番開始前や、アイドルタイム時に計測しておくだけで、ユーザーアクセスがどこまで可能かを知ることができます。
それが知ることができたら、何が得するかって?それは、想定するPV数が、負荷上限値より上回っているのであれば、サーバーをバランシング化して、増やしてあげることで、ユーザー数によるサーバーダウンや遅延などをコントロールすることができます。
サービス初期段階でこのレベルの思考を持てるエンジニアは、障害に強いエンジニアと言えるかもしれませんね。
でも、これって本番で痛い目を見た事があるエンジニアでないと、なかなか思考がそっちに向かないんですよね。
エラーがでちゃうよ
使って見て、いくつかエラーがでるポイントがあったので、列挙しておきます。
1) ドキュメントルートは"/"(スラッシュ)で終わらないと、エラーになる。
サンプルでGoogle.comを使わせてもらいましたが、こうした場合は、きちんと"/"スラッシュをつけないとエラーがでます。
$ ab -n 100 http://google.com
ab: invalid URL
Usage: ab [options] [http[s]://]hostname[:port]/path
Options are:
...(省略)
2) localhostは使えない。
ローカル環境で計測するときなどは、気をつけましょう。
ちなみに、"127.0.0.1"は使えますよ。
$ ab -n 100 http://localhost/
This is ApacheBench, Version 2.3 < $Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking localhost (be patient)...
Test aborted after 10 failures
apr_socket_connect(): Invalid argument (22)
3) -nや-cに以上に大きい数値を入れると、死にます・・・orz
当たり前ですが、その数値分のアクセスが発生します。
GoogleAnalyticsなどの数値にもIPアドレス除外などをしていないと、計測値に加算される上、自分ではないサーバーにアクセスして、サーバーを落としてしまった場合、かなり大きな問題になる可能性があります。
くれぐれも、悪さをしないように、気をつけましょうね。
仮にライバル会社などのサーバーを落とそうと、abコマンドで"-n 100,000,000"一億アクセスなんてことをやってしまうと、送信したIPアドレスが簡単に突き止められてしまうので、即刻御用になりかねませんからね。
便利と不便は背中合わせ
非常に危ないように感じるコマンドですが、コマンド一つで、負荷計測ができるというのは、かなりのメリットでもあります。
商用WEBサイトなどであれば、最大ユーザーアクセス数は、そのサイトの売り上げ上限値として計算する事ができるし、どのくらいの売り上げでサーバー台数を計算する事ができたら、スケーリング時の非常に重要な予測原価が立てられるという事です。
技術よりというか、経営よりの思考ですが、今時のエンジニアは、この辺にも詳しくなっている必要があるという事も同時にお伝えしたいと思います。
0 件のコメント:
コメントを投稿