概要
信頼性のパターンについてAzure、AWS、GCPの提唱するパターンに基づいてまとめる。
信頼性とは
ユーザー(システムやアプリケーション)が期待する機能を提供し続けることができる性質のことである。
信頼性を支える特性
信頼性は次のような特性によって支えられる。
- 可用性:システムが利用可能であること
- 耐久性:データが失われないこと
- 耐障害性:障害が発生してもシステムが機能し続けること
- 回復性:障害が発生した際にシステムが正常な状態に戻ること
- システムが自動復旧するような仕組みや、ランブックの整備など
- 予測可能性:システムの性能が予測可能であること
- 監視やオブザーバリティなど
- スケーラビリティ:システムが負荷に応じてスケールアウトできること
- セキュリティ:システムがセキュアであること
信頼性を支えるクラウド設計パターン
信頼性に関連するパターンをいくつかピックアップする。
アンバサダーパターン
ネットワーク通信に関わる処理を別のサービスに委譲することで、本来のサービスの負荷を軽減するパターン。
BFF(Backend for Frontend)
フロントエンドアプリケーションとバックエンドサービスの間に、フロントエンドアプリケーション専用のサービスを配置するパターン。
バルクヘッド
システムの一部が障害を起こしても、他の部分が影響を受けないようにするパターン。
キャッシュアサイド
データベースやAPIなどのリソースに負荷をかけないように、キャッシュを利用するパターン。
cf. キャッシュの書き込み方式
サーキットブレーカー
障害が発生した際に、障害が解消されるまで一定時間リクエストを拒否するパターン。
クローズド、ハーフオープン、オープンの3つの状態を持つ。
クローズド:リクエストを受け付ける状態 ハーフオープン:一部のリクエストを受け付ける状態 オープン:リクエストを受け付けない状態
クレームチェック
リクエストを受け付ける前に、リクエストが正当なものかどうかをチェックするパターン。
例えば、サービス間で大きなペイロードを直接やりとりしないように、ペイロードをデータベースに保存して、そのIDをやりとりするなど。
補正トランザクション
複数のリソースを更新する際に、トランザクションが失敗した場合に、リソースを元の状態に戻すパターン。
競合コンシューマー(ワークキュー)
複数のコンシューマーが同じメッセージングキューからメッセージを取得し、処理するパターン。
※learn.microsoft.com - 競合コンシューマー パターンを参考にしている。聞き慣れない名前だが、多分これはシンプルなメッセージングキューだと思う。
イベントソーシング
システム内の状態の変化をイベントとして記録して、システムの状態を再構築できるようにするパターン。
優先順位キュー
キューに優先順位をつけて、優先順位の高いキューを優先的に処理するパターン。
Pub/Sub
パブリッシャーがメッセージを送信し、サブスクライバーがメッセージを受信するパターン。
パブリッシャーとサブスクライバーはトピックを介してメッセージをやりとりする。