matsukaz's blog

Agile, node.js, ruby, AWS, cocos2d-xなどなどいろいろやってます

ISUCON8予選に参加、敗退しました

今回初めて会社の同僚たちとISUCONに参加しました!

結果はというと・・・予選で敗退(´;ω;`)

最高スコアが 29,000 ぐらい、本選参加のギリギリラインが 36,471 だったので、それなりに頑張れたとは思うけどダメでした。しかも例年のように再起動試験後のスコアで競うのかとルールを勘違いしてた始末。予選のガイドラインにも

各チームの終了時スコアに基づき予選通過者を決定します。最後に提出したスコアがfailしていたチームは失格となります。

って書いてありました。再起動後もスコアが落ち込まないように対策(後述)までしたのに、意味ないやつ・・・ちゃんとルール読まなきゃダメですね。最終スコアはfailだったので、勘違いに気づいた時点で自分たちのISUCONは終わってましたけども(;´Д`)

ただブログを書くまでがISUCONだと思うので、対策としてやってきたことや当日の様子などを書いてきます。

準備したこと

5月から週一ペースで1時間集まってちょっとずつ準備を進めてました。やったこととしては

といったところ。 情報共有にはKibelaWikiを使いました。すごい使いやすかった!

当日の流れとして事前に整理してた内容は以下な感じです。必ずしもこの通りにいったわけではないですが。

gist.github.com

当日の流れ

当日は3人横並びで予選に臨みました。 やった作業は話しつつSlackで共有。

10:00 〜 11:00

  • ガイドラインの熟読
  • システム構成の把握
    • h2oとMariaDBの構成にびびったものの、とりあえずこの構成のまま進めることに
  • アプリをGo実装に切り替え
  • 初期スコア確認
  • もろもろをGit管理
  • モニタリング実施
    • netdata
    • pt-query-digest
  • 基本的なチューニング

11:00 〜 14:30

  • pt-query-digestでわかったスロークエリを元に改善
    • クエリ自体の改善
    • インデックス見直し
    • N+1問題になっていた実装を中心に修正
    • DBで持っていたsheetのマスタ情報をソースコード上で定義
  • h2oのログをKataribe対応
    • 重いリクエストを中心に実装改善

14:30 〜 16:00

  • システム構成を変更
    • 最初は1台構成(h2o + アプリ + MariaDB
    • DBを切り離して2台構成 (h2o + アプリ / MariaDB)
    • dnsmasqを利用してh2oからアプリへのリバプロを2台のサーバ(1つは自サーバ)にラウンドロビン、3台構成に (h2o + アプリ / アプリ / MariaDB)
  • 引き続き個別チューニング

この時点で暫定1位!(実際はfailになってスコアが出てない人がたくさんいたけど)

f:id:matsukaz:20180920010227p:plain

16:00 〜 17:00

  • 引き続き個別チューニング
  • 再起動後も高いスコアが出るように、MariaDBのバッファプール暖気対応(やる意味なかったやつ…)
    • バージョンを5.5から10.3にアップデート
    • バッファプール暖気設定(以下のやつ)
[mysqld]
innodb_buffer_pool_dump_pct  = 100
innodb_buffer_pool_dump_at_shutdown= 1
innodb_buffer_pool_load_at_startup = 1
  • スコアが安定せずにfailが多発
    • 変更した実装をrevertしたりと悪戦苦闘

17:00 〜 18:00

  • fail多発、ほとんどスコアが出ないように…
  • 試行錯誤したものの、最終的にここでタイムアップ。再起動試験後のスコアに賭ける(そもそもそういうルールじゃなかったので意味なし)

まとめ

というわけで私たちのISUCONは終わりました。

いろいろうまくいかないこともあったけども、練習した成果は出し切れたんじゃないかと思います。 準備期間でもいろいろ学ぶこと多かったし、当日の切羽詰まった中で手を動かすことも良い経験でした。 何よりも楽しかったです!!!40歳を間近にして初参加とかどうなんだろ?と思ったけど、ほんとに参加してよかった。 みんなも来年参加してみるといいんじゃないでしょうかー。 来年こそは本選出てみたいので、多分リベンジすると思います!(๑•̀ㅂ•́)و

最後に運営に関わった皆様、本当にお疲れ様でした! 準備にどれだけの時間がかかったんだろうと考えるだけで、もうただただ感謝しかありません…。 まだ本選があって大変かと思いますが、何事もなく終わることをお祈りしております。 本当にありがとうございました!!!

リンク

準備期間に調べたもの

カーネルパラメータのチューニング箇所や値の妥当性について調べた内容をGistにあげておきました。 どなたかの参考になればー(誤っていたら教えてください)。

gist.github.com

当日調べたもの

あとは当日いろいろ困ってぐぐったリンク先でもシェアしておきます。

nginxのパラメータチューニングとh2o

dnsmasqで始めるプライベートDNSサーバ - GeekFactory

dnsmasqを使って簡単にDNS round robin(ラウンドロビン)

h2oでreverse proxy | Nikushi's blog

systemd で ulimit 上げるときの推奨の方法

systemd時代に困らないためのlimits設定 | 外道父の匠

CentOS7の/etc/sysctl.d/以下の設定ファイルの反映方法 - tsunokawaのはてなダイアリー

【すぐわかる】CentOSのポート開放のやり方

www.wantedly.com

キテるよ、今イイ感じ!

キテるよ、今イイ感じ!

いい感じの店長さん

いい感じの店長さん