操作のための設計
障害の発生を未然に防ぐために運用でシフト レフトする。 |
---|
開発ライフサイクルの早い段階で頻繁に障害をテストし、パフォーマンスが信頼性に与える影響を判断します。 根本原因分析と事後分析のためには、依存関係の状態と発生している障害について、チーム間で共通の認識を持つ必要があります。 監視可能なシステムからの分析情報、診断、アラートは、効果的なインシデント管理と継続的な改善の基礎となります。
Contoso University は、Contoso の教職員と学生向けにオンライン クラスなどの教育サービスを提供する Web アプリを、マイクロサービスを基に構築して稼働させています。 ワークロードは、Azure App Service、Azure SQL Database、Microsoft Entra ID、Azure Key Vault、Azure Service Bus、Azure Monitor、Azure DevOps を基に構築されています。
堅牢な監視を実装する
テレメトリを関連付けることができる監視可能なシステムを構築します。
監視と診断は非常に重要な操作です。 何かが失敗した場合は、失敗したこと、失敗したとき、失敗した理由を知る必要があります。 コンポーネント レベルでの監視は基本的なものですが、コンポーネントとそれに関連付けられたフローの集約的な監視により、正常性状態の全体像が得られます。 サイト信頼性エンジニアが修復作業の優先順位を決めるには、このデータが必要です。
"Contoso の課題"
- ワークロード アプリケーションは、複数の機能階層に分離された 5 つのサービスのスイートの一部として展開されます。
- チームは、ソリューションのさまざまな階層を通過するトランザクションとユーザー要求を分析して、不安定さの原因になる可能性があるボトルネックを特定し、問題発生時のトラブルシューティングをいっそう効率よく実行できるようにしたいと考えています。
"アプローチの適用と結果"
- ワークロード チームは、Application Insights でログとメトリックをキャプチャするようにコンポーネントをインストルメント化し、すべてのプラットフォーム サービスに対してログを構成します。 すべてのログは、ワークロードの Azure Monitor ワークスペースに転送されます。
- AzM ワークスペース内のデータを使って、ソリューションの個々のコンポーネントの正常性、および集約されたフローとソリューションの正常性を分析できます。
- コンポーネントと階層をまたいで同じ要求に属するエントリを関連付けると、チームがワークロードの正常性を判断し、トラブルシューティング プロセスを容易にするのに役立ちます。
可能性のある障害と異常な動作を予測する
優先順位が付けられたアクションにつながるアラートを使って、発生している信頼性の問題を目で見えるようにします。 より迅速なトリアージにつながる信頼性の高いプロセスとインフラストラクチャに投資します。
サイト信頼性エンジニアは、発生している現実のサイト インシデントを軽減し、現実のインシデントになる前に予測アラートによって明らかになった潜在的な障害を事前に軽減できるように、直ちに通知を受けることができます。
"Contoso の課題"
- チームは、各学期の初めには、学生が授業に登録し、シラバスにアクセスし、教科書を購入するため、トラフィックが大幅に増加することを予想しています。
- 年度のこの重要な期間中に、チームは予想される負荷の増加に対応できる十分な容量を確保する必要があります。 また、チームは発生する可能性のある他の可用性の問題に迅速に対応できる必要もあります。
"アプローチの適用と結果"
- チームは、予想される需要増加の前に追加の容量を確保し、負荷の増加に合わせて容量を割り当て続けるため、Web とデータベースの階層を自動的にスケールアウトするように構成します。
- この期間中は高負荷のフローに関連するアラートにインシデント対応チームが高い優先順位を付けることを指示するように、緊急対応計画を調整します。
信頼性リスクについてテストする
運用環境と運用前環境で障害をシミュレートしてテストを実行します。
復旧を現実的に予想できるよう、運用環境で障害を経験しておくのは有益なことです。 これにより、障害に適切に対応する設計上の選択を行うことができます。 また、ビジネス メトリックに設定したしきい値をテストすることもできます。
"Contoso の課題"
- このワークロードでの Web 階層と学生登録 REST サービスの間の通信は、クライアント証明書に依存します。
- 学期の開始時期が過ぎると学生登録機能はあまり使われないため、学生登録サービスで使われる証明書の有効期限が切れた場合、問題がしばらく検出されない可能性があります。
- さらに、前の登録期間中には、一時的な接続障害をシステムが適切に処理しなかったため、サービスが何回か中断しました。 チームは、一時的な障害を処理するためにコードの改善をいくつか行いましたが、実際の運用シナリオで機能がどのように動作するかは不明です。
"アプローチの適用と結果"
- チームは、登録フローを含む複数のフローをシミュレートするため、スケジュールに従って毎月運用環境で実行される代理トランザクション テストを開発します。
- 代理トランザクション テストにはアラートが構成されており、障害が発生するとチームは通知を受け取ります。これにより、証明書の有効期限が切れるリスクがカバーされます。
- さらに、チームは、SDLC でカオス テストを構築し、定期的にカオス テストを実行して結果をキャプチャし、自衛手法の検証と、前はわからなかった信頼性の問題の究明に投資しました。