0からアプリ開発はじめた

全くの初心者がアプリ開発をはじめました

ISUCON5でわからないということがわかった

 

f:id:comicbook:20151002035441g:plain

 

このブログを最後に更新したのが、6/8

もう4ヶ月も前かぁ(遠い目

 

その間に転職しまして、この度「ISUCON」に参加してきました。

チーム名「ビールはホップ使ってるからサラダ

 

結果として、わからないということがわかりました(ぇ


3人で参加したのに、全く何もできずに本当に申し訳なかったm(_ _ )m

気づけば長々となってしまったのでお時間ある方お付き合いください・・・

 

ISUCONとは

 

Iikanjini Speed Up Contest

 

Webシステムをいい感じにスピードアップさせてそのスコアを競うコンテストです。みなさんお馴染みのLINEが主催していて、優勝賞金はなんと!!

 

100万円!!!! (太っ腹

 

べ、べつにお金につられたんじゃないんだからね!!!! 

 

参加に至った経緯

正直、転職前はROM焼きとかやってた人間なのでネットワーク系はチンプンカンプン。Linuxもド初心者という状態です。

 

いろいろ勉強したくて社内のISUCON部の見学に行ったら、参加することになりました。

 

ヽ( ´ ∇ ` )ノ ワーイ

 

参加するまでの準備

毎週火・木にISUCON部の活動をやってました。部に参加し始めたのが9月頭?くらいで、全く0の状態からスタートした感じDeath

 

部に初めて行った時にISUCONについて教えていただきました。


ひたすらにブクマをつくり続ける感じ

 

f:id:comicbook:20151002003057p:plain

 

イイね!!

 

ISUCON3の予選問題やってみる

3チーム作ることになり、チーム分けどうする?となりました。協議の末、ISUCON3の予選問題やってScore順で決めることに。

 

予選登録が18日締め切りだったので、それまでにやることが決まりました。自分は14日に実施。

 

結果。。。

 

AWSの使い方が全くわからず、開始したはいいけどずっと画面とにらめっこして終了。

 

ハハハハハ!!!!

 

...orz

 

後日、部でのScore発表時に id:pe10 さんにご教授いただき、ベンチマーク動かせました。

 

Score 903.03

 

部内にScore 9,000overの方もいて単純にすごいなという印象でした。このScoreを元に以下3チームが誕生。

 

・ピザはバランスいい

・牛は草食ってるから野菜

・ビールはホップ使ってるからサラダ

 

GCP使ってみる

次にやったのがGCPを使うことです。ISUCON5はGCPで実施することが事前に分かっていたので、準備しなきゃと。

 

アカウントを取り、公開されていたISUCON4のgsをつかってインスタンスを起動。ベンチマークを動かしてみてScoreが出るところまでやりました。

 

当日の動き

頭動かすためにも甘いものが必要だよね⭐︎

てことで、ブラックサンダー3袋くらい持参していきやした。

 

10:00 開始時間 〜ぼっち党員〜

予選開始時刻になったがチームは自分1人。


とりあえず、やるしかねぇ!!

 

事前に通知されたURLにアクセス

ログイン画面が表示されたのでメールに添付されたパスワードでログイン

 ↓

が、入れず!!

 

ん?

 

ログインパスワード:>aiZIeytbg0q

 

>

  

この記号、パスワードなんかい!!

 

とりあえず、指定されたgsつかってGCPインスタンスを立ち上げました。

 

11:30 初めてのRequest 〜終わった感満載〜

今回ブラウザでベンチマークをRequestして実行する仕様でした。準備するのも遅いし初めてのRequestもこんな時間で、ダメダメ感が半端ない。


早速Requestしてみました。

 

f:id:comicbook:20151002012817p:plain

 

おぉ、なんか他のと色違いで表示されとる。ぽけーっと眺めてチラっと更新っぽいのが走ったので確認。

 

ドンッ⭐︎

 

f:id:comicbook:20151002012916p:plain

 

Score 68

 

初期実装がこんなに低いと思ってなかったのでまず驚愕。(結局、他チームの初期Scoreみるとそれぐらいだったのでミスってはなさそう)

 

そう!!

 

ここで、自分のISUCONは終わりを告げたのです(ぇ

 

1人でできることはコードを読むことだけ、できることを必死に探してました。

つらいお。。。

 

13:00 チーム2人目合流 〜ようやく動き出した感〜

これ以降の作業は主に2人目の方が中心となって実施してくださいました。打ち合わせとか全く0の状態だったので、やり方などを確認しながら進めました。準備が整った段階で、どのようなアプローチで進めるかを確認。


といっても、自分にできることがなかったので話を聞く体制を整えてました(ぇ


どんどんと進んでいく作業

 

・systemdで実行中なのがRubyであることを突き止め、PHPに換装

mysqlにrootなら入れるでしょっとサクッと入ってテーブルの構成をさらっと書き出す

・コード上のクエリをEXPLAINで調査

・indexが全然貼られていないから貼る必要があること判明

 

ものの1時間くらいでここまでできるのが当たり前の業界にいるんだと口ポカーン状態。

 

15:00 チーム3人目合流 〜休憩も必要だよね〜

3人目の方が業務を終えて参戦していただけることに。GCPアカウントがなかったのでどうする、どうするとなりましたが、インスタンス上でアカウントを作成し、ssh接続に成功。

 

やれることやっちゃえの空気ができて、sambaも導入(ぇ

 

しかしながら、もはやアプリケーションをいじる時間もない...ベンチマークのページをみると積み重なるRequest

 

スッとRequest投げてコンビニへ(ぇ

 

戻ってきてScoreみると600くらいで10倍くらいにはなってました。indexすげぇ

 

そこからアプリ以外で高速化できる方法はないかとgoogle先生で調べる。nginxの高速化設定を見つけ、その他もいじって試してみるとScore 900くらいに。

 

18:00 終了時間 〜もうゴールしてもいいよね〜

終了間際

Requestを何度送ってもScoreが「0」でなんでだ、なんでだとなりました。原因がnginxのエラーだとわかり修正を試みます。


が、なぜかrootなのに編集できず。

 

あれよあれよと終了時間を迎えました。。。どうやらkernelをいじったことで何がしかのファイルが破損してしまった模様orz

 

学んだこと。


こういうことは...

 

ダメ、ゼッタイ。

 

あと、

 

大事、事前準備。

 

結果発表

「ピザはバランスいい」が堂々予選突破!!

「牛は草食ってるから野菜」も一時、Score1万に近づく好成績

 

いやー、マジすごい

 

まとめ

冒頭で述べた通り、わからないということがわかりました

井の中の蛙しかり、知らないことをどんどん吸収していかないとダメだと改めて痛感しました。

ISUCON5に出たことでいろいろとわかったのはかなり良かったです。

 

1年後にも是非出たい、というか出る

 

そのためにもチューニングする知識をどんどん得たい。

 

無知からの卒業。

 

これだ!!

 

当面の目標はWebアプリの高速化について

・プロファイリング(ボトルネックの抽出)

・スロークエリの改善

ミドルウェアの調整

以上が効果的だそうなので、「ひとりでできるもん」と言えるくらいまでやります。