こんにちは、ISUCON7で出題者チームになった @methane こと KLab の稲田です。
そろそろ皆さん準備を始められていますか?
歴代の猛者の方の中には「普段やってることを普段通りにやるチームが強い」と言う人もいますが、普段通りにするだけで試合を有意義に戦えるチームはごく一握りです。
ISUCONの試合中の緊張感は、本物の障害対応と似ています。違うのは、楽しさと苦しさのバランスと、事前に決まった終了時間があることだけです。
そんな緊張の中で競技を楽しむには、練習をしていたほうが圧倒的に有利です。
初代ISUCONの出題者であり、何度も優勝されてる tagomoris さんいわく、ISUCON参加前と参加後に最も多くのものを持ち帰った人こそが勝者です。勝者となるためにも、事前に練習して、競技時間を有意義に楽しみましょう。
さて、「何を」練習すればいいかについては、ISUCON 夏期講習 2017 を開催しました(当日の資料あり)にある @fujiwara さんの資料がとても参考になるので読んでおいてください。
私からは「どうやって」練習すればいいかのオススメを紹介しておきます。
一番してほしいのは、なるべくチームでのリハーサル形式の練習です。まとまって1試合分の時間が取れない場合でも、試合開始後2~3時間程度の流れだけでもしておいた方が良いと思います。
具体的には、 @fujiwara さんの資料にもある次のようなことを、ちゃんと手を動かして練習し、手順書やメモを残すなどして当日にググらなくても良いようにしておくことで、試合中により多くの時間をチューニングに集中することができるはずです。
ssh の設定 例えばメンバーの公開鍵を登録して公開鍵認証にするなら、設定して sshd を再起動した後に、そのログインセッションを維持したまま、他の端末から ssh できることを絶対に確認しておきましょう。ここでミスってログインできなくなると、試合開始後3分でISUCONが終わってしまいます。
バックアップとリカバリ 設定ファイル、データベース、その他の必要なファイルを確認し、自分のPCかクラウドに転送しておく。ファイルをバックアップしたつもりが、シンボリックリンクだけが入ってたなんてことがないように、中身も確認しておく。クラウドサービスを使う場合は、外部から見えないことを確認しておく。(公開されているのを見つけたら失格です。)また、本番では必要にならないかもしれませんが、リカバリも練習しておきましょう。バックアップができていることの確認にもなりますし、もし本当に必要になったときは確実にテンパっているからです。
systemctl 等の管理コマンド どんなプロセスが動いているかを確認し、不要だとわかったデーモンを止めたり、ログの読み方 (
モニタリングツール 使い慣れたものがない場合は、資料にある netdata が良いと思います。インストールと、その見かたを把握しておきましょう。
プロファイリングツール alp などのアクセスログを集計して重いリクエストを見つけましょう。 pt-query-digest などのツールを使って重いクエリを見つけましょう。その他、使用するかもしれない、アプリやプログラミング言語ごとのツールの使い方、結果の読み方を、手と目と頭を使って確認しておきましょう。
それ以外にも、初期は確認・調査するべき事がたくさんあるので、誰が何をするのかの役割分担と、その手順を確認しておきましょう。アクセスログの集計ツールなどを普段使っていない場合は、ちゃんとインストールしてから動かすまでを実際にしてみましょう。より長い時間をチューニングに使うことができますよ。リハーサル形式の練習の題材としては、去年のISUCONの予選か、pixiv さんの社内ISUCONを利用すると良いと思います。
古いISUCONの問題は、特に変化が激しい言語だと動かすことすらままならないかもしれません。また、本戦の問題は、毎年何かしらクセのある問題なので、あまり事前練習には向かないと思います。上記の2問については、まだ1年しか経っていませんし、重いクエリを見つけて解決するといった定番のチューニングの練習ができると思います。 ただし、pixiv private isucon はディストリビューションとして Debian を利用していますが、予選ではUbuntuを利用する予定なので、練習するときはディストリビューションによる違いに気をつけてください。
さらにチューニングの練習をしたい場合は、まず自力でできるところまでチューニングしてみて、その後解説・攻略記事を探してそれに習って高得点を出してみましょう。 pixiv 社内 ISUCON については私が書いた攻略記 もあるので参考にしてください。
攻略記事を参考にするときは、単に同じことを実装してみるだけでなく、どうすればそのチューニングをすればいいことにノーヒントで気づけたかを考えましょう。チューニングをする前に、自分のサーバーでモニタリングソフトを動かしてダッシュボードを見たり、プロファイルを解析したり、 netstat (今時なら ss 等) してみたりして、「よし、本番では自力でこれに気づくぞ!」と思えるようになりましょう。知識不足を痛感したときは勉強のチャンスです。
さらに余力がある人は、過去の猛者たちの攻略記を、「どうすれば自分もこのように戦えるだろうか」と考えながら読んでみると、いろいろなヒントや練習すべきポイントが見つけられるかもしれません。
そろそろ皆さん準備を始められていますか?
歴代の猛者の方の中には「普段やってることを普段通りにやるチームが強い」と言う人もいますが、普段通りにするだけで試合を有意義に戦えるチームはごく一握りです。
ISUCONの試合中の緊張感は、本物の障害対応と似ています。違うのは、楽しさと苦しさのバランスと、事前に決まった終了時間があることだけです。
そんな緊張の中で競技を楽しむには、練習をしていたほうが圧倒的に有利です。
初代ISUCONの出題者であり、何度も優勝されてる tagomoris さんいわく、ISUCON参加前と参加後に最も多くのものを持ち帰った人こそが勝者です。勝者となるためにも、事前に練習して、競技時間を有意義に楽しみましょう。
さて、「何を」練習すればいいかについては、ISUCON 夏期講習 2017 を開催しました(当日の資料あり)にある @fujiwara さんの資料がとても参考になるので読んでおいてください。
私からは「どうやって」練習すればいいかのオススメを紹介しておきます。
一番してほしいのは、なるべくチームでのリハーサル形式の練習です。まとまって1試合分の時間が取れない場合でも、試合開始後2~3時間程度の流れだけでもしておいた方が良いと思います。
具体的には、 @fujiwara さんの資料にもある次のようなことを、ちゃんと手を動かして練習し、手順書やメモを残すなどして当日にググらなくても良いようにしておくことで、試合中により多くの時間をチューニングに集中することができるはずです。
/var/log/以下にログが書かれるのか、
journalctlを使うのかなど) を確認しましょう。
それ以外にも、初期は確認・調査するべき事がたくさんあるので、誰が何をするのかの役割分担と、その手順を確認しておきましょう。アクセスログの集計ツールなどを普段使っていない場合は、ちゃんとインストールしてから動かすまでを実際にしてみましょう。より長い時間をチューニングに使うことができますよ。リハーサル形式の練習の題材としては、去年のISUCONの予選か、pixiv さんの社内ISUCONを利用すると良いと思います。
古いISUCONの問題は、特に変化が激しい言語だと動かすことすらままならないかもしれません。また、本戦の問題は、毎年何かしらクセのある問題なので、あまり事前練習には向かないと思います。上記の2問については、まだ1年しか経っていませんし、重いクエリを見つけて解決するといった定番のチューニングの練習ができると思います。 ただし、pixiv private isucon はディストリビューションとして Debian を利用していますが、予選ではUbuntuを利用する予定なので、練習するときはディストリビューションによる違いに気をつけてください。
さらにチューニングの練習をしたい場合は、まず自力でできるところまでチューニングしてみて、その後解説・攻略記事を探してそれに習って高得点を出してみましょう。 pixiv 社内 ISUCON については私が書いた攻略記 もあるので参考にしてください。
攻略記事を参考にするときは、単に同じことを実装してみるだけでなく、どうすればそのチューニングをすればいいことにノーヒントで気づけたかを考えましょう。チューニングをする前に、自分のサーバーでモニタリングソフトを動かしてダッシュボードを見たり、プロファイルを解析したり、 netstat (今時なら ss 等) してみたりして、「よし、本番では自力でこれに気づくぞ!」と思えるようになりましょう。知識不足を痛感したときは勉強のチャンスです。
さらに余力がある人は、過去の猛者たちの攻略記を、「どうすれば自分もこのように戦えるだろうか」と考えながら読んでみると、いろいろなヒントや練習すべきポイントが見つけられるかもしれません。