アプリケーションの不調を発見し、チームで改善できた話

弥生 Advent Calendar 2020 8日目の記事です。

開発本部の id:mizukmb です。普段はMisocaのインフラの面倒を見たりしています。

Misocaの開発チームでは毎週SLOの状況を共有する時間をとっています。SLOを設定した話は別記事で紹介しています。

tech.misoca.jp

先日、開発チームに共有したところ普段よりもレスポンスタイムが悪化してることがわかりました。これ以上の悪化はサービスに大きな悪影響を及ぼしてしまう事も懸念されました。

そこで、年末年始をトラブルなく過ごせるように開発チームでボトルネックを見つける会を開き、原因の特定から実際に改善し効果が表われたことを確認できました。

問題発見

Misocaには時期によってアクセス数の波があります。月末・月初はアクセス数が普段と比べて多くなり、レスポンスタイムもそれに伴って増加しやすい傾向にあります。

下図を見てもらうとわかりますが、9, 10月は連続してレスポンスタイムの95, 99パーセンタイル値が増加しています。さらに、9月は四半期締めの時期で特にアクセス数が多い月なのですが、それよりも10月の方がレスポンスタイムが長くなってしまっています。この時点では原因は特定できてなかった状態で、早急に手を打つ必要がありました。

f:id:mizukmb:20201207164639p:plain
Redashで可視化しているレスポンスタイムのグラフ。濃い赤が95、薄い青が99パーセンタイルのレスポンスタイム値。9月と比べて10月の方が大きくスパイクしていることがわかる

しかし、開発チームメンバーは各自プロジェクトのタスクを抱えており、どのくらいのタスクが発生するかわからないパフォーマンス改善を各自が率先して引き受けるのは心情的に難しい状態でした。

そこで、過去に開発者ブログでも紹介した「お気持ち会」の要領で有志で集まり、最低限下記を明らかにすることにしました。

  • レスポンスタイム悪化のボトルネック特定
    • フロントエンド、アプリケーション、バックエンド、ネットワーク等様々な観点から見つける
  • ボトルネックを解消する方針の策定

上記までを会のゴールとして、実際に解消する作業は別途行うこととしました。

f:id:mizukmb:20201204140203p:plain
開発チームでどうするか話し合って、有志でボトルネックを見つける会を開くことが決まった

お気持ち会の記事はこちら。

tech.misoca.jp

ボトルネックを見つける会

後日、ボトルネックを見つける会を開きました。当日はRedashで可視化しているレスポンスタイムのグラフやSkylightでRailsのアクション毎のレスポンスタイムやイベントシーケンスを確認しながら、ボトルネックとなっている処理をみんなで探しました。結果として、いくつかボトルネックと思われる処理の特定ができ、さらにはそれに対する具体的な改善策まで話し合って決めることができました。

f:id:mizukmb:20201207143141p:plain
当日の議事録。当日は多くの人に参加してもらったことで一般的な高速化のテクニックからドメイン固有の知見を活かしてボトルネックと思われる箇所を複数発見できた

最終的に、この見つける会ではボトルネックを思われる箇所をいくつかリストアップし、その中から特に大きな効果を期待できそうな改善策を決めて修正するというところまで決めて終わることができました。

コードの修正〜リリース後の効果測定

見つける会では今後の作業者のアサインまでは決められませんでしたが、修正箇所の実装に詳しいメンバーが積極的にタスクを拾い上げてくれたおかげで、会を開いたその日に修正のプルリクエストが出来あがるという驚きの仕事の速さでした。

f:id:mizukmb:20201204150658p:plain
頼れる開発チームメンバー

f:id:mizukmb:20201207143032p:plain
本当に2時間後にプルリクエストを作っていた

リリース直後から効果は表れていて、効果の高いところだと普段よりも95パーセンタイル値で40%程高速になっていました。

f:id:mizukmb:20201207174846p:plain
Skylightのレスポンスタイムグラフ。薄い赤が95パーセンタイル値。リリース直後からグラフが全体的に下がっていて改善されていることがわかる

山場だったアクセス数が増加する期間も大きくスパイクすることがなくなり、パフォーマンスの改善効果があったことを確認できました。

f:id:mizukmb:20201207182411p:plain
Redashで可視化しているレスポンスタイムのグラフ。濃い赤が95、薄い青が99パーセンタイルのレスポンスタイム値

まとめ

アプリケーションのレスポンスタイム悪化から、実際に開発チームで改善するまでの流れを紹介しました。

ボトルネックの発見方法については、過去にISUCON 1 というコンテストに参加していた個人的な経験が活きたかなあと思いました。

また、こうした緊急度の高い問題に対してきちんと開発チームとして問題の提起から解決、結果の測定まで手を動かした事も良かったですし、それをしっかり実行できるMisocaの開発チームは強いチームだなあと改めて実感しました。

採用

チームで問題解決に取り組むことができるMisocaに興味のある方からの応募を待っています!


  1. 与えられたアプリケーションの高速化を競うコンテスト http://isucon.net/