サーバ高速化コンテスト、ISUCONに初参戦しました。
- 出産3日目
- 妻は帝王切開による入院中(心も体もサポートが必要状態)
- 妻の実家の近くに住むことになりレオパレス住まい(Wifiが貧弱)
という、おおよそ競技に出るような環境と精神状態ではない中、参戦しました。
近年ISUCONは人気ライブのように参加権を得ること自体にハードルがあるため、せっかく参加権を得たのに出場できないのはもったいないです。そのため、出産があろうとも事前にその日だけは1日空ける準備をしました。
子育ての準備により、特段大会への準備はできず後述に記載した凡ミスにより得点は伸び悩みましたが、ミス付きでも上位15%(結果を知っている人からすると大した得点ではない)には入れたので、出産直後でも丸一日ISUCONに集中できるための秘訣、という記録を残しておきます。
出産直後でもISUCONに参加できる準備
信頼貯金の積み上げ
子育ては忙しいです。生半可なものではありません。
子育てを学んで初めて知ったのですが、出産直後、1ヶ月程度は女性は寝る暇がほとんどありません。2〜3時間に1回授乳する必要があるからです(母乳を少しでもあげたい場合)。授乳を忘れて寝ると、胸が腫れる乳腺炎になるという制約付きで、寝れない生活が待っています。
加えて出産は帝王切開になりました。妻はお腹を切りしばらく入院となり、痛み止めなしでは生活できない状態になりました。
そんなサポートが必要な中、ISUCON参加に快諾してもらうには、何よりも信頼貯金が大切です。パパも子育てに前向きであるという意思表明と、育児グッズ、申請関連の準備がマストです。
以下、準備したものです。
- 育児グッズ(店舗)
- 子育ては買うものが多いです。ネットでまとめて買おうと思っても、何が必要で何がいらなくて何がコスパよいか、簡単には整理できません。アカチャンホンポでマタニティアドバイザーにひととおり必要アイテムを教えてもらう無料サービスがあるため、予約して妻と一緒に行き必要アイテムをメモりました。
- おしゃれなベビーカーにこだわる妻であれば、百貨店に行くと海外ブランドが多く置いてますが、かなり沼要素なので、ベビーカー決めは自分の意思表示だけしておく程度が良いかもです。
- 育児グッズ(ネット)
- 現地でいろんなイメージがわいたら、考えうる子育てグッズを全て揃えておきました。自治体によっては出産後に使えるギフト券もありますが、安心感を与えるため、必要になってから買うのではく、事前に買い揃えました。育児グッズに足りないものがある状態でお腹を切って入院なんて不安で仕方ないでしょう?ギフトはオムツなどで後からいくらでも利用できます。
- 高価なものはジモティなどで譲りうけるのも手です。
- こんな感じで表に書きなぐって揃えました。表はこれでも一部です。
- 出産後の申請関連の整理
- 出生届、健康保険、高額療養費制度、出産育児一時金(50万円)
- 児童手当金。月15000円もらえる
- 医療費助成。医療費が無料になる
- 018サポート。東京都では月5000円もらえる
これらの申請方法をメモっておき速やかに申請できるようにしました。
- 両親学級への参加
- 赤ちゃんのお風呂、つまり親が体を洗うことを沐浴と言います。こういった体験会を自治体で開催することがあるため、参加して「沐浴ができるパパ」ブランドを作っておきました。
- 通院へのつきそい
- これは仕事の時間調整が必要なのですが、1回ぐらいは一緒に通院してエコーで赤ちゃんの顔を一緒に見る、という同じ時間を共有していたのもとても良かったです。
- 命名
- とんでもなく時間がかかります。これは仕方ない。
- 注意点があって「名前にできない漢字」があります。とんでもない罠です。これ知らないと積みます。気になる人は「中川翔子 改名」とかググってみてください。
- 逆子体操の手伝い
- お腹の中の赤ちゃんが逆向きになっていると、通常分娩ができないため、逆子体操やツボの温めなどをして症状を改善します。結果的に逆子は直りませんでしたが、これを毎日手伝うことで信頼貯金は積み上がりました。
- 入院直後のつきそい
- ISUCONが近いからといって手を抜いてはいけません。3日後にISUCONを控えてる状態で出産になりました。過去問とか言ってる場合ではありません。出産後も病院に顔を出し、おむつ替えの練習やミルクを積極的に与えることで信頼貯金を積み上げておきます。
これらを行うことで、ISUCONの準備はできずとも、当日は育児を忘れ、ISUCONに集中することができました。
レオパレスからISUCONに参加する準備
経緯はいろいろあるのですが、
妻の実家の近くのレオパレスにしばらく住むことになりました。
- ISUCONはPCと電源とWifiさえあれば参加はできます。しかしさすがに外付けモニター程度は欲しいです。CLASという家具のレンタルサービスでオフィスチェア・モニターをレンタルしました。レンタルサービスは、月ごとの料金以外にも、返送料金が地味に高かったりするので注意です。
- レオパレスってWifi遅そう、と思うかも知れませんが、速度はあまり問題になりませんでした。どちらかと言うとたまに接続が切れることがあり、これが大問題で、本番も見事に切断されました。これはテザリングなどバックアップ手段を事前に準備して乗り切りました。
ISUCONの準備
- GitHubリポジトリとデプロイスクリプトのみ用意してあとはぶっつけ本番でした。
- しかしビビっていけません。パフォーマンスチューニングは楽しいものです。パフォーマンスチューニングはいろんなプロジェクトで実施したことがありますが、成果がでたときの気持ちよさは最高です。楽しむ気持ちが大事です。
ISUCON当日
選択言語はRuby。
改善内容はみなさんと変わらないと思うので、改善したサマリだけ。
- statisticsの改善
- iconのキャッシュ
- ngwordsの改善
- full_**_responseのN+1の改善
- MySQLのチューニング
など
スタートしたては、Rubyで利用しているmysql2 gemの使い方に慣れておらず、生産性がめちゃくちゃ悪かったですが、その割には、最終的にはDNS対応以外はみなさんと同じような改善はできたのかなと思います。
何もできなかった〜って感じではなく、やることは無限にあったしまだまだ改善できそうで、慣れればもっとスコア出そうという感覚を掴めて楽しめたです。
もっと改善できたこと
- 動作確認やプロファイリングに投資する
- ベンチマーク実行がキューに詰まり、待ち時間も多くデプロイが止まってしまったのがもったいなかったです。サーバは3台あるんだから、DB分割は最後で、途中まで3人で1台ずつ動作検証環境に使えたかもしれない。
- 3台でそれぞれ開発するなら、NewRelicも3台それぞれ別名でAPM作っちゃって分けても良かったかも。
- とにかく悩むより先にNewRelicトレーサーを仕込んでも良かったかも。
- DB migration管理
- 後述のDDLの管理を怠ったがゆえ凡ミスを起こしてしまいました。
- リモートでの音声環境
- オンライン特有なのですが、チームメンバーの開発中のひとりごとがずっと耳に入ってきて「あれ、何か言いたいことあるのかな?」みたいな感じで思考が途切れる事が多かったのと、指摘もしづらかったので、ミュートしておくなど、何か事前に認識合わせできたんじゃないかなと思います。
- レオパレス以外からの参戦
- Wifi環境は大事。
ミスによる減点
なんとindexがはがれるというとんでもない初歩的なトラブルが起きてしまいました。DBに直接ALTER文を投げてindexを貼ってしまっていたため、1台目のDBにしかindexを貼っておらず、DBを別サーバに切り替えた際に、切り替え先のDBにindexを貼りそこねてしまっていました。
記事にしてみると「しょぼいことしてるな〜」という感想なのですが、準備不足かつ急いでいる現場だというこういうミスをしてしまうものですね。
そのため、解説で記載されてるような内容のうち、DNS関連以外はだいたいやったつもりなのですが、点数は伸び悩みました。割りと点数取っている人でも0点になってしまったチームもいっぱいあったようなので、やらかすと絶望ですね。上位15%という結果でまずまずした。
感想
- 運営に感謝。初参戦でしたが準備する側は想像を絶する大変さがあるだろうという感想。運営がもっと報われる仕組みがあると良いですよね。
- 1位の人の飛び抜け方が半端なかった。シンプルにすごい。
- 出産3日目の我が子、入院中の妻、ありがとう!