サービスの信頼性の必要性と、新機能リリースの必要性のバランスを取ります。
→サービスレベル目標(SLO)(例: 99.9% の可用性)を定義します。残りの 0.1% がエラーバジェットです。バジェットがほとんど残っている場合は機能をリリースします。バジェットが枯渇した場合は、機能リリースを停止し、信頼性向上に焦点を当てます。
理由: エラーバジェットは、リスクの意思決定を行うためのデータ駆動型フレームワークを提供し、エンジニアリング、製品、ビジネスチームを共通の目標に合わせます。
心理的安全性の文化を育みながら、インシデントから学び、再発を防ぎます。
→インシデント発生後は、非難をしない事後分析を実施します。個人への責任追及ではなく、システム要因、プロセスギャップ、ツール障害に焦点を当てて調査します。結果は、実行可能な改善項目のリストであるべきです。
理由: 非難をしない文化は、正直でオープンなコミュニケーションを促進し、インシデントの根本原因をより正確に理解し、より効果的な予防措置につながります。
混乱や重複する労力を避け、大規模なインシデントへの対応を効果的に調整します。
→インシデントコマンドシステム(ICS)を実装し、明確に定義された役割を設定します: インシデントコマンダー(全体調整)、オペレーションリード(技術調査/修正)、コミュニケーションリード(ステークホルダーへの更新)。
理由: ICS は、インシデント対応のための標準化されたスケーラブルな構造を提供し、明確な指揮系統とコミュニケーションを確保します。これは、複雑な問題を迅速に解決するために不可欠です。
ソフトウェアデリバリー組織のパフォーマンスを測定します。
→DORA の主要な 4 つの指標を追跡します: デプロイ頻度(どれくらいの頻度か)、変更のリードタイム(コミットからデプロイまでどれくらい速いか)、変更失敗率(デプロイの何パーセントが失敗を引き起こすか)、サービス復元時間(MTTR)。
理由: これら 4 つの指標は、開発速度と運用の安定性の両方をバランス良く捉え、高性能な組織と相関があることが証明されています。
SRE チームが手動の反復的な運用タスク(トイル)に多くの時間を費やしすぎており、エンジニアリングプロジェクトに時間が割けていません。
→最も時間のかかるトイルを特定し、定量化します。これらのタスクを優先順位付けして自動化します(例: 手動スケーリングの代わりにオートスケーリングを実装する、一般的なアラートの自動修復)。トイルをエンジニア時間の 50% 未満に制限します。
理由: トイルは生産性と士気を低下させます。自動化を通じてこれを体系的に削減することで、エンジニアは長期的な信頼性向上に取り組む時間を確保できます。
共有インフラストラクチャにおいて、クラウドコストを異なるチーム、サービス、または環境に正確に帰属させます。
→一貫したラベリング/タグ付け戦略を実装します。これらのラベルを使用して Cloud Billing レポートをフィルタリングします。GKE の場合、GKE コスト配分を有効にして、名前空間またはワークロード別にコストを分割します。
理由: 正確なコスト配分は可視性を提供し、説明責任を促進します。自身の支出を見ることができるチームは、それを最適化する権限を与えられます。
多様なワークロード(安定した、中断可能な、開発/テスト)に対するコンピューティングコストを最適化します。
→ワークロードと料金モデルを一致させます。安定した 24 時間年中無休のワークロードには、コミット利用割引(CUDs)を使用します。フォールトトレラントで中断可能なジョブ(例: バッチ処理)には、スポット VM を使用します。開発/テスト環境は営業時間外にシャットダウンするようにスケジュールします。
理由: コンピューティング料金に対する画一的なアプローチは非効率です。適切なツールを適切な用途に使用することで、パフォーマンスに影響を与えることなく大幅な節約(70% 以上)につながります。
GKE のコストとパフォーマンスを最適化するために、Pod が適切な量の CPU とメモリを要求していることを確認します。
→Vertical Pod Autoscaler(VPA)を `recommendation` モードでデプロイします。その提案を分析して、Pod のリソース `requests` を調整します。確信が持てたら、`auto` モードに切り替えて継続的なライトサイジングを行います。
理由: Pod の過剰なプロビジョニングは費用を無駄にし、プロビジョニング不足はパフォーマンスの問題(スロットリング、OOMKilled)を引き起こします。VPA は実際の使用データを使用して正確なサイジング推奨を行い、効率と安定性の両方を向上させます。
Cloud Run サービスのコールドスタートによって引き起こされるレイテンシを削減します。
→`min-instances` の値を設定して、複数のインスタンスをウォーム状態に保ちます。さらに、コンテナイメージ(より小さなベースイメージ、少ないレイヤー)とアプリケーションの起動コード(遅延初期化)を最適化します。
理由: `min-instances` はコールドスタートを削減する最も直接的な方法ですが、コストがかかります。これとコンテナおよびコードの最適化を組み合わせることで、パフォーマンスとコストのバランスの取れたアプローチが提供されます。
変動するクエリパターンを持つ大規模な BigQuery 分析ワークロードのコストを最適化します。
→オンデマンド料金から BigQuery エディション(スロット)に切り替えます。予測可能な負荷のためにベースラインのスロットコミットメントを購入し、ピーク時にはオートスケーリングを有効にします。さらに、パーティション分割/クラスタ化されたテーブルを使用し、`SELECT *` を避けることでクエリを最適化します。
理由: 一貫したワークロードの場合、スロットベースの料金はオンデマンドよりも費用対効果が高くなります。オートスケーリングは、コストを制御しながらバーストに対する柔軟性を提供します。クエリとテーブルの最適化は、処理されるデータ量を削減し、直接コストを削減します。
グローバルに分散されたアプリケーションの高額なネットワークエグレスコストを削減します。
→Cloud CDN を使用して、ユーザーに近いエッジで静的コンテンツをキャッシュします。動的トラフィックの場合は、適切なネットワークサービスティア(パフォーマンス重視の場合は Premium、コスト削減重視の場合は Standard)を選択します。クロスリージョントラフィックを最小限に抑えるために、データをリージョン内で処理します。
理由: エグレスは主要なコスト要因です。CDN はオリジンからのトラフィックをオフロードし、直接エグレスを削減します。ネットワークティアと思慮深いリージョンデータ処理の使用により、コストを大幅に削減できます。