こんばんはyapattaです
今日ISUCON10の本戦に参加してきました〜, 8時間あっという間でしたね.
チーム名は「ワンランク上のジロリアン」です!
チームメイトはISUCON予選と同じ優秀な彼らです!
では実際に何をやったか書いていきたいと思います!!!!!
やったこと
- nginxが入ってないと発狂した
- envoyと戯れる -> 仲良くなれなかった...
- webpushの実装(説明文を読むための国語力が必要, つらい)
- Logをええ感じに表示 -> このええ感じがあとで仇に...
- 3台の構成を考える(3台ごとスペックが違うだと...?)
- 準備してきたansibleのscriptを無事にコケさせる
- MySQLのcnfをええ感じに
- インラインメモリキャッシュをやろうとした(できたとは言っていない)
ではやったことを具体的に
1. nginxが入ってないと発狂した
nginxの設定をええ感じにしようとした. チャレンジでやったことがある!!という気持ちになりたかった.
しかし開始そうそう期待が裏切られてしまった...
nginxがないだと....
僕らは焦った. 今まで練習してきたものは何だったのか...
webサーバなんてnginx以外知らないぞ...
僕らは絶望に苛まれた
だが一縷の光が指した
sudo lsof -i:443
envoyだと....?
もちろんチームメイトは皆envoyを使ったことがなかった...
まあということでお気持ち雰囲気でenvoyのyamlを雰囲気で書いた.
2. envoyと戯れる -> 仲良くなれなかった...
上の通りです. 公式ドキュメント読んだけどよくわからなかった. 文字通り何もわかんねえ
3. webpushの実装(説明文を読むための国語力が必要, つらい)
reudさんとyapattaでお気持ちwebpushについて公式の説明を読んだ. reudが天才的な読解力を発揮してreudに説明されながらコードを書いた.
adminがclarificationに回答したら即webpushするようにした. スコア5000点ぐらい伸びた. 天才か?
4. Logをええ感じに表示 -> このええ感じがあとで仇に...
僕らは事前に, MySQLのslow-queryのLogをpt-query-digestに投げて, alpにフォーマットさせてブラウザで読めるようにするshellscriptを作った.
それをcrontabに投げて自動でLogが更新されるようにした. しかしnetdataで負荷計測したところ何も走らせていないはずなのになぜか遅い...? というお話になった. processでpt-query-digestがメモリを食っていることに気づいた.
cronを走らせなくしたらメモリ消費量が減った. スコアが上がった. セルフISUCONをしてしまったぜ.
5. 3台の構成を考える(3台ごとスペックが違うだと...?)
neofetchを使って3台のスペックを確認した. 3台ともスペックが違かった. 1つ目がメモリ1G CPU2コア, 2つ目はメモリ2GB CPU2コア, 3つ目はメモリ1GB CPU4コアだった.
netdataで負荷計測して議論した後, 最終的にサーバ1にenvoy, サーバ2にapi, web, サーバ3にMySQLという構成にした. 案外MySQLはメモリを食わなかったが, CPUリソースを使っていることがわかった.
データは絶対です, 雰囲気で構成を考えると痛い目に遭うので注意.
6. 準備してきたansibleのscriptを無事にコケさせる
悲しいですが時間は許してくれなかったので, 皆で手動でポチポチインストールしました.
7. MySQLのcnfをええ感じに
たかひろさんにやってもらった. slow-queryのログをオンにして, innoDBのメモリ周りの設定, 外部IPからアクセスできるようにした. 素晴らしい.
8. インラインメモリキャッシュをやろうとした(できたとは言っていない)
teamsに関してインラインメモリキャッシュを実装しようとした. 時間が足りなくて結局諦めてしまった. mapでええ感じにしたかった.
まあこんな感じですね. あっという間に時間が過ぎてしまった. 集中できた気がする.
家で3人で集まってオンサイトでISUCONに挑んだ.
議論が捗って非常に楽しかった. オフラインならでは熱量を大事にしたいね.
チームメイト本当にありがとうございました!! こんな楽しい経験をさせて頂いて本当に感謝です!!
追記
Failしていました. 原因究明できず. これが人生.
続く...