目次

はじめに

第1章 ISUCONのススメ!

1.1 ISUCONとは
1.2 ISUCONの楽しさ
1.3 ISUCONで得られるもの

第2章 ISUCONは難しい?

2.1 ISUCONのハードル
2.2 ハードルをどう超えるか

第3章 ISUCONの練習をしよう!(環境構築編)

3.1 ISUCONの環境イメージ
3.2 GCPを用いた環境構築

第4章 ISUCONの練習をしよう!(性能改善編)

4.1 構成把握
4.2 計測
4.3 修正

第5章 ISUCONの練習をしよう!(本番対策編)

5.1 準備項目リスト
5.2 後は参加するだけ!

おわりに

はじめに

 タイトルにもある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

免責事項

 本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。

1. http://isucon.net/archives/50188676.html

2. http://isucon.net

3. https://cloud.google.com/docs/overview

4. http://nanno.dip.jp/softlib/man/rlogin/

5. https://www.percona.com/doc/percona-toolkit/LATEST/pt-query-digest.html

6. https://github.com/tkuchiki/alp

7. https://github.com/najeira/measure

8. https://github.com/netdata/netdata

9. https://www.irasutoya.com/p/terms.html

第1章 ISUCONのススメ!

1.1 ISUCONとは

 ISUCON1は、「Iikanjini Speed Up CONtest」の略称で、公式ブログには次のように定義されています。2

お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。

 ISUCONには1~3人のチームで参加します。Webサービスが稼働するサーバが与えられ、時間内に可能な限り性能を改善します。そのスループットの高さをベンチマーカーが採点し、スコアの高さを競います。

 ISUCONにエントリーすると、まずは予選に挑むことになります。予選で上位の成績を収めると、本戦へ進めます。2019年に開催されたISUCON9では、予選には計598組のチームが参加し、勝ち残った32組が本戦に参加しました。3ISUCON9本戦の優勝賞金は100万円です。

 2020年はISUCON10が開催され、参加登録開始からわずか2日弱で定員の500チームが集まり、参加登録が締め切られました。Twitter4をフォローしておくと、最新情報をウォッチできます。

1.2 ISUCONの楽しさ

 私たちが考えるISUCONの楽しさとして、次の3つを挙げます。

競技としての楽しさ

 スコアはダッシュボードで全チームに可視化され、現在の順位が分かるようになっています。また、全体の最終順位も発表されます。競技化されていて、「勝ちたい」というモチベーションが湧きます。

Webサービスを改善する実感

 自らの手で行ったWebサービス改善の効果を、数値で明確に実感できます。競技中は「想定通り性能が上がらない」「エラーで動かない…」という辛い時間が多いですが、その分スコアが実際に上がったときは達成感があります。

チームで協力する楽しさ

 ISUCONは基本的にチーム戦であり、作業分担や意思疎通の戦略が問われます。自分の得意領域を活かしつつ、メンバーと協力して高スコアを目指します。皆で1つの目標に向かって連携する一体感が得られます。

1.3 ISUCONで得られるもの

 ISUCONは楽しいだけでなく、エンジニアとしてのスキルアップにもつながります。

学習のモチベーション

 ここまでの内容で、ISUCONに対してハードルが高いと感じた方もいらっしゃるかもしれません。しかし、逆にこういったコンテストにまずは参加してみることで、学習のモチベーションに繋がることもあります。私たち自身、初参加時はほとんど何もできなかった悔しさから、次はもっとできるようになろうという気持ちが湧いてきました。

Webサービス全般の知識

 ISUCONでは、アプリケーションからインフラまで、Webサービス全般の知識が広く求められます。例えば次に挙げるようなことを行います(それぞれ第4章で解説します)。

 ・スロークエリログを解析して重いSQLを特定する

 ・アプリケーションの処理時間を計測して遅い箇所を特定する

 ・N+1問題を解消する

 これらの経験は、Webサービスの開発・運用の仕事にも役立つでしょう。性能改善ができるエンジニアになりたいと思っている方にも、お勧めのコンテストです。

1. 「ISUCON」は、LINE株式会社の商標または登録商標です。http://isucon.net

2. http://isucon.net/archives/50188676.html

3. http://isucon.net/archives/53570241.html

4. https://twitter.com/isucon_official, @isucon_official

第2章 ISUCONは難しい?

2.1 ISUCONのハードル

 前章では、ISUCON参加をお勧めしました。しかし、Webサービスの開発・運用の経験が少ない方の場合、どう動き始めたらよいか分からないかもしれません。ISUCONには、次のようなハードルがあります。

Webサービス全般の知識

 ISUCON参加で得られるものに、Webサービス全般の知識を挙げました。裏を返せば、それらが求められるということでもあります。一例ですが、ISUCONでは次のようなシーンがあります。

 ・アプリケーションレイヤ

  ─ソースコードを修正する

  ─SQLを修正する

  ─アプリケーションログを確認する

 ・インフラレイヤ

  ─ターミナルを用いてサーバにアクセスする

  ─Linux OSをコマンドで操作する

  ─WebサーバやDBの設定ファイルを修正する

 Webサービスを改善する前提として、こういった知識はある程度身につけておく必要があります。

性能改善プロセスの習熟レベル

 ISUCONは性能改善の繰り返しですので、プロセスの理解が重要です。基本的に次の繰り返しです。

 ・構成把握

 ・計測

  ─ロギング、プロファイリング

 ・修正

  ─修正内容の導出

  ─修正実施

  ─効果測定

2.2 ハードルをどう超えるか

 これらの難しさを克服し、本番で高スコアを実現するためには、練習するのが一番です。ISUCONの過去問は公式ブログで公開されており、練習に利用できます。

 次章から、次の3ステップに分けて練習方法を説明します。

 ・練習用の環境を構築する

 ・性能改善のプロセスを実施する

 ・本番に向けて準備する

試し読みはここまでです。
この続きは、製品版でお楽しみください。