お首が長いのよお首が長いのよ

チラシの裏よりお届けするソフトウェアエンジニアとして成長したい人のためのブログ

2019-09-08

【ISUCON9予選】初参加しました

# ISUCON9に参加しました

前々から気になってたけどチーム組んで参加するのがハードル高かったんですが、友人と参加する事ができました。

結果

結果は予選落ちです。 スコアは5,010イスコインでした。

やったこと

一緒に参加した友人に比べて特別に高いスキルを持っているわけではないので、 浅く広い技術の知見を生かしてメンバーの壁打ちやissueの調査をメインに、チームメンバーが気持ちよく動ける立ち回りを意識しました。

  • オフライン会場の準備
  • アプリの調査
  • Nginxのログフォーマット設定issueのヘルプ
  • ローカル開発環境準備のヘルプ
  • DBのチューンナップ
  • アプリとDBの分離

オフライン会場の準備

ほぼこれに終始といっても過言ではない。 結果的に「下手なコワーキングスペースより充実してて良い」といってもらえたのがモチベーション。

https://twitter.com/NakadEngineer/status/1170112341649711107?s=20

https://twitter.com/Kill_In_Sun/status/1170127267919302657?s=20

  • 壁一面にデプロイされたホワイトボード
  • 無線接続できる55インチ4Kテレビを使った共同作業用モニタ
  • 1人1台ずつ使えるディスプレイ
  • 昼食は手軽に食べられるホットドッグを無償提供(近所のスーパーで半額になっているもの)
  • その他軽食、エナジードリンク(結局メンバーが来るときに自分で調達してたので不要に)
  • 電波ソングを自由に流しながら作業ができるBlueToothスピーカー

若干ネタに振り切ってますが、気軽にくつろげて会話ができて作業に集中できる環境はかなり大事

アプリの調査

アリババクラウドのアカウントを用意してくれたメンバーがインスタンスのデプロイをしてくれた後、アプリの調査を行いました。 が、Frontend周りが自分には難解すぎて良い動きができなかった。  バックエンドの改修をするにもフロントエンド側の修正も必要だと想像し(本当は必要ない部分もあったと思うが) 結局ソースコード周りは手がつけられなさそうだと判断してMWへ。

NginxのLogFormat設定issueのヘルプ

nginxにkataribeを入れ込もうとしているメンバーがnginxのLogFormat修正に苦戦しているのをヘルプ 原因は単純なところだったけど調べてさっと解決できるところなのでよかった。 (ログの出力設定にLogFormat名指定しているのにLogFormatの部分で名前記載してなかった)

ローカル開発環境準備のヘルプ

もうひとりのメンバーはソースコードをgithubに用意してくれており、そいつをクローンして開発できるように。 予め用意してくれたDB用のdocker-composeファイルをISUCON9用に修正しても動かず、 initialize.sqlファイルがISUCON9の.gitignoreに記載されてる上にサイズが大きすぎてgithubにも乗っけられないので SCPで無理やり引っ張ってデータをコンテナ上DBに突っ込んだ。

この辺はメンバーにヘルプしたりされたりだったので個人でどうにかできればよかったなと反省

DBのチューンナップ

後半はコードの修正で貢献ができないと判断したのでDBのチューンナップへ。 一応ネットに落ちているものを拝借しつつ、細かいパラメータをコンテスト用に設定したけど、 そもそもアプリ側でCPUを浪費していたので大きな貢献には至らなかった。

DBとアプリの分離

もともとはインフラメンバーがやりたがってたリバースプロキシも2台構成にしないと意味がなく、 であれば アプリとDBだけひとまず分けちゃおうっていうことで、アプリのDB向き先を別のインスタンスに変更。

が、その後こいつが原因で port:8000番が開かなくなってしまった原因の調査にかなり時間を費やしてしまった。 systemdのステータスみてもLoadedになってるし、いくらssコマンドでもlsofコマンドでもサービスの受付をしているように見えない。

systemdが叩いているアプリの実行コマンドを直打ちで試したところ、向き先をかえたDBが接続を弾いているためと判明。 そこからはまた長い道のりで、 mysql.userテーブル内の接続許可設定を見るためにrootアカウントの情報探しても見つからず、泣く泣くsafeモードでパスワード初期化して入れたと思ったら 設定に違和感は無く、アプリの修正をゴリゴリやっているメンバーにアリババクラウドのセキュリティグループ設定を追加してもらっても動かず 最終的にメンバーの「この設定は?」の一言から解決した。

原因は/etc/mysql/my.cnf内にあるbind-addressの設定だった。 泣きたい。 こんなのあったのかという感じだった。

壁打ちで助けてくれたメンバーに感謝・・・

所感

と、いろいろ上記を振り返ってみて思うのはアプリの修正に全く貢献できてなかったし、アプリいじれるメンバーも チームで1人しかいない尚且ISUCON経験者ってことで彼の負担がかなり大きかったと思う。 やるべきことは見えてるのに時間が足りないって漏らしてたし、もう少しこのあたり貢献できるくらいの自力はつけないとだめだなと反省した。

Discordの感想部屋で流れている内容は、どれも自分でも「あーそういやそうだよな」ってネタばかりで、 知識レベルでは大きくずれてるわけじゃないと安心できたので、もう少し実践でどうにかできないとなとただただ思うばかり。

ISUCONの問題はかなりよく出来ていて、物語の設定もそれ用のデータもよく作り込まれてて非常に関心した。

現職はカスタマーサクセスや、自社のサービスを導入するみたいなロールで、あまりWEB開発やインフラからかなり離れたところになっているけど、 定期的にこういったコンテストに参加してモチベーションを高めて趣味の時間でも実力を維持したり、高める機会にしたいと思った。

とにかく準備と開催してくださった運営スタッフの皆様お疲れ様でした。 一緒にやってくれたメンバーもお疲れ様でした。

リベンジ会しましょう。

/以上

よかったらシェアしてください!