#サバフェス のまとめ
順位はまだ出てませんが、上位がfailしないと自分が1位は難しいかなー、という状況。 とはいえやったことを公開してみます。
アクセスパターン確認
tcpdumpやアクセスログでアクセスパターンを確認しました。 これが対策のベース。
- 最初の60秒は
GET /
祭り- GET祭りなので内容は全て同じ
- 残りの120秒はPOST祭り
- POSTの内容は定型文
- POSTのレスポンスに動的要素は1つ(commentのid)
- POSTの最後と30秒後くらいに
GET /?p=5
- 画像等のアクセスはなし
極めて機械的な感じ。 POSTの最後と30秒後のGETは最初はなかったけどレギュレーション改訂後から発生してたので、これでチェックしてるのしてるのは確定。
構成
keepalived + nginx + php-fpm(PHP5.5) + MySQL5.6 + memcached
- 全部入りを1台用意して、その他に
nginx + php-fpm
なworkerを4台用意 - 各サーバのnginxは自分のphp-fpmにアクセスするように設定。keepalived、MySQL、memcachedは1台に集約
- インストールはremiとかのリポジトリを使ってyumで入れました。MySQLだけは公式rpmでインストール
- nginxのアクセスログに
$request_time
を追加して応答時間を確認
GET対策
ざっくり構成したのみで深い追求はしてない
- GETとPOSTが入り混じらないし動的要素がないので、全部同じレスポンスを返しておけばok。 →nginxでfcgi_cacheして90秒はcacheを返すように
- GETのボトルネックはトラフィックだったので、DSR構成で5台に分散して力技配信
- クライアントからのアクセスにAccept-Encoding: gzipがなかったので圧縮はしてない
POST対策
最初のボトルネックが解消しきれずタイムアップしました…
- ボトルネックはPHPのCPU(usr)だったのでAPCを導入
- xdebugでプロファイリングしてqcachegrindで確認 →ファイルのloadがほとんど →APC効いてない!
- PHP5.5はopcacheらしいので、APCを消してそちらを有効に →ブレークスルーでスコア3倍 (最終日の22:30頃)
- MySQLがボトルネックになるところまでいけなかったのでDBはあんまりちゃんとみてない。何も考えず適当に設定したのみ
max_connections = 2000
thread_cache_size = 500
innodb_log_file_size = 1G
innodb_buffer_pool_size = 512M
sync_binlog = 0
innodb_flush_log_at_trx_commit = 0
tmp_table_size = 256M
max_heap_table_size = 256M
tmpdir = /dev/shm/mysqltmp
skip_innodb_doublewrite
まとめ
あんまり凝ったこととか深い追求はできなかったのが残念でした。
あまり深く考えず意味のない設定とか入ってそうな気もする。
レギュレーションがブレましたが、他のチューニンガソンとかISUCONに参加したことがある人が運営にいなかったのかな?
ベンチ側の作り込みの程度は初期チューニンガソンくらいの感じで、ISUCONを見習って面白くなってくれるといいなって気持ち。
チューニンガソンと同じく インフラのみアプローチの限界 が見えて残念さが増す展開になったので自称インフラのみんなでもっとコードを読むきっかけになればいいなと思う次第。個人的にはnginxとかPHPの設定を真面目に見返すいい機会になりました!
運営の方々、参加されたみなさま、お疲れさまでした!
ちなみに、私が著者で参加してます
ちなみに、私が校正で参加してます
See also
- #isucon チーム「ウー馬場ーイー222」でISUCON13本選に参加し30位になりました
- 「SRE≠インフラなんだけどもう誤解されちゃってるから、DevOps新実装としてSite Production Engineeringはいかがでしょう?」でJAWS DAYS 2022に登壇しました #jawsdays #jawsug
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12本選に進出し12位になりました
- #isucon チーム「シン・ウー馬場ーイー2」でISUCON12予選に参加し2位で予選突破しました
- 「非ITの事業会社にSREと言わずにSREを持ち込んだ」SRE NEXT 2022で登壇しました #srenext