おれ、エンジニアになるよ。

エンジニア志望の大学生だった若造がISUCON7を通して見事就職した後、今度は一人前のエンジニアになることを目指す成長物語

ISUCON夏期講習@LINE本社に参加してきました

こんばんは。

 

先ほど沖縄に帰還したぼくです。

やっと帰って来れて、やっぱ沖縄がいいなぁと感じてます。

東京はクソ暑いので1日3回ぐらい着替えるし、渋谷駅で線路に靴落とすしで割と散々でしたwww

 

今回は、8月25日に参加してきたISUCON夏期講習の内容について。

場所はLINE本社。

f:id:matsuda-juri:20170827040723j:plain

 

 

中の様子はこんな感じ。

 

f:id:matsuda-juri:20170826220522j:plain

 

(ぼくがどこにいるか当てることができたら、お礼にチューします)

 

 

 

講師は面白法人カヤックfujiwara組長さん

日本のインフラエンジニア界のリビングレジェンドです。

www.kayac.com

 

過去のISUCON戦績は、

ISUCON1 優勝

ISUCON2 優勝

ISUCON3 出題

ISUCON4 3位

ISUCON5 優勝

ISUCON6 準優勝

 

つえぇぇぇぇぇぇぇ。

かっこよすぎる.......。

正直抱かれてもいいです。

 

そんなfujiwara組長さんを講師に迎えてのISUCON夏期講習。

めっちゃ面白かったです。

ではその内容を!!

 

 

1.ISUCONで戦うためには

 

まず、ISUCONで勝ち上がるためにはいくつかの要素が必要であると。

 

・OS、ミドルウェアのチューニングのみでは絶対に勝てない

・アプリケーションを書き替えるスキルは必須

・DBの知識

・効率の良いアーキテクチャの知識

ボトルネックを的確に発見する能力

 

こうしてみると、今ぼくら「仕事ください」に足りないものがはっきりしてくる。

(あえてここでは言わないので過去記事から探してくださいww)

 

 

これに加えてチームのメンバー構成も重要。

fujiwara組長さんがオススメするメンバー構成がこちら。

 

・OSやミドルウェアに強い人:1名

・アプリケーションに強い人:2名

 

f:id:matsuda-juri:20170826221338j:plain

 

ここは前回の第4回模擬ISUCONで痛感した部分でもありました。

そうなんです。

アプリケーション触らないと点数が伸びないのです。

これは大いに納得。

 

 

そしてこの3人でどうチューニングするか。

その例をいくつかご紹介頂きました。

 

・1リクエスト当たりのレスを短くする

・静的ファイルはwebサーバで配信

・appからstorageへのクエリを減らす

・storageでdiskアクセスを減らす

・そもそもクライアントからリクエストさせない

・並列度を上げてレイテンシを隠蔽する

 

f:id:matsuda-juri:20170826222031j:plain

 

正直、目から鱗です.....

ちなみにISUCON1で優勝したときの1秒当たりのリクエストのスコアは、

1500req/sec

だそうです。(よくわからないけどなんかすごそう)

 

 

さらにISUCONで優勝するための必勝法を伝授して頂きました。

それがこちら。

 

1.ボトルネックを探す

2.解消して計測

3.1と2の繰り返し

4.優勝

 

ほう、わかりやすくていい。

まさに「Simple is the BEST !!」

 

 

最後にあの名言を残します。

 

f:id:matsuda-juri:20170826222735j:plain

 

「推測するな計測せよ」

 

はい、いただきましたー。

肝に命じておきます!!

 

 

ここからハンズオン形式の実践編に入ります。

 

 

 

2.実践編

 

扱う問題はISUCON6予選。

第4回模擬ISUCONでやりましたね。

 

matsuda-juri.hatenablog.com

 

基本的にお師匠さんが教えてくれた通りと同じ。

けど計測方法や手順が少し違ったのでちょこっと紹介します。

 

まずはレギュレーションをよく読むこと。

ISUCONはここから全てが始まる。

 

「あれ、初期実装はどの言語??」

 

なんてことはレギュレーションを読めば書いてある。

センター試験の現代文と同じです。(違うか)

お師匠さんからも耳にタコができるくらい言われました。

 

 

お次はバックアップを取ること。

特にサーバーをいじる前にやるべし。

過去の大会では、サーバー上の画像ファイルが消えたら強制的に試合終了だったとか...

安西先生も真っ青です。

git管理は言うまでもなく。

 

 

これらの準備を終えてやっと計測に入ります。

fujiwara組長さんは基本的にalpで整形したnginxのログと、mysqlのスロークエリでボトルネックを探すみたいです。

(プロファイラは使わないって言ってたかな)

 

そして中でも一番の新たな知見だったのがnetdata。 

 

f:id:matsuda-juri:20170826224326p:plain

 

f:id:matsuda-juri:20170827025833p:plain

 

ポート番号を19999にしてブラウザ叩くとこんな感じでCPUの使用率とかが細かく確認できるってもの。

fujiwara組長曰く、topコマンドやhtopコマンドでもいいのだが、若者ウケしないらしいwww

(ちなみにぼくはhtopコマンド使う)

 

 

あとはpt-query-digest

スロークエリを集計して解析するのに便利なやつ。

pt-query-digest

 

 

これらを駆使してボトルネックが見つかったらやっとチューニングが始まります。

ISUCONではボトルネック一つ潰したら、また次のボトルネック、そのまた次...みたいな感じに計算されて作られているので確実に潰していきます。

 

 

一つ潰したら、gitで管理。

もちろん動いてるプロセスも確実に再起動させる。

途中で絶対に再起動コマンド叩くのが面倒になるので、そこはMakefileなどを用意しておくのがいいとのこと。

 

 

最初の1、2時間はスコアにこだわらず、ログやコードの解析に時間を費やすともおっしゃっておりました。

逆にその時間内にスコア出るほうがおかしい。

たしかにそうですよね。

 

 

最後にアプリケーションに関して言うと、

ループしている箇所があったら確実に潰すべし

とのアドバイスを頂きました。

 

ちなみに最後にベンチ回したらスコア7272

模擬ISUCONの時よりも1500点ぐらい上がった感じ。

f:id:matsuda-juri:20170827034831p:plain

 

 

 

3.感想

 

めっちゃ面白かったし楽しかった。(小学生並みの感想ww)

新たな知見も得られつつ、今までやってきたことにさらに自信が持てた。

ほんとにあとはアプリケーション触る時間をどれだけ増やすことができるか。

そこにかかっていると思います。

 

 

ってのも、ぼくの隣の席の人、お師匠さんの記事見てましたwww

 

saboyutaka.hatenablog.com

 

 

 

4.おまけ

 

アフターではピザやらチキンやら盛りだくさんのフードとビールで乾杯。

(余ったビールは持って帰りましたww)

割と主催の941さんとお話してたんですが、琉大情報工チームのメンバーはどうやら有名人らしいですww

 

あと、うちのお師匠さんのこと知ってました。

なので勝手にギークハウス沖縄を宣伝w

941さん、9月にオープン記念イベントあるので来てください!!

(行かないって言ってたけど)

 

 

 

こんな感じでかなり楽しめたISUCON夏期講習会。

主催のLINE株式会社さん、941さん、講師の面白法人カヤックfujiwara組長さん、貴重な機会をありがとうございました!!

本戦出場できるように、また明日から精進していきます!!!

 

 

 

 

 

 

あ、お土産のLINEのステッカー忘れてた。

まぁいっか。

 

ではでは、今日はこの辺でー。