ISUCON7に参加しました
人生初のISUCON参加をしてきました
前々からISUCONという存在は知っていて
毎年 夫の hoto 氏がいそいそと出かけていって
毎年「人権がない」と言って帰ってくるイベントというイメージでした
まさかそれに参加することになろうとは。。。と今でも驚いてます
メンバー
某闇のエンジニアコミュニティで知り合った3人で出場しました
くーむ氏 https://twitter.com/cocodrips
いがにん氏 https://twitter.com/IganinTea
「一緒にどうですか?」と声をかけていただいたのは
本当に嬉しかったし、
参加するというあと1歩の背中を押していただいたことは感謝しています
チーム名は FEAR FOR FIGHT ~駆け込んだ戦士たち~ です
中二臭いポエムを吐くBOTのガチャ + 締め切り当日申し込み の意味を込めています(?)
結果
最終スコアは 14028
ベストスコアは 33272
でした
お題
チャットツール(名前は isubata )
特徴として
- リアルタイム性のあるサービスなのでキャッシュが効かせづらい
- データ多い
- サーバ3台ある(初期状態はAPP:2, DB:1 の構成)
やったこと
個人的にやったことは
本当に些細なこと&地蔵ばかりでしたので
チームでやったことを書いていきます
言語は PHP を選択してます
- 仕様把握
- ログ周り / 計測のためにしたこと
- クエリチューニング
- 必要なカラムのみ取得するようにする
- 無駄に発行しているSQLを少なくする
GET /history
とGET /message
が効いたらしい
- 画像書き出し
- テーブル上に保存された画像のバイナリを実ファイルとして書き出し
- 登録時も画像ファイルとして保存
- サーバ構成
- 1DB,1APPサーバの構成
- APPサーバに画像は乗ってる
- nginxで画像パスのルーティングをする
- 1DB,1APPサーバの構成
- キャッシュ
- 静的ファイルにexpireを設定する
- アプリケーション
GET /message
のsleep(1)
を消す- OPcache を有効にする
やりたかったこと(やれなかったこと)
リクエストがタイムアウトしました (GET /icons/5e98~~~.jpg
の対応- バイナリから画像ファイルとして書き出しても常に出続けたエラー
- cache-controleを設定すればいいという話を2日目終了後に風のうわさで聞いて「その手がぁああああ」ってなった
- 正直仕事でやってることだからすごくすごく悔しい
GET /message
GET /channel/{id}
で 新着記事を得るためにAjaxでめちゃ呼ばれてたため速度改善したら効いたんだろうなという気がする
- channelのキャッシュ
- 些細なところだけどサイドバーのchannel一覧は毎回表示されるところなのでredisなりでキャッシュしたかった
- CPUがつねにアゲアゲ100%の対処
- APPサーバが1台という構成にしたこともあり(?)CPUが100%に張り付いていた
- メモリには余裕があって、もっとメモリに載せるようにできなかっただろうかと考えている(策はない)
- 画像用サーバを作るのはアリだったのかも知れない
- 3台のうち2台しか使わなかったということで普通に考えて勿体無い状態だった
- 画像をバイナリからファイルに変えたところで負荷がDB→APPサーバに切り替わっただけなのでそこは分散しても良かったのかもしれない(策はない)
総じてお気持ち
「私は今まで何をやってきたのか」とひたすらショックでした
インフラもミドルウェアもアプリも何もかもの知識が足りないなーと
競技中何度も宙を見てました(手を動かせというアレ)
と,同時にこの現実を知る機会が得られたのは本当に良かったです
メンバー2人から色んな知見を教えてもらって
最高に何かが++されたので
またそれは別記事にまとめたいと思います
そして、
当日運営、素敵な問題と環境構築の用意をしていただいた
ISUCON運営関係者のみなさん、ありがとうございました
(感謝しすぎてお金を払いたい...!!!)
来年の開催も楽しみにしています
さて人権を取り戻す1年を送るぞ
— ダークマター ごま (@gomaaburamax) 2017年10月22日
おまけ
#isucon 無能だったのでたべます (@ 橙 in 目黒区, 東京都) https://t.co/rrMXBGk2sB pic.twitter.com/QMuMX87lSd
— ダークマター ごま (@gomaaburamax) 2017年10月21日