9/17(土) にISUCON6の予選に出てきました。
最終結果は0点です。ただただ悲しいです。
予選前に3年目で本選行けないなんてエンジニアじゃないとか言いましたが、
生きていて大変申し訳ないです(´;ω;`)ウッ…
僕らのチームのピークは一番最初に回したベンチが4000点弱くらい行って一瞬トップ10に載ったことでしょう。
チームメンバー
チーム名は dark
で由来はコミュニティ名からです。
メンバーはそのコミュニティにいるhoto17296とjp_taku2でした。
来年こそ・・・
方針とかやったこととか
- ちゃんと計測する
- 去年ここが甘かった
- 今年は出来た気がする
- 頻繁に打つコマンドはMakefileに書く
- 2回くらい打ったら追加してました
- この辺も去年同様でよかった
- 使用言語はRuby
- 初めjsで行こうとしたんですが、starをつける所がバグってたっぽい?ので結局Rubyでいきました。
- POSTしようとするとundefinedが飛んでるっぽかった
- 午前中に環境(計測周り)を整えて午後から直していく
やったこと
Rack Profile見る限り(パット見で正直わかるけど)一番やばそうなhtmlfyをhotoに投げつつ
そもそも0点なのがやばかったのでPOSTの/star と /login ら辺をやりました。
今回のレギュレーションだとPOSTの遅延が1件につき-200点とかなので、
やばいと思いつつ直そうとして終わりませんでした。(´;ω;`)ウッ…
starをredisに突っ込むまでは良かったんですが、userの登録実は使われていなかったので、全部メモリに乗っければよかった。
計測
alpやpt-query-digestらへんをとりあえず入れたのと、New Relic入れたりRackプロファイラ入れたりしました。
正直alp使う余裕も無いまま終わりましたw slow query出てる所の改修してる間に終了でしたwww
(´ノω;`)…
- alp
- pt-query-digest
https://www.percona.com/doc/percona-toolkit/2.2/pt-query-digest.html
- New Relic
newrelicのアプリケーションモニタリング便利で、どのURL内でどの処理がどれくらいかかってるのかが見れたりするので大体これでよかったんじゃないかみたいな感じでした。
- Rackプロファイラの参考にした記事
Makefile
Makefile便利です
後半めっちゃ疲れてきたときにあのコマンドなんだっけとか思い出さなくていいです。
makeの補完が全てを解決してくれます。
人類に優しい。
それぞれのサービスのログ確認とか、サービスやらミドルウェアのリスタートとか色々書きました。
.PHONY: /etc/mysql/my.cnf nginx_log_file=/var/log/nginx/access.log mysql_slow_log_file=/var/log/mysql/mysql-slow.sql lang=ruby dbname=isuda ######################### # isuda ######################### confirm: curl 'localhost:5000/user?name=motemen' status_systemd: sudo systemctl status show_log_isutar: sudo journalctl -u isutar.$(lang) show_log_isuda: sudo journalctl -u isuda.$(lang) restart_isuda: sudo systemctl restart isuda.$(lang) restart_isutar: sudo systemctl restart isutar.$(lang) restart_isuinit: sudo systemctl restart isuinit.$(lang) restart_all:restart_isuda restart_isutar restart_isuinit log_isutar: sudo journalctl -u isutar.ruby log_isuda: sudo journalctl -u isuda.ruby stop_isuda: sudo systemctl stop isuda.$(lang) stop_isutar: sudo systemctl stop isutar.$(lang) ######################### # nginx ######################### confirm_nginx: sudo nginx -t reload_nginx: sudo systemctl reload nginx restart_nginx: sudo systemctl restart nginx alp: sudo alp -r -f $(nginx_log_file) $(opt) clean_nginx_log: sudo rm -f $(nginx_log_file) $(MAKE) reaload_nginx ######################### # mysql ######################### restart_mysql:/etc/mysql/my.cnf sudo systemctl restart mysql @echo "Socket通信でやってるせいかこいつだけだとアプリが止まるのでmake restart_all もしたほうがいい" $(MAKE) restart_all /etc/mysql/my.cnf: webapp/config_file/my.cnf @echo "$<を$@にコピーするよん" sudo cp -f $< $@ show_log_mysql: sudo journalctl -u mysql pt_digest_query: sudo cat $(mysql_slow_log_file) |/usr/local/bin/pt-query-digest mysql: . ./env.sh; mysql -u$$ISUDA_DB_USER -p$$ISUDA_DB_PASSWORD $(dbname) ######################### # redis ######################### restart_redis: sudo systemctl restart redis show_log_redis: sudo journalctl -u redis ######################### # deploy ######################### arata_fetch: cd ./webapp && git fetch arata arata_merge: cd ./webapp && git merge arata/master
感想
- まいくろさーびす〜〜〜〜〜〜↑↑↑↑(´;ω;`)ウッ…
- isupam〜〜〜〜〜〜
- NewRelic便利
- Makefile便利
- インスタンス1台だと他のメンバーの機能を検証中にベンチ回せなかったりして厳しい
- とは言え複数台になるとコードの共有とかインスタンスコピーとか環境が実はちょっと違うとかありそうで怖い
- 練習でやってみるのがいいのかな
- ベンチの結果が0点だとなにか変わったのかすらもわからなくてとてもつらい
- ベンチのメッセージからタイムアウトの数が減ったくらいしかわからなかった
- Option(人権) => None
- 生きててごめんなさい
- 来年には人権を取り戻す
- 一人ですらISUCONの問題で予選突破するレベルの高得点叩き出せなきゃ話にならないと強く思ったので強くなります
- とてもつらかったけど問題はめっちゃ楽しかったです。運営の方々ありがとうございました!!
最後に
こちらが反省のために食べた地獄谷の麻婆豆腐の様子です。
#isucon で点数が出なかったので反省してる。 pic.twitter.com/giK0QmnEZJ
— ₍₍ ง ಠ_ಠ ว ⁾⁾ (@ara_ta3) 2016年9月17日