信頼性のパターンについて

システムアーキテクチャ

概要

信頼性のパターンについてAzure、AWS、GCPの提唱するパターンに基づいてまとめる。

信頼性とは

ユーザー(システムやアプリケーション)が期待する機能を提供し続けることができる性質のことである。

信頼性を支える特性

信頼性は次のような特性によって支えられる。

  • 可用性:システムが利用可能であること
  • 耐久性:データが失われないこと
  • 耐障害性:障害が発生してもシステムが機能し続けること
  • 回復性:障害が発生した際にシステムが正常な状態に戻ること
    • システムが自動復旧するような仕組みや、ランブックの整備など
  • 予測可能性:システムの性能が予測可能であること
    • 監視やオブザーバリティなど
  • スケーラビリティ:システムが負荷に応じてスケールアウトできること
  • セキュリティ:システムがセキュアであること

信頼性を支えるクラウド設計パターン

信頼性に関連するパターンをいくつかピックアップする。

アンバサダーパターン

ネットワーク通信に関わる処理を別のサービスに委譲することで、本来のサービスの負荷を軽減するパターン。

BFF(Backend for Frontend)

フロントエンドアプリケーションとバックエンドサービスの間に、フロントエンドアプリケーション専用のサービスを配置するパターン。

バルクヘッド

システムの一部が障害を起こしても、他の部分が影響を受けないようにするパターン。

キャッシュアサイド

データベースやAPIなどのリソースに負荷をかけないように、キャッシュを利用するパターン。

cf. キャッシュの書き込み方式

サーキットブレーカー

障害が発生した際に、障害が解消されるまで一定時間リクエストを拒否するパターン。

クローズド、ハーフオープン、オープンの3つの状態を持つ。

クローズド:リクエストを受け付ける状態 ハーフオープン:一部のリクエストを受け付ける状態 オープン:リクエストを受け付けない状態

クレームチェック

リクエストを受け付ける前に、リクエストが正当なものかどうかをチェックするパターン。

例えば、サービス間で大きなペイロードを直接やりとりしないように、ペイロードをデータベースに保存して、そのIDをやりとりするなど。

補正トランザクション

複数のリソースを更新する際に、トランザクションが失敗した場合に、リソースを元の状態に戻すパターン。

競合コンシューマー(ワークキュー)

複数のコンシューマーが同じメッセージングキューからメッセージを取得し、処理するパターン。

learn.microsoft.com - 競合コンシューマー パターンを参考にしている。聞き慣れない名前だが、多分これはシンプルなメッセージングキューだと思う。

イベントソーシング

システム内の状態の変化をイベントとして記録して、システムの状態を再構築できるようにするパターン。

優先順位キュー

キューに優先順位をつけて、優先順位の高いキューを優先的に処理するパターン。

Pub/Sub

パブリッシャーがメッセージを送信し、サブスクライバーがメッセージを受信するパターン。

パブリッシャーとサブスクライバーはトピックを介してメッセージをやりとりする。

参考