読者です 読者をやめる 読者になる 読者になる

ISUCON6参加記

kstm(カスタム)でISUCON6の本選に参加してきた。今回も学生枠。

サークル部屋にあったわにさんも一緒に参加

予選はDBオンメモリ化とかやって(あんまり効果なかったけど)なんとか学生枠の9番目に滑り込んだ

10:00 - 11:00

競技が始まっても問題がデプロイできなかったのでレギュレーション読んでた。修正後も1回デプロイに失敗してちゃんと動くようになったのがたしか11時くらいだった気がする。

11:00 - 12:00

docker-compose.yml 見たり Node.jsのサーバー読んだりして構成把握してた。Node.jsでHTTPS使ってたりappにリバースプロキシしたりしてたのでとりあえずNginx入れる方針に。

前回みたい(学生チーム全Fail)にはなりたくなかったので5台あるサーバーの1つ目だけ使ってました。(実はwebappが1つ目のサーバーにしかなかったことには後で気づいた)

appをgolang実装に切り替えてスコアが4,174=>6,630に

12:00 - 13:00

appは全部馬さんに任せて、NginxからNodeとappにリバースプロキシする設定をした。

まずNginxいれて80番ポート開けてみたものの、外から接続できないという事態に。どうやらAzureのファイアウォールのせいだったみたいなんですが、このときは気づかなくて2つ目のサーバーにNginxいれて443ポートで接続できるのを確認。NodeのTLSの処理を全部Nginxに移して、あとはgzip圧縮したファイルを静的配信とかした。

このあたりでスコアが9,000くらいまで上がるようになって1位2位あたりをうろうろ。

13:00 - 14:00

ベンチ回しながらtopを眺めてるとMySQLとNodeが結構CPU食ってたのでそれぞれ3つ目4つ目のサーバーに移した。ディレクトリごとscpでコピーして`docker-compose up -d`すればいいだけなのでめっちゃ楽だった。

13:30くらいにスコア16,000を超えて全体で1位に。

14:00 - 15:00

/img/:idが重かったのでなんとかキャッシュできないかなーと。

馬さんがstrokeのキャッシュ、ふぉのさんがNginxでキャッシュ、僕は馬さんがコード書いてるのを見ながら頷くみたいな担当で動いてた。

NodeがCPU使いきれてなかったのでdocker-compose.ymlに同じコンテナをもう一つ建てるように書いた。

このときスコア18,000くらい。

15:00 - 16:00

Nginxでのキャッシュがうまくいかず、点数があがらない

strokeのキャッシュが実装完了して20,000点くらい。

16:00 - 17:00

ちょっと早めの再起動試験。

systemdの設定とか書くの忘れててDockerがあがってこなかった。このタイミングで再起動試験しててよかった。

なんかやることもなくなってきたのでDBのオンメモリキャッシュとか書き始めた。

17:00 - 18:00

DBのオンメモリキャッシュは何故かFailするのでボツ。

17:20にはもう一回再起動試験をしてちゃんと上がってくるのを確認。あとはベンチガチャ何回か引いて20,000点以上が出たらそのまま放置してFinish!
するつもりだったのだが...

結果

f:id:bgpat:20161028080205p:plain

おまけ

pixiv冬インターン参加記

ssl.pixiv.net

pixivにインターンに行ってきました。

まだ就活とかする時期でもないんですが、「東京に行ける!新幹線!報酬まで出る!」という不純な動機で応募したら通っちゃいました。

選考

選考はgithubだけでした。選考でやったことはこんな感じです。

https://github.com/pixiv/intern2015w/pull/7

 

1日目

まず、開発環境のセットアップ。結構複雑な作業のはずですが、特に詰まることなくすらすらできたので、インフラの人すごいなと思いました。

メインのバグ修正は、修正してプルリク送ると、メンターからフィードバックが貰えるというもの。バグごとに難易度がつけられていて、まずいちばん簡単なものから取り掛かりましたが、なかなかの量のソースコードなのでどこを触ればいいのかわからないまま時間が・・・。もっと積極的に質問しまくればよかった。

特にバグ修正もできず、お昼休憩。🍣でした。おいしかった。

午後は本格的にバグ修正に取り掛かりました。修正して、commitして、プルリク投げて、"脱出"タグ付けられて「よっしゃああ!!」ってなりました。ただ、ここまですんなり行ったのは最初だけで、ブランチ変え忘れてたり、あんまりコード読まずに修正して無駄な部分指摘されたり、なかなか脱出できなくて現実は甘くないなと感じました。

2日目

1日目の反省から、分からないことがあったらすぐ聞く のスタンスで挑みました。聞いてみたらすごく丁寧に教えてもらえたので、本当に助かりました。午後はちょっと重いバグをずっとやってました。コード読んで修正して、上手くいかなかったらメンターさんに方針を相談して、という感じでした。結局時間内に修正できなくて、時間があればなんとかなりそうだったので後悔はありますが、pixivのソースのかなりの部分が読めたので満足です。

懇親会では、エディタの話とか、普段はなかなかできないマニアックな話ができて楽しかったです。splatoonほしい。

まとめ

インターン行ってよかったです。Web開発の現実が見れた気がします。参加していた人もみんなレベルが高くて、もっと勉強しないと、と感じました。

pixivの皆さん、インターン生の皆さん、2日間ありがとうございました。

ISUCON5本選に学生枠で参加しました

bgpatです。
所属しているサークルの先輩2人(@fono09, @Goryudyuma)とチーム名kstmでISUCON5の本選に参加してきました。

午前

まず、予選の教訓からapt-get purge apparmorしました。初回ベンチかけてる間に環境の確認。使い慣れてるMySQLじゃなくて全く使ったことのないPostgresqlが入っていて、コレどうしよう状態。psqlコマンドはこのとき初めて使いました。ベンチ終わってnginxのログとかブラウザで確認したりして、/dataが重いなーということでコード読み始めました。一緒にコード読んでた@Goryudyumaが外部サーバーに対してHTTPリクエスト送ってるのが原因と教えてくれたので、このあたりを調べることに。ローカル環境からAPIのホストを叩いても案の定名前解決できなかったので、サーバー内の/etc/hostsを見るとAPIサーバーのアドレスが書かれていました。ローカルのhostsに同じ設定を書くとブラウザからAPIを叩けるようになったのでメンバーにも共有。とりあえずAPIのリクエストをキャッシュすれば早くなるのでは?と提案だけして、@fono09にredisの設定とかやってもらい、golang書けないのでコードは@Goryudyumaに書いてもらいました。

13:00〜17:00

何も考えずとりあえず全部キャッシュするコードが完成したのでベンチ回してみるとよくわからないエラーを吐いてfail。ブラウザでAPI叩いて確認すると、tenkiは高頻度で更新されているみたいなので、キャッシュから除外するように修正するがfail。このあともいろいろ触ってみたけど最終的にはnullしか表示されなくなって、せっかくGO言語使ってるんだしということで、APIリクエストの並列処理のほうをやってみることに。並列化処理完成してブラウザでチェック、よし問題なさそう と張り切ってベンチ回すもなぜかfail。しかもapp.goが死んでる。ログを見るとJSONのパースで落ちてるらしいことが分かり、Resp.Bodyをログに吐き出すようにすると、何も入ってなくてイミガワカラナイ。懇親会で聞いたところによると、ちょっと工夫してログに出せば"Too Many Requests"が見れたんだとか。このあともキャッシュがうまくいかない原因を考えてみたり並列処理なんとかできないか触ってみましたが、ことごとくfailしまくってお通夜状態でした。

17:00〜終了

結局打てる手もなくなり、同じサーバーの中にAPサーバーいっぱい立てれば並列処理になって少しは早くなるかもとか考え出して、やってみてもうまく動かず結局ほぼ初期状態に戻す感じでフィニッシュ。時間もなく、ほぼ初期状態だったので再起動確認はしませんでした。学生チームが全チームfailになると知っていれば再起動確認の時間残したのに。

反省

大体どのチームとも方針は変わらなかったのに、考察しきれてない部分が多くて全く点数が伸びず、最終的にfailに終わってしまいました。予選のときは、ほぼノー勉で挑んで、たまたま自分たちに合った環境が問題になってスコアが伸びたけど、本選で惨敗して、甘くないなーと実感しました。来年もISUCONがあるなら、運ではなくて実力で予選突破できるように練習とかちゃんとしたいです。

まとめ

コンテスト自体はボロボロでしたが、長時間パソコンに向かってみんなで考えたり、プロが書いたコードが見れたり、懇親会ですごい人たちと話したり、東京見物したり、ほんとに楽しい充実した日となりました。運営のみなさん、本当にありがとうございました。

おまけ

会場に着いてから暇だったのでこんなもの書いてました。せっかくなので置いておきます。