Upgrade to Pro — share decks privately, control downloads, hide ads and more …

高DB負荷の機能を なんとかリリースして学んだこと 〜若手エンジニアの失敗と気づき〜

Avatar for kiyo kiyo
December 05, 2024

高DB負荷の機能を なんとかリリースして学んだこと 〜若手エンジニアの失敗と気づき〜

スタートアップの未来を創る若手エンジニア 〜先輩の体験談と若手エンジニアの交流〜
にて登壇しました

イベントページ:https://aws-startup-community.connpass.com/event/335991/

Avatar for kiyo

kiyo

December 05, 2024

Other Decks in Programming

Transcript

  1. ⓒ 2020 atama plus Inc. ⾃⼰紹介 • 新卒エンジニアとしてatama plusに入社 (現在2年目)

    • フロント/バック問わず幅広く開発 • 主に生徒向けアプリの改善に携わる 2 吉清秦⽣ (kiyo) atama plus株式会社
  2. ⓒ 2024 atama plus Inc. 背景‧解決したいこと 5 学習開始 1問目 2問目

    3問目 学習完了 atama+の学習の流れ 学習時間を記録
  3. ⓒ 2024 atama plus Inc. 背景‧解決したいこと 6 学習開始 1問目 2問目

    3問目 学習完了 atama+の学習の流れ 学習時間を記録 • ブラウザを閉じてしまった • スマホの画⾯を切ってしまった
  4. ⓒ 2024 atama plus Inc. 背景‧解決したいこと 7 学習開始 1問目 2問目

    3問目 学習完了 atama+の学習の流れ • ブラウザを閉じてしまった • スマホの画⾯を切ってしまった → いつかは解決したいねと社内で話されていた 学習時間を記録 1問目、2問目の時間が 消えている
  5. ⓒ 2024 atama plus Inc. いざ開発スタート 9 • 解決策は⾊々あるけれ ど、、、

    学習 開始 1問目 2問目 3問目 学習 完了 セッションごとの テーブル 集計 テーブル 表示
  6. ⓒ 2024 atama plus Inc. いざ開発スタート 10 • 解決策は⾊々あるけれ ど、、、

    学習 開始 1問目 2問目 3問目 学習 完了 セッションごとの テーブル 集計 テーブル 表示 シンプルに ユーザーがボタンを押すたびに • 記録を送信 • 集計テーブルを更新 毎回記録 毎回更新 → 全ユーザーが⾼頻度でアクセスするため、 システム負荷が少し気になる…
  7. ⓒ 2024 atama plus Inc. 負荷試験やってみた • SREと相談して、テスト環境でユーザー動作を模擬することに • スケールアウトができないDBアクセスに着目

    ◦ 平均アクティブセッション (Average Active Session) → 負荷テストの結果 • 余裕もあるし大丈夫やろ! ◦ テスト用環境の実行結果をユーザー数倍して計算 ◦ 想定される負荷の3倍くらいがかかっても大丈夫な計算だった ◦ SRE的にもOK! 11
  8. ⓒ 2024 atama plus Inc. いざリリース • 想定していた負荷の5倍程度がかかり 、DBアクセスのアラートが通知された •

    機能ON/OFFボタン使って、機能を緊急停止することに • さらに反省点として、顧客にリリースメール も送ってしまっていた ◦ 会社の印象も下げてしまうことに 12
  9. ⓒ 2024 atama plus Inc. 第2弾リリースに向けて苦戦 • ポストモーテム後、負荷に対応して再度リリースをすることに • 負荷の予想が外れた原因を調査

    ◦ performance insights, datadog等を活用 ◦ SREと密に連携し、高負荷の要因であるクエリを特定  → テスト環境のユーザーと、    本番環境のユーザーに紐づいている学習データの違いが原因だった模様 13
  10. ⓒ 2024 atama plus Inc. 一時 集計 第2弾リリースに向けて苦戦 14 •

    重いクエリはほぼread • 強整合性は不要だった → readerインスタンスから   読み出しに変更  ↓ • 一定負荷を下げることに成功した • 一方、これ以上下げるには機能の一部を諦める必 要が 学習 開始 1問目 2問目 3問目 学習 完了 セッションごとの テーブル 集計 テーブル 表示 毎回記録 この読み出しが重かった
  11. ⓒ 2024 atama plus Inc. 第2弾リリースに向けて苦戦 • 一定の負荷低減は行ったが、再度リリースに失敗する可能性を0にはできない ◦ インフラのスケールアップにはコストがかかる

    • Biz (CS)との調整に苦戦 ◦ 再度の取り下げで、さらに印象を下げるわけにはいかなかった ◦ Prodとしては段階的にリリースしたいが、顧客とのコミュニケーションが必要 で、Bizとしてのコストもかかる 15
  12. ⓒ 2024 atama plus Inc. どう乗り越えた? • SRE, Biz, Prod集まって会議を行い、全員がコスト安になる&価値を損なわない方

    法を探した • SRE ◦ DBのreaderの増設のコスト増は許容できる • Biz ◦ 顧客体験を一旦変更しないようにすることで、段階的リリースを許可 • Prod ◦ 段階的リリースができたため、対応工数をかけすぎない&価値を損なわない方 法を選択できた 16
  13. ⓒ 2024 atama plus Inc. 振り返ってみて① • 3者のコミュニケーションが難しかった ◦ 全員が納得できる解を探すには、

    ▪ こちらの状況をきっちり整理する ▪ 相手の状況を理解する ▪ 相手の尺度に合わせて説明する ◦ 最終的には全員の状況を理解し、意思決定をする(仰ぐ)必要がある • 技術力足りなかった ◦ 負荷の値を正確に予想できた ◦ もっとスマートな実装方法を思いつけたかも 18
  14. ⓒ 2024 atama plus Inc. 振り返ってみて② • この機会を得られて良かった ◦ 技術的に学びになった(クエリ特性、DB負荷)

    ◦ 追い詰められたときにいちばん勉強するし、記憶にも残る ▪ Biz/顧客コミュニケーション、インフラのコストも考えてプロダクト開発を考 える経験になった → このためには自ら責任を持つ立場に配置するのがいちばん良い 19