分散ITシステムの発展の歴史の中で、エラーハンドリングと障害シナリオの問題はビジネスロジックに取って代わられ、長い間二次的な役割を果たしてきました。しかし、インフラの規模が拡大し、複雑さが増すにつれて、未整備のエラーハンドリングシナリオが大規模な障害やデータ損失を引き起こすことが明らかになりました。
問題は、複雑なシステムが多様な障害タイプを経験することです。例えば、特定のサービスの利用不可からデータの不整合、通信チャネルの部分的な障害まで。顧客は「障害」の意味を単に明白な故障(例:サーバーが利用できない)と誤解し、サービス間のエラーの連鎖やユーザーエクスペリエンスの劣化を無視することがよくあります。
効果的な解決策は、システムアプローチに基づいています:
主要な特徴:
アプリケーションレベルの例外とインフラレベルの例外の違いは何ですか?
候補者はよくビジネスエラー(例:「ユーザーが見つからない」)を実際の障害(例:「データベースが利用できない」)と混同します。アプリケーションは常に2つのタイプの例外を明確に区別し、異なる処理戦略(ロールバック、通知、アラート)を提供する必要があります。
公開されていない内部APIのためにどのような障害シナリオをモデル化するべきですか?
障害シナリオは任意のAPIに関連しています。たとえ内部APIであっても、障害は常に発生する可能性があり(自動化のコントール内でも)、不正確または欠落したデータで正常に機能するために、明示的にモデル化する必要があります。
システムは最大のUXを維持するために、すべてのエラーをユーザーから隠すべきですか?
いいえ、エラーの完全な隠蔽はユーザーに誤解を与えます。情報提供(ユーザーが次に何をすべきかを理解できるように)と安全性(実装の詳細を明らかにしない)の間にバランスを見つけることが重要です。
ネガティブケース: 大規模なe-commerceプロジェクトで、システムアナリストはすべてのネットワークエラーの処理をアーキテクチャに任せました。緊急のアップデートやメールサービスの障害時に、システムは注文通知を送信せず、ユーザーは自分の注文が作成されたかどうかわからなかった。
利点:
欠点:
ポジティブケース: システムアナリストはアーキテクトと共に、メールキューの不具合、支払いゲートウェイの障害、検索サービスの劣化という各主要サービスのためのシナリオを個別にモデル化しました。顧客のためのユーザーフレンドリーなメッセージが記述されました。
利点:
欠点: