
こんにちは、GMOインターネットの元内です。
※このブログはイベントの振り返りブログであり実運用的、開発的な要素などはありません。
概要
PHP Conference 2018のGMOインターネットのブースにて、チューニングしたConoHa VPSは国内最速ConoHa WINGに勝てるのか?という企画を行いました(会場ではたくさんの応援をありがとうございました)。今回は、Webシステムインフラの高速化について とそれらを支える負荷試験と監視及び測定と可視化についてお話したいと思います.当日の雰囲気だけ知りたければツイートされてましたのでこちらをぜひ、ご確認お願いします.今回は可視化の部分と計測についてお話していきたいと思います。高速化についてはConoHa VPSとConoHa WING 速度対決を支える技術 前編についても読んでいただけると幸いです。
構成図
各コンポーネントが何をしているか詳細を書いてませんが大枠としてはこのような構成で行いました。
物理一台に計測と可視化と計測のツールを全部載せている感じです(Prometheus introduction overviewのarchitectを参考にしました).
構成図概要
- 各サーバーの負荷をNode_expoter で取得するようにしています。
- Conoha WINGのサイトの監視は別途Expoterを作成しました。
- 表示はGrafanaにインポートさせて確認できるようにしています。
- また、様々な事態に対してアラートをフックとしたメールが跳ぶようにしています。
可視化
監視プラットフォームを目に見える形にしてくれるコンポーネントであるチャートやダッシュボードがみんな大好きです(大好きですよね?)。例えば今回は、Prometheus使いましたが単体で時系列データからなにか作る余地や自由度はなかなか難しいものがあります(NagiosやZabbixに関しては語るまいや)、インフラエンジニアはコンパネや画面をセンス良く作れないの(上手く作れる人はごめんなさい)ですが、いまはダッシュボードやチャートを簡単に作れる素晴らしいプロダクトがたくさんあります。有名どころであれば GrafanaやSmashingのようなプロダクトがあり積極的に利用すべきだと思います。
#phpcon2018#phpcon#conoha
ConoHa VPS vs ConoHa WING
高速レンタルサーバーと若手エンジニアがチューニングするVPSのWordPress速度対決の結果が!
圧倒的に不利だと思われていたエンジニアが、最後の10分でまさかの逆転勝利!#てんや から帰って来た途端、豹変してた!?てんやで何があった!!w pic.twitter.com/Wc3gb4LPO4— gmo_recruit (@GmoRecruit) December 15, 2018
ちなみにこのツイートで表示している画像はGrafanaのダッシュボードです。
可視化についての話はEdward R. Tufte の
THE VISUAL DISPLAY OF QUANTITATIVE INFORMATIONやStephen FewのInformation Dashboard Designなどの素晴らしい書籍が多いのでぜひ、そちらもご覧ください。
Grafana
Grafanaとは分析と監視のためのオープンプラットフォームで時系列分析の為のオープンソースソフトウェアです。ちなみにGrafana EnterpriseやGrafana Cloudなどの商用サービスもありサーバーを準備することなく可視化を行うこともできるます。”Open Source Time Series DB Comparison”にオープンソースの時系列データベース実装がまとめられていますがこれらの内の多くをGrafanaはサポートしており、サポートされていないものもいずれは、サポートしていくでしょう(ほんまか?)。
Grafanaにはチュートリアル(動画もある)があるためそちらを参照していただけると良いと思います。機能についてはGrafana Features(ここのリンクには何もないです) を参考にしていただければどのような機能を使えば良いのか分かるのでぜひ、一読お願いいたします。前回のブログや構成図を見ていただけると分かるのですがPrometheus でデータは全て収集してPromQL(Prometheus Query Language)経由でGrafanaで読み取っている形になります(Using Prometheus in Grafana)。Grafanaはその他にも様々な機能があるのでぜひ、皆さん使ってみてはいかがでしょうか?
Grafanaをサンプル程度に使うのでしたら以下のコマンドですぐ使ってみることが出来ます。
docker run -d -p 3000:3000 grafana/grafana
※ちなみにこのブログでクエリの解説はしませんがやってるとインスタ映え‼??するダッシュボードが簡単にできます.
計測
計測とはある目的に役立てるためものの数量的状態をはかることでありウェブシステムのユーザー体験をツール等で定量的に計測することはとても難しいです。システムを計測する為のツールとしてはさまざまなものが存在しています(今回は紹介しないが商用のサービスも無限に存在しております)。基本的に無料で使えるものには以下のようなものが存在しております。
- – Apache Bench
-
Apache HTTP server benchmarking tool
-
- – weighttp
-
weighttp on github for easier collaboration – main repo still on lighttpd.net
-
- – h2load
-
h2load is benchmarking tool for HTTP/2 and HTTP/1.1. It supports SSL/TLS and clear text for all supported protocols.
-
- – Apache JMeter
-
Apache JMeter may be used to test performance both on static and dynamic resources, Web dynamic applications.
-
- – LOCUST
-
An open source load testing tool.
Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
-
今回は、Webシステム計測ツールとしてApache Benchを採用しました。理由としてはApache Bench はインストールも利用も比較的に簡単で世間一般的に広く知れ渡っているからです。シナリオテストが必要な場合には他のツールを検討する必要がありますが今回のような、簡易的に実行するにはうってつけです(おい、他人が運用しているレンタルサーバーに意図的に負荷を掛けていいのかよ[開発者がそれぐらいならいいって言ってたもん!!!!!!!!!][皆さんも気を付けましょう…])。
Apache Bench の特徴
- – 単一のURLに対する試験を簡単に行える
- – いくつかのメゾットに対応している
- – リクエストごとにパラメータは変更できない
- – シナリオを記述できない
- – CPUコアを1つしか利用できない
本番では以下のコマンドを実行しました
ab -n 100 -c 10 https://xxxxxxxxxx-xxxxxxxxxxxxx.xxx/
-n でリクエストの総数を数値で指定して -c で同時に発行するリクエスト数を指定しています。これ以上、増やすと VPSのMemoryの限界値で処理しきれなったのでこのような値設定になりました。ちなみにWINGは同時接続数でいうと計測サーバー側の限界値が先に来てしまうので正確に計測できていません(すみません)。
これらの値の内”Time per request”をシェル芸にて整形してpushgatewayにcurl で飛ばしてました。計測に関してはこんな感じで雑()に実施していたため計測上勝ってしまう結果になりましたが最終的な”Percentage of the requests served within a certain time (ms)”ではWINGに勝利することが出来ませんでした。
最後に
『ConoHa VPSとConoHa WING 速度対決を支える技術 後編』 を最後まで読んでくださってありがとうございます。これらの情報がいつかの皆様の一助となればよいと思います。