アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
by
M-Yamashita
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
アクセスピークを制するオートスケール再設計: 障害を乗り越えKEDAで実現したリソース管理の最適化
Slide 2
Slide 2 text
自己紹介 山下 雅人 クラウド経費・クラウド債務支払 SRE チームリーダー バックエンドエンジニアとSREの 経験を活かして活動中 Kaigi on Rails Organizer
Slide 3
Slide 3 text
今日話すこと AWS移行プロジェクト - オンプレミスからクラウドへ 障害と課題発見 - アクセスピーク時のオートスケール問題 KEDA導入 - リクエスト数に応じたスケーリング データ活用最適化 - 適切なレプリカ数の導出
Slide 4
Slide 4 text
AWS環境への 移行プロジェクト
Slide 5
Slide 5 text
過去のマネーフォワードの アーキテクチャについて
Slide 6
Slide 6 text
(マネーフォワード 中出氏, ITmedia Cloud Native Week 2022春 基調講演, 2022年より引用)
Slide 7
Slide 7 text
桃園脱却
Slide 8
Slide 8 text
クラウド経費・クラウド債務支払のAWS環境移行 🏢 移行前 📟 オンプレミスVM 🗃️ 共有DB → ☁️ 移行後 🚀 EKS 🗄️ 専用DB
Slide 9
Slide 9 text
AWS環境における オートスケール設計
Slide 10
Slide 10 text
そもそもなぜオートスケールが必要なのか ビジネス面から考えてみる
Slide 11
Slide 11 text
AIの力を借りて考える Illustration © unDraw.co
Slide 12
Slide 12 text
ビジネス面から見たオートスケールの必要性 機会損失の防止と顧客体験の最大化 キャンペーンや突発的なアクセスピーク時でもサービスを 安定稼働させることで、販売機会の損失を防ぐ インフラコストの最適化 アクセスピーク時以外はリソースを自動で縮小し、過剰な リソース確保によるコストを削減 事業成長への迅速な対応 サービスの利用者増加や事業拡大に伴い、将来的に増大する アクセスピークにも柔軟に対応 ビジネスの成長をITインフラが支えられるようにする
Slide 13
Slide 13 text
クラウド経費・クラウド債務支払における アクセスピークとは?
Slide 14
Slide 14 text
アクセスピークの特徴 利用ユーザーは月末月初にかけて経費申請や承認をするために アクセスすることが多い 確定申告時期〜年度始め付近にかけてもアクセスが多くなる 月初〜月末におけるリクエスト数の遷移
Slide 15
Slide 15 text
アクセスピーク時におけるオートスケール設計 📊 分析対象 メトリクス: CPU使用率、メモリ使用量 観察期間: 1日および1週間 目的: リクエスト数との相関関係を調査 ⚙️ 設計方針 リクエスト増加パターンを分析し、適切な閾値を設定する
Slide 16
Slide 16 text
リクエスト数とCPU使用率の関係 1日の推移 午前中: リクエスト数とCPU使用率 が上昇 日中: 高い水準を維持 夜間: 両メトリクスが減少傾向 1週間の推移 平日: 日中に両メトリクスが増加 月曜日が最もアクセスが集中 土日: 両メトリクスともに低い水準で 推移 リクエスト数とCPU使用率に相関あり
Slide 17
Slide 17 text
リクエスト数とメモリ使用量の関係 1日の推移 終日: リクエスト数の変動に関わらず メモリ使用量は横ばいで推移 1週間の推移 平日・休日: メモリ使用量は常に 横ばいで推移 リクエスト数とメモリ使用量には相関なし
Slide 18
Slide 18 text
過去データから導いた考察 CPU使用率がボトルネックになると想定 リクエスト数とCPU使用率の連動性を確認 メモリ使用量が横ばいであったため、CPU使用率が先に ネックになると想定 オートスケール機能にはHPAを採用 Kubernetesの基本機能、豊富な他社事例と運用ノウハウ AWS環境での運用経験不足をカバー KEDAの選択肢もあったが必要になった時に検討と判断
Slide 19
Slide 19 text
CPU使用率の閾値検討 HPAではRequest値を基準とした閾値 となっている 確実にスケールされることを考慮 閾値を60%に設定 https://kubernetes.io/docs/tasks/run- application/horizontal-pod-autoscale/
Slide 20
Slide 20 text
迎えたAWS環境への移行当日
Slide 21
Slide 21 text
迎えたAWS環境への移行当日 AWS移行、無事完了!🎉
Slide 22
Slide 22 text
2024年12月 月初 AWS環境に移行後 初のアクセスピーク日
Slide 23
Slide 23 text
鳴り響くアラート ⚠️ Slackでの外形監視エラー 🔥 p95レスポンスタイムの異常増加 ⚠️ HPAによるスケールが機能せず システム全体が危機的状況に陥る
Slide 24
Slide 24 text
暫定対策 状況把握 アクセス数に対してpodが不足していた CPU閾値をトリガーとしたHPAが機能していなさそう メモリ不足の傾向が見られる 緊急対応 minReplicasを大幅に増加 podのメモリ割り当てを増加 アクセスピークを乗り切ることに成功
Slide 25
Slide 25 text
振り返り: なぜ問題が起きたのか
Slide 26
Slide 26 text
障害の振り返り: CPU使用率メトリクスの推移 障害発生期間: アプリ全体でCPU使用率は50%以下程度で推移 HPAのCPU閾値は60%のためスケールしなかった 障害発生期間におけるCPU使用率の推移グラフ
Slide 27
Slide 27 text
障害の振り返り: メモリ使用率の推移 障害発生期間: アプリ全体でメモリ使用率が100%近くで推移 livenessProbe(プロセス生存確認)がメモリ不足の影響で失敗 メモリ不足によりアプリケーションが不安定になりPodが停止 障害発生期間におけるメモリ使用率の推移グラフ
Slide 28
Slide 28 text
障害の振り返り: そして悪循環へ
Slide 29
Slide 29 text
障害の振り返り: 今後の対応方針 緊急対応(短期対策) 暫定的にminReplicasを増加させサービス継続 月末月初のアクセスピークに対応可能な体制を確保 根本対策(長期解決策) リソース最適化: メモリ割り当ての見直しと適正化 スケール機能強化: オートスケール設計の見直し 閾値最適化: CPU使用率の閾値を実態に合わせて調整
Slide 30
Slide 30 text
オートスケール設計の 改善ポイント
Slide 31
Slide 31 text
オートスケール設計の改善ポイント 閾値設定の根本的見直し CPU使用率との相関性に依存したスケール設計 負荷の根本原因であるリクエスト数を直接監視 データ分析における注意点 相関関係は「現時点での傾向」として参考程度に留める 将来的にボトルネックとなるリソースは変化する可能性あり
Slide 32
Slide 32 text
新技術導入における慎重なアプローチ なぜ最初からKEDAを選ばなかったのか? 新しい技術スタックへの学習コストの高さ トラブル発生時の対応ノウハウの不足 段階的導入のメリット まずは実績のあるHPAで運用開始 問題が発生してから改善を検討する段階的アプローチ 結果として今回の経験により最適解が見えた
Slide 33
Slide 33 text
オートスケール改善のアプローチ検討 障害の根本原因を解決するために、複数のアプローチを検討 データ活用アプローチ アクセスパターンの分析結果を活用 予測可能な負荷変動への対応 技術改善アプローチ より適切な監視メトリクスの採用 柔軟なスケーリング機能の導入
Slide 34
Slide 34 text
静的 vs 動的スケーリングの判断 静的スケーリング(cron) 固定的なスケジュールでは細かな調整が困難 突発的なアクセス変動に対応できない 動的スケーリング リアルタイムでの負荷変動に柔軟対応 より精密なリソース管理が可能 動的スケーリングでより適切な監視指標が必要
Slide 35
Slide 35 text
KEDAを活用した リクエスト数ベースの オートスケーリングへ
Slide 36
Slide 36 text
Kubernetes Event-Driven Autoscalingとは イベントをトリガーにアプリケーションを オートスケーリング可能 メッセージキューの長さやDBの行数 など様々な"イベント"をトリガーに 指定可能 コスト効率の最大化 (ゼロスケールイン) Podの数を自動的に0台にまで スケールイン可能 https://keda.sh/
Slide 37
Slide 37 text
KEDAの役割 Operator: イベントソースを監視し インスタンス数を調整 Metrics Server: 外部メトリクスを HPAに提供し、スケーリングを判断 Scalers: 各イベントソースに接続、 現在の使用状況を取得 CRDs: カスタムリソースを使用して アプリケーションがスケーリングを すべきかを定義
Slide 38
Slide 38 text
オートスケール再設計: リクエスト数の閾値追加 Datadogとの連携 Datadogでリクエスト数をモニタリング中 Datadogのリクエスト数を参照 取得したリクエスト数に応じてオートスケールさせる 閾値算出の進め方 移行前の性能試験におけるエンドポイントに着目 AWS環境上の同エンドポイントにおける処理能力から算出
Slide 39
Slide 39 text
KEDAの閾値をどう決めるか?- 私たちのアプローチ
Slide 40
Slide 40 text
基準値の算出 - データ分析から平均処理能力を算出
Slide 41
Slide 41 text
Podの処理能力を定量化する
Slide 42
Slide 42 text
実用的なKEDAの閾値を導き出す KEDAで使用するリクエスト閾値の確定
Slide 43
Slide 43 text
オートスケール再設計: CPU使用率は継続採用 リクエスト数では捉えきれない負荷への対応 アクセス数が閾値に満たない状況でもCPU使用率が上昇する ケースを考慮 システム可用性の向上 Datadogサービス停止時のフェイルセーフ機能として動作 監視システムの単一障害点を回避し、サービス継続性を確保 リクエスト数とCPU使用率の二重監視体制により信頼性向上
Slide 44
Slide 44 text
オートスケール再設計: CPU使用率閾値の最適化 問題の特定 設定していた60%閾値では反応が遅すぎることが判明 閾値の調整 変更前: 60% → 変更後: 45%(15%の緩和) 期待される効果 アクセスピーク時の早期スケールアウト実現 サービス応答性の改善とユーザー体験の向上
Slide 45
Slide 45 text
オートスケール再設計: メモリ使用率を組み込むか? 検討結果 メモリ使用率は閾値として採用しない 理由 ガベージコレクション実行により使用率が不規則に変動する スケーリングトリガーとしての予測可能性と信頼性に欠ける メモリ集約的なアプリケーションは事前設定で対応すべき
Slide 46
Slide 46 text
KEDA設計の最終仕様 採用する監視指標 リクエスト数: エンドポイントの処理能力に基づく閾値設定 CPU使用率: 障害時の検証結果を反映し45%に設定 (従来60%から緩和) 除外する監視指標 メモリ使用率: ガベージコレクションによる不規則な変動の ため除外
Slide 47
Slide 47 text
オートスケール再設計後のKEDA適用 日中: アクセス増加に伴い正常にスケールアウトが動作 夜間: アクセス減少に伴いスケールインが正常に動作 KEDAによるスケールアウト・スケールインの動作結果
Slide 48
Slide 48 text
最適な レプリカ数の導出
Slide 49
Slide 49 text
KEDAを活用できたので 次はレプリカ数を見直す
Slide 50
Slide 50 text
移行当時のレプリカ数 事前性能試験の結果に基づいて設定 AWS環境移行時に性能試験を実施し、HPAの適切なレプリカ数 を算出 minReplicas: 平常時のアクセスを処理するのに必要な台数 maxReplicas: アクセスピーク時に対応できる台数
Slide 51
Slide 51 text
アクセス数比率でレプリカ数を最適化 最小アクセス数における理想 現在のminReplicasの約1/3の 台数で稼働可能 現状 minReplicasの台数のまま 夜間も稼働 課題 余剰コストが毎日発生 夜間と日中のアクセス数比率
Slide 52
Slide 52 text
KEDAでのminReplicaCount決定までの流れ メトリクス分析 夜間のCPU使用率: 10%程度 夜間のリクエスト数: 数千程度 負荷要因の考慮 外部要求: 外部API、社内プロダクト連携 内部処理: 夜間バッチ、定期データ処理 これらを総合的に考慮してminReplicaCountの目標値を決定
Slide 53
Slide 53 text
目標値に向けたminReplicaCountの削減の進め方 案1: 一気に削減 メリット: コスト削減を即座に実現 リスク: 予想外の挙動でサービス影響の可能性 案2: 段階的削減 メリット: 安全性を確保しながら削減 リスク: コスト削減の効果実現に時間がかかる 案2を採用: 段階的な削減と監視で目標値を目指す
Slide 54
Slide 54 text
クラウド経費・クラウド債務支払での 監視方法について
Slide 55
Slide 55 text
常時監視 AWS移行時から監視設定済み アラート設定 Datadogで各種メトリクスの 閾値監視 通知 異常検知時にSlackへ自動通知 対応 SREをメインに調査、対応
Slide 56
Slide 56 text
フィードバックと対応 既存の会議体制を活用 参加者・体制 SREチーム + 開発メンバー 週次で定期開催 確認内容 各種メトリクス確認、異常波形の原因特定・対応 情報共有・連携 双方の実施済み変更を共有し、システム状況を理解
Slide 57
Slide 57 text
minReplicaCount削減と監視のサイクルを構築
Slide 58
Slide 58 text
段階的なminReplicaCountの削減実施 minReplicaCount削減結果 AWS環境移行時と比較し60%削減に成功 サービス影響なしで実現 →段階的なアプローチによる安全な最適化完了
Slide 59
Slide 59 text
レプリカ数の最適化達成
Slide 60
Slide 60 text
まとめ 技術的改善 オートスケーリング: ピーク時も最適なレプリカ数で稼働 運用自動化: 手動でのレプリカ調整が不要に コスト最適化 リソース効率化: 必要な時に必要な分だけ稼働 大幅なコスト削減: minReplicaCount 60%減を達成 チーム効率化 工数削減: 監視・調整作業からの解放 価値創出: 機能開発・改善により多くの時間を投入可能
Slide 61
Slide 61 text
宣伝
Slide 62
Slide 62 text
スポンサーブースのお知らせ
Slide 63
Slide 63 text
No content
Slide 64
Slide 64 text
ありがとうございました