mayoko’s diary

プロコンとかいろいろ。

何も知らないのに ISUCON 2017 に参加した

チーム「座るだけのコンテストってな~んだ?」で OKeiGo さん, しょラーさんと一緒に ISUCON 2017 に参加しました。

僕がやったのは, チーム名を考えることと, それを実際に実行することだけです。

前日まで

Vagrant で ISUCON の環境を再現できるものがあり, それでホーンとか言ってた
github.com

これ使ってなんか勉強しようとネット資料とか見てたけどみんな難しい言葉使っていてわかりませんと言う感じ

サーバーの概念に多少詳しくなったけど肝心の実装は何もわからない

  • 冷静に考えてお前コード読むことしか能ないんだからもうちょっと app.py とか読んでおけばよかったのにと始まってから思った
  • というかしょラーさんと OKeiGo 君だったら僕いらないだろとチーム組んだ時から思ってた

当日

一番いろいろ勉強できた気がする
他の二人が頑張ってセットアップしてる間にへーとかホーとか言ってた

  • ていうか二人が詳しそうなのでなんか思いついても言いづらいなぁみたいな気持ちはあった
  • ssh でどう接続すれば良いのかもよくわからなかったし, web サービス自体どうやって閲覧するのかもよくわからなかった
    • 理解するのに 30 分くらいかかった

後ほかの二人が slack で話してるのを見てヘーとか言ってた

  • python でやってたんですけど, os.environment.get() ってやると環境変数が取れるらしい
    • それでヘーと思って echo $ISUBATA_DB_HOST とかやってみたけど特に何も起きなくて解せなかった

app.py を読んどけと言われたので読む

  • flask とか言うのが web アプリケーションのフレームワークになってることを初めて知った
  • おそらく ISUCON ではそんなに大事な部分ではなさそうですが, login とか logout ってこうやって実装するんだーみたいのも初めて知った
    • flask.render_template(filename) で filename を渡すとか(GET でよく使う)
    • POST の時には flask.request.form['hoge'] で hoge を受け取るとかしてるっぽいですね
    • flask.session がよくわかってない
      • 複数の人がいるのに flask.session.pop() とかで除外するみたいな感じで良いんだろうか

後まぁ flask でやるときはデコレーションで「ここにアクセスしたときはこういう操作すれば良いよ」というのを書けば良いってのもここで知りました

  • 世の中の人いろいろ考えるなぁっていう

話を聞いていると今回は GET /icons/* を高速化するのが大事っぽかったんですが, しょラーさんの提案していた解法が僕にはよくわからなかった(なんか nginx 使って何かするらしい)

その後僕が見てたのは mysql 周り(見てただけ)

  • まだ見てないメッセージ数を求めるやつは, 各チャンネルごとに合計のメッセージ数を覚えておき, 各ユーザーが各チャンネルのメッセージをいくつ読んだか覚えておけば(メッセージを消すことが出来ないので)求まるよねという話をした
  • GET /fetch のところで, プログラムが sql クエリを何回も呼び出すやつやってて頭悪いな~と思ってたら しょラーさんが解決してた
    • sql でもらった結果を配列として持っておいて, 配列で for 文を回せば OK
      • python 詳しくないので書き方がわからなかった
  • 世の中には slow query というボトルネッククエリを調べられる便利機能があるらしい
    • 使い方イマイチわかってない

その他気になったこ

  • password に salt つけてハッシュ化するってやつ, たまに見るけどそれ意味ある?と思っているのでやる必要性が気になる

感想

世の人々はこんな複雑な web 系プログラミングに詳しくてすごいなーと思いました。