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

ぱいぱいにっき

Pythonが好きすぎるけれど、今からPerlを好きになりますにっき

#isucon 予選でとりあえず10位だった

どうもマコピーです。

詳細 ISUCON公式Blog
結果 オンライン予選 二日目の結果 & 暫定版の本選出場チーム発表 : ISUCON公式Blog
のチームぽわわ2のメンバーです。

昨年のチームぽわわのメンバーのうちkenjiskywalkerおじさんは335さんチームで、acidlemonさんにいたっては出題側に回ってしまったのでぐぬぬと言いつつ、「誰か出ませんか〜誰か出ませんか〜」と言ってたら@さんと@氏が一緒に出ようと言ってくれたので参加できました。めっちゃありがたい!! そしてうれしい!!!!!!!!!!

で、そんな感じでうろおぼえながらなにやったかをツラツラを書いていきます。

担当

  • 僕はDevOpsで言うOpsな部分を担当。インフラ周りとかミドルウェア入れ替えとか。あと計測
  • shogo82148氏はredisとか主にアプリとかを見てもらいました
  • 9reさんの担当は前半はMySQL周りで後半はいろいろ隠し球を用意していましたが今回は炸裂しませんでした。次の秘密兵器なので秘密です!!!

最終的な構成

  • ベースはPerlのものを使用
  • 元々はApache + Starman + MySQLの構成だったのをNginx + Monoceros + Redis + MySQL構成に
  • 一部クエリのRedis化とテーブル非正規化、インデックス張ったりとか、そういう系のこと。
  • Markdownとかは予めレンダリングしたものをRedisに入れるだったかな。
  • markdownが外部になっているの、なんかコスト高そうだったので、Text::Markdown::Discountに置き換えた。でも@氏によるとText::Markdown::Hoedownのほうが速いらしい。マジか。
  • 後述のように僕はコード殆ど見てないので@氏、解説お願いします。あと氏のRedis::Fastが炸裂した。1000ぐらい上がったような
  • ベンチのworkloadは4でMonocerosはmax-workerが16ぐらい。nginxがworkerが32っていうめっちゃ多い数で安定するというよくわかんない感じだったので、要検証。午後はこの辺りをひたすらやってた

僕の方針と役回り

  • あまりコードは見ない
  • ベンチ回してDevel::KYTProfとかhtopとかdstat見てどこがネックになってるか探して叫ぶ。すると直る。すごい

なので元々僕はDev側の人間なのですが他の二人が遥かに実装力があるので僕は下回りに注力という感じです。あと決める人。方針とかはヒアリングしながら決めていった気がする。あとデプロイする人という感じですね。

見なかったもの、気付かなかったもの

  • /etc/my.cnf 全く手を付けなかったウケる
  • 不要なクエリ類、一部残っている
  • memcachedのようなものは完全放置。書き換えたから無くなったのではなく手を付けなかった。ポート番号からの先入観はいけないですね。htopでmemcachedがないのを変に思えばよかった。
  • フロントでキャッシュする系のやつは結局できなかった

開発の進め方

  • @氏のgithubのプライベートリポジトリを拝借してコードとか上げた
  • Redisブランチ炸裂時は一旦サーバ側でcheckoutしてテスト書けてベンチ書けていいねってなったらmasterにマージという感じ
  • いい具合に分担できてよかった
  • インスタンスガチャはやっていない

とまあこんなかんじでした。僕としては初めてのAWSでインスタンスの立ち上げ方とかめっちゃ勉強になりました。AWSめちゃくちゃ便利だ。すごい。

というわけで、たぶん大丈夫だとは思いますので、本選に向けてチームメンバーといろいろ作戦を練っていきたいと思います。