はじめに
第1章 ISUCONのススメ!
第2章 ISUCONは難しい?
第3章 ISUCONの練習をしよう!(環境構築編)
第4章 ISUCONの練習をしよう!(性能改善編)
第5章 ISUCONの練習をしよう!(本番対策編)
おわりに
タイトルにもあるISUCONとは、LINE株式会社が運営窓口となって毎年開催している「お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル」1です。数百チームの参加者が一斉に、朝から晩まで、同じWebサービスのチューニングに取り組み、性能の高さを競います。様々なレイヤのWebサービスの知識、作業速度、チームワークが問われる面白さがあります。しかし、Webサービスの開発・運用の経験が少ない方にはとっては、ハードルが高い面もあります。そこで、私たちのこれまでのISUCONの経験を振り返って、練習方法を詳しく解説する本を書こうと思いたちました。本書がどなたかのISUCON参加のきっかけになること、また、性能改善を学ぼうとする方の役に立つことを期待して、前書きとします。
本書では、ISUCON9予選問題(2019年)を題材にしています。練習用の環境構築からWebサービスの性能計測、修正とその結果評価までを具体的な手順とともに解説します。本書を読むことで性能改善のプロセスが身に付き、ISUCONでの動き方が分かります。
・「ISUCONに参加してみたいが、どのように勉強すればよいか分からない」
・「ISUCONに参加したが、何をすればよいか分からなかった」
・「Webサービスの性能改善ができるようになりたい」
という方を想定読者としています。また、Linux OSの基本的な操作を前提知識としています。
・第1章「ISUCONのススメ!」
─ISUCONの魅力について説明します。
・第2章「ISUCONは難しい?」
─ISUCONでどんなことを行うかについて説明します。
・第3章「ISUCONの練習をしよう!(環境構築編)」
─ISUCONの練習のための環境構築方法を説明します。ISUCON9予選問題を題材にします。
・第4章「ISUCONの練習をしよう!(性能改善編)」
─前章の環境を使い、具体的な性能改善方法を説明します。
・第5章「ISUCONの練習をしよう!(本番対策編)」
─本番に向けて、事前に準備しておくとよいことを説明します。
「ISUCON」は、LINE株式会社の商標または登録商標です。2
本書では、次のサービス・ツール・ライブラリ・イラストを利用しています。
・サービス
─Google Cloud Platform3
・ツール・ライブラリ
─RLogin4
─pt-query-digest5
─tkuchiki/alp6
─najeira/measure7
─Netdata8
・イラスト
─いらすとや9
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
ISUCON1は、「Iikanjini Speed Up CONtest」の略称で、公式ブログには次のように定義されています。2
お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。
ISUCONには1~3人のチームで参加します。Webサービスが稼働するサーバが与えられ、時間内に可能な限り性能を改善します。そのスループットの高さをベンチマーカーが採点し、スコアの高さを競います。
ISUCONにエントリーすると、まずは予選に挑むことになります。予選で上位の成績を収めると、本戦へ進めます。2019年に開催されたISUCON9では、予選には計598組のチームが参加し、勝ち残った32組が本戦に参加しました。3ISUCON9本戦の優勝賞金は100万円です。
2020年はISUCON10が開催され、参加登録開始からわずか2日弱で定員の500チームが集まり、参加登録が締め切られました。Twitter4をフォローしておくと、最新情報をウォッチできます。
私たちが考えるISUCONの楽しさとして、次の3つを挙げます。
スコアはダッシュボードで全チームに可視化され、現在の順位が分かるようになっています。また、全体の最終順位も発表されます。競技化されていて、「勝ちたい」というモチベーションが湧きます。
自らの手で行ったWebサービス改善の効果を、数値で明確に実感できます。競技中は「想定通り性能が上がらない」「エラーで動かない…」という辛い時間が多いですが、その分スコアが実際に上がったときは達成感があります。
ISUCONは基本的にチーム戦であり、作業分担や意思疎通の戦略が問われます。自分の得意領域を活かしつつ、メンバーと協力して高スコアを目指します。皆で1つの目標に向かって連携する一体感が得られます。
ISUCONは楽しいだけでなく、エンジニアとしてのスキルアップにもつながります。
ここまでの内容で、ISUCONに対してハードルが高いと感じた方もいらっしゃるかもしれません。しかし、逆にこういったコンテストにまずは参加してみることで、学習のモチベーションに繋がることもあります。私たち自身、初参加時はほとんど何もできなかった悔しさから、次はもっとできるようになろうという気持ちが湧いてきました。
ISUCONでは、アプリケーションからインフラまで、Webサービス全般の知識が広く求められます。例えば次に挙げるようなことを行います(それぞれ第4章で解説します)。
・スロークエリログを解析して重いSQLを特定する
・アプリケーションの処理時間を計測して遅い箇所を特定する
・N+1問題を解消する
これらの経験は、Webサービスの開発・運用の仕事にも役立つでしょう。性能改善ができるエンジニアになりたいと思っている方にも、お勧めのコンテストです。
前章では、ISUCON参加をお勧めしました。しかし、Webサービスの開発・運用の経験が少ない方の場合、どう動き始めたらよいか分からないかもしれません。ISUCONには、次のようなハードルがあります。
ISUCON参加で得られるものに、Webサービス全般の知識を挙げました。裏を返せば、それらが求められるということでもあります。一例ですが、ISUCONでは次のようなシーンがあります。
・アプリケーションレイヤ
─ソースコードを修正する
─SQLを修正する
─アプリケーションログを確認する
・インフラレイヤ
─ターミナルを用いてサーバにアクセスする
─Linux OSをコマンドで操作する
─WebサーバやDBの設定ファイルを修正する
Webサービスを改善する前提として、こういった知識はある程度身につけておく必要があります。
ISUCONは性能改善の繰り返しですので、プロセスの理解が重要です。基本的に次の繰り返しです。
・構成把握
・計測
─ロギング、プロファイリング
・修正
─修正内容の導出
─修正実施
─効果測定
これらの難しさを克服し、本番で高スコアを実現するためには、練習するのが一番です。ISUCONの過去問は公式ブログで公開されており、練習に利用できます。
次章から、次の3ステップに分けて練習方法を説明します。
・練習用の環境を構築する
・性能改善のプロセスを実施する
・本番に向けて準備する