こんにちは、あるいはこんばんは。だいたいサーバサイドのエンジニアの(@taclose)です☆
みなさん、この本を読んだ事ありますか??
達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践
ISUCONをテーマとしながらWebパフォーマンスの改善の進め方を解説した本で、改善するなら一度は読む事をお勧めします!
とはいっても、いざWebパフォーマンス改善をしようと思っても中々糸口が掴めなくて難しいんですよね! 数学でいうなら、練習問題は見たけど、いざ演習やると解法がわからないっていう感じでしょうか(汗
そこで、TDDハンズオンに引き続き、弊社ではWebパフォーマンス改善ハンズオンを実施しました!
今回はそんなハンズオン開催を行った際のスライド資料や結果、考察をまとめて公開しようと思います。
対象読者は以下を想定
- WEBパフォーマンス改善のハンズオンをわが社でも開催するぞ!
- WEBパフォーマンス改善について学びたい!
では、本題に入ろうと思います。
WEBパフォーマンス改善ハンズオン
基本的な流れは、先ほどご紹介した書籍にあるprivate-isuというものを使って擬似的なSNSサービスのパフォーマンス改善を行うといったものです。 これを2日間に分けて座学とハンズオンを合計3時間〜4時間かけて実施しました。
スケジュール
1日目はこのあとに記載しているスライドをみれば詳細がわかりますが、座学としてパフォーマンス改善の方法をレクチャーします。 具体的なチューニング方法がこんなのあるよ!ではなく、計測→ボトルネックを見つける→ボトルネックを解決する→効果測定という流れを経験してもらいました。
2日目はボトルネックを見つけて、改善方法を悩んでもらいつつ、ヒントを出しつつハンズオンを実施してもらいました。
スライドはこちら
実際のスライドは以下になります。もし良かったら皆様の会社で、または個人でハンズオンされる際に参考にしてください。
※コマンドをコピーしたい場合はPDFとしてダウンロードしてくださいね!
学習結果(効果測定と気づき)
最初数百点だったスコアですが、3万点近くまで改善したチームがいました!1時間足らずでこの結果はすごいですね!
いくつかのチームに感想や改善の流れがどうだったかを聞いてみたところ
などなど...
反省点・感想
最初は1時間半x2日を予定していたハンズオンでしたが、みんな自主的に延長して合計4時間近くの開催となりました。 アンケートでも好評だったようで、これはまた来年もやっていいんじゃないかと思えました。
反省すべき点としては、以下のようなところがありました。
時間が全然足りてない!
今回のハンズオンでは大前提としてチームの中で誰かしらは「nginxの設定は出来る。」「mysqlのINDEXを張るコツを知っている」「ある程度はどこを修正すべきか勘所を知っている」そんな前提がある内容だったため、ハンズオン以前の所で時間を消費してしまったチームも発生してしまいました。(運営側の反省すべき点) せっかくボトルネックがどこかわかっても、どうアプローチすれば良いのかが判断付かず、悠長に調べる時間がなかったようで...申し訳ないOrz 他にも「土日使ってやりたかった」とかの意見もありました。私も確かにもっと時間欲しかった!(切実)
とはいえ、アプリも改修して、キャッシュの有効化までトライしているチームもあり、経験者がいるかどうかの差はでかかったようです! みんなも次は色々な改善方法を学んで是非リベンジしてほしいと思います!
経験の少ない人にはどこから取り掛かればよいのか、難しい
ヒント出し過ぎても面白くないのかなとアタフタしてたのですが、アンケート結果からすると難易度が高すぎたと感じました。 ハンズオンの時間は運営側が声かけするのも良いのですが、手が回らないと思います。 なので、時間経過毎に「こう計測するとボトルネックわかります。疑わしい所はここなのでコード読んでみましょう。このbreak臭いますね」と計測~改善までの流れを公開していくスタイルが良かったのではないかと思いました。
最後に
パフォーマンス改善は基本的にはトップダウン方式(正攻法を適応していく)よりもボトムアップ方式(遅い場所を直す)が良いと言われており、それは間違いありません。 でも、ボトムアップ方式でやる時に改善方法の知識の引き出しが少ないと改善効果の割に内部品質ばかりが下がるような最悪の事態にもなり兼ねません。
そういう意味では、ボトルネックな部分では一体何が行われていて、そこを回避する方法はどういったものがあるのかを日々学習していく事が重要になってきます。
最後になりますが、private-isuはDocker版もあります。 参考資料のURL一覧にeichisandenさんの「private-isuをdockerでセットアップした時のメモ」等貼っておきますので、是非参考にしながらみなさんもトライしてみてください!
ハンズオンみんなお疲れ様でした!
参考資料等
書籍:達人が教えるWebパフォーマンスチューニング 〜ISUCONから学ぶ高速化の実践
private-isu/manual.md at master · catatsuy/private-isu · GitHub