2019年02月13日(水)

ConoHa VPSとConoHa WING 速度対決を支える技術 前編

shuya motouchi

こんにちは、GMOインターネットの元内です。

※このブログはイベントの振り返りブログであり実運用的、開発的な要素などはありません。

概要

2018年12月15日 に開催されたPHP Conference 2018のGMOインターネットのブースにてチューニングしたConoHa VPSは国内最速ConoHa WINGに勝てるのか? という企画を行いました(会場ではたくさんの応援をありがとうございました)。今回は、Webシステムインフラの高速化についてと、それらを支える負荷試験と監視についてお話したいと思います(測定と可視化については後編で書いていきます)。当日の雰囲気だけ知りたければツイートされてましたのでこちらをぜひ、ご確認お願いします。

 

ConoHa WINGとは?

国内レンタルサーバーサービスの中でWebサーバー処理速度を調査したところ、ConoHa WINGの処理速度が最も速く、2位に約2倍の差をつけて第1位という結果となりました。国内No.1の圧倒的な速さを誇るConoHa WINGで、ストレスのない高速なサーバー環境を手に入れましょう。

(2018年12月サイトより引用)

ConoHaが出した新しいレンタルサーバーですが、今回は一切話しません。が比較対象です(ちなみにベンチ用のサイトを表示できるようになるまで15分程度で構築できて最初から9msを叩き出しました。とことんシンプルで使い易く高速な実行環境が得られてよいなとおもいました )。ConoHa WINGが叩き出した9ms をConoHa VPSで超えることが今回のゴールです。では、なぜ ConoHa WINGがここまで自信を持って高速化を謳っているのかというのは、ConoHa WINGを支える技術などが参考になると思います。

Webインフラの高速化

wwwが誕生してLAMP のようなWebサービススタックのシステムモデルが登場して以降 、人々は様々な最適なシステムを作っては高速化に挑んできました。今回はコンテンツを動作させるソースコードには一切手を入れずにインフラの設定だけでどれだけ早くなるのか、そして、ConoHa WINGを超えることはできるのか?といったチャレンジを行いました。

試行錯誤しまくったのでまとまったログがない!

高速化はつれずれなるままに挑戦したので、全てが高速化に寄与したわけでもすべての設定が完璧に正しいとも思っておりませんし、設定に対する完璧な因果も分かりませんし、自分の技術選定が正解であるとは思ってません。が、突然VPSを高速化してレンタルサーバーに速度をチャレンジをしてくれと頼まれた時の一助になるやもしれませんので、どのような変更を行ったか記載していきます。

初期構成がこちらです。

一般的な環境で設定を一切いじっていない場合で負荷試験を行うと、70msほどでした。

70msから45msにするためにしたこと

ネットワーク設定

tcpの設定を中心に変更を行いました。

Mysql からMariaDBに移行した

Mysql よりMariaDBの方が早いと聞いていましたが今回のサイトだとベンチマークには寄与しませんでした。

php5系からphp7.0系に移行した

個人的には一番phpのアップデートがインパクトが大きかった所感です。

Apacheの設定最適化

画像圧縮とベンチマークのアクセスしか来ないので接続数の最適化を行いました。

45msから38msにするためにしたこと そこからやってたこと

ApacheからNginxへの移行

Apache からNginx に移行しました。諸々の設定を行ったら、チューニングしたApacheと変わらない値をだしはじめたのでチューニング終了。

php7.0系からphp7.3系に移行

これをやったら平均的に42msぐらいになった。言語のバージョンアップのインパクトはやはり大きいと思いました。

php‐fpmの設定の最適化

これをすると大体、41msぐらい出せるようになりました。

NginxからH2oへの移行

NginxからH2oに移行しました。NginxやApacheでの設定をH2oでも行ったら39msぐらいになりました。

MariaDBの設定の最適化?

認証オフや接続の設定など変更を行うと38msぐらい出せてきました(本番では絶対にできませんね)。

そこから急に2msになった時にしたこと

キャッシュサーバーの設置

Nginxで諸々のコンテンツをキャッシュすることにしました。勝利することができました。ひゃっほーーーーいっ!勝ちましたが計測の章で後述しますが、全面勝利というわけにはいきませんでした…

最後に

これらの情報は、インターネットで”Web高速化 インフラ”とかで調べると出てくるのでこれ以上詳しくは書きませんが、疑問があれば何かしらの形で連絡ください!

 

その他の技術

監視

現代ではサーバーを監視する方法は沢山あります。OSSであればZabbixNagios,Cacti,Prometheusなど、商用サービスにはmackerelなどがあります。SaaSというビジネス形態が普及しているというのは、ある種、普遍的であることが言えると思いますが、今回とはまた別の話です。

監視とは、サービスだけではなくビジネスを稼働させ続けさせるものでなければならない などは有名な言葉だが、今回はビジネス的な要件が一切ないので高速化に寄与するリソースの諸問題の観測だけできればよいでしょう。

今回、必要なのはあくまで負荷情報だけです。複雑なアクセスログやイベントログの収集には人力を用いて対応します。その為、Prometheusを選びました。Prometheusはイベントログや個々のイベント情報を保存するのには適していません。また、電子メールアドレスやユーザー名などの濃度の高いデータに最適な選択でもありません。Prometheusは運用監視のために設計されており、カーネルスケジューリングや失敗したスクレイピングなどの要因によるわずかな不正確さや競合状態がシステムとして許容されています。Prometheusはトレードオフを作り、完璧なデータを待っているよりも99.9%正しいデータをあなたに与えることを選択しています。つまり、何となくデータを保持し続けることを目標にしており厳密性が第一なお金や請求を含むアプリケーションでは、プロメテウス使用するのに慎重になる必要があります。Open Source Time Series DB Comparisonなどを読むと時系列DBについていくつかの考察を読むことが出来るので一読お願いします。

またPrometheus は一つのことをし、それはそれを上手くやるシンプルで強力なデータモデルと、アプリケーションやインフラストラクチャのパフォーマンスを分析できるクエリ言語を備えています。

 

プロメテウス以外の形式でメトリクスを公開するサードパーティ製ソフトウェアは expoter と呼ばれ、HAProxy,MySQL,PostgreSQL,Redis,JMX,SNMP,Consul,およびKafkaなどもさらに多くのものを含みます。これらは自作もできるのでぜひ、試してみてください。

 

Prometheusは2012年に始まり、2016年7月にバージョン1.0がリリースされた、音楽共有サービスを手がけるSoundCloudが開発したもので、現在は独立したプロジェクトとしてLinux Foundationのクラウド関連オープンソースプロジェクト”Cloud Native Computing Foundation”の支援の下活発な開発が続けられており、2017年11月9日にはメジャーアップデート版となるバージョン2.0がリリースされており、また、2018年9月にはCloud Native Computing Foundation Announces Prometheus Graduationが発表されました。

PromConなどのコミュニティやOpenMetricsなどの標準化向けた取り組みもあるため、今後の発展にも大いに期待できます。

 

実際にPrometheusでやってたこと

当日のVPSサーバーの監視(Node_Expoter)、WINGの監視(expoterの自作[これは別途ブログにします])を行っておりました。その他にもab計測結果の反映にはPushGatewayを用いてました(ちなみに,PushgatewayはPrometheusをpullからpushに変換する方法ではありません)。

具体的なエンドポイントを公開するわけにはいきませんが、似たような構成であるPrometheus Live Demoを紹介しておきます。

当日の構成

また、オライリーからもPrometheus: Up & Running という書籍が出ているので、もし利用機会があればぜひ読むことをおススメします。

最後に

『ConoHa VPSとConoHa WING 速度対決を支える技術 前編』 を最後まで読んでくださってありがとうございます。これらの情報がいつかの皆様の一助となればよいと思います。

後編ではGrafanaを用いた可視化と負荷テストとシステム評価について記載していこうと思います。

 

この記事をシェアする

関連のおすすめ記事

CAREERS
エンジニア積極採用中

GMOインターネットグループでは、積極的な採用活動も行っています。GMOインターネットグループのエンジニア採用情報は下記リンクからご覧になれます。