クラウド設計パターンCloud Design Patterns

これらの設計パターンは、信頼性の高い、スケーラブルで安全なアプリケーションをクラウドに構築するために役立ちます。These design patterns are useful for building reliable, scalable, secure applications in the cloud.

パターンごとに、そのパターンで対処する問題、パターンの適用に関する考慮事項、Microsoft Azure に基づいた例を説明します。Each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on Microsoft Azure. ほとんどのパターンには、Azure でのパターンの実装方法を示すコード サンプルまたはスニペットが含まれています。Most of the patterns include code samples or snippets that show how to implement the pattern on Azure. ただし、パターンのほとんどは、ホストが Azure か他のクラウド プラットフォームかにかかわらず、分散システムに関連しています。However, most of the patterns are relevant to any distributed system, whether hosted on Azure or on other cloud platforms.

クラウド開発での課題Challenges in cloud development

Data management

データ管理Data Management

データ管理はクラウド アプリケーションの重要な要素であり、品質属性のほとんどに影響します。Data management is the key element of cloud applications, and influences most of the quality attributes. 通常、パフォーマンス、スケーラビリティ、または可用性の理由から、データは複数のサーバーにまたがってさまざまな場所でホストされます。これによって、広範な課題が生じることがあります。Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. たとえば、データの整合性を維持する必要があります。また、通常はさまざまな場所にあるデータを同期する必要があります。For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and implementation

設計と実装Design and Implementation

優れた設計では、コンポーネントの設計とデプロイの一貫性や統一性、管理と開発を簡素化する保守容易性、コンポーネントやサブシステムを他のアプリケーションやシナリオで利用できる再利用性などの要素を網羅しています。Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. 設計および実装フェーズで行われる意思決定は、クラウドでホストされているアプリケーションやサービスの品質と総保有コストに大きな影響を及ぼします。Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.

Messaging icon

メッセージングMessaging

クラウド アプリケーションの分散特性には、スケーラビリティを最大化するために、コンポーネントとサービスが (できれば疎結合的に) 接続されているメッセージング インフラストラクチャが必要です。The distributed nature of cloud applications requires a messaging infrastructure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. 非同期メッセージングは広く使用されており、多くの利点がもたらされますが、メッセージの順序、有害メッセージの管理、べき等など、課題も多数あります。Asynchronous messaging is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idempotency, and more.

パターンのカタログCatalog of patterns

PatternPattern まとめSummary カテゴリCategory
AmbassadorAmbassador コンシューマー サービスまたはアプリケーションの代わりにネットワーク要求を送信するヘルパー サービスを作成します。Create helper services that send network requests on behalf of a consumer service or application. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
破損対策レイヤーAnti-Corruption Layer 最新アプリケーションとレガシ システムの間にファサード、すなわちアダプター レイヤーを実装します。Implement a façade or adapter layer between a modern application and a legacy system. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
非同期要求-応答Asynchronous Request-Reply フロントエンド ホストからバックエンド処理を分離します。その場合バックエンド処理を非同期にする必要がありますが、引き続きフロントエンドには明確な応答が必要です。Decouple backend processing from a frontend host, where backend processing needs to be asynchronous, but the frontend still needs a clear response. メッセージングMessaging
フロントエンド用バックエンドBackends for Frontends 特定のフロント エンド アプリケーションやインターフェイスによって使用される個別のバックエンド サービスを作成します。Create separate backend services to be consumed by specific frontend applications or interfaces. 設計と実装Design and Implementation
BulkheadBulkhead アプリケーションの要素をプールに分離し、1 つの要素が失敗しても、他の要素が引き続き機能できるようにします。Isolate elements of an application into pools so that if one fails, the others will continue to function. 信頼性Reliability
キャッシュ アサイドCache-Aside オンデマンドでデータをデータ ストアからキャッシュに読み込みます。Load data on demand into a cache from a data store データ管理Data Management,
パフォーマンス効率Performance Efficiency
コレオグラフィChoreography 中央のオーケストレーターに依存するのではなく、業務をいつどのように処理するかを各サービスで決定できます。Let each service decide when and how a business operation is processed, instead of depending on a central orchestrator. メッセージングMessaging,
パフォーマンス効率Performance Efficiency
Circuit BreakerCircuit Breaker リモート サービスまたはリソースとの接続時の修正に要する時間が一定しないエラーを処理します。Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource. 信頼性Reliability
要求チェックClaim Check 大きいメッセージを要求チェックとペイロードに分割して、メッセージ バスに過度な負荷がかかることを防ぎます。Split a large message into a claim check and a payload to avoid overwhelming a message bus. メッセージングMessaging
補正トランザクションCompensating Transaction 最終的に整合性がある操作を定義する一連のステップで実行された作業を元に戻します。Undo the work performed by a series of steps, which together define an eventually consistent operation. 信頼性Reliability
競合コンシューマーCompeting Consumers 複数の同時実行コンシューマーが、同じメッセージング チャネルで受信したメッセージを処理できるようにします。Enable multiple concurrent consumers to process messages received on the same messaging channel. メッセージングMessaging
コンピューティング リソース統合Compute Resource Consolidation 複数のタスクまたは操作を 1 つのコンピューティング単位に統合します。Consolidate multiple tasks or operations into a single computational unit 設計と実装Design and Implementation
CQRSCQRS 個別のインターフェイスを使用して、データを更新する操作とデータを読み取る操作を分離します。Segregate operations that read data from operations that update data by using separate interfaces. データ管理Data Management,
設計と実装Design and Implementation,
パフォーマンス効率Performance Efficiency
デプロイ スタンプDeployment Stamps データ ストアなど、アプリケーション コンポーネントの複数の独立したコピーをデプロイします。Deploy multiple independent copies of application components, including data stores. 信頼性Reliability,
パフォーマンス効率Performance Efficiency
イベント ソーシングEvent Sourcing 追加専用のストアを使用して、ドメイン内のデータに実行されるアクションを記述する一連のすべてのイベントを記録します。Use an append-only store to record the full series of events that describe actions taken on data in a domain. データ管理Data Management,
パフォーマンス効率Performance Efficiency
外部構成ストアExternal Configuration Store アプリケーション展開パッケージから、一元管理される場所に構成情報を移動します。Move configuration information out of the application deployment package to a centralized location. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
フェデレーション IDFederated Identity 外部の ID プロバイダーに認証を委任します。Delegate authentication to an external identity provider. SecuritySecurity
ゲートキーパーGatekeeper 専用のホスト インスタンスを使用して、アプリケーションとサービスを保護します。このホスト インスタンスは、クライアントとアプリケーションまたはサービスの間でブローカーとして機能し、要求を検証して不要部分を削除し、クライアントとアプリケーションまたはサービスの間で要求とデータを渡します。Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them. SecuritySecurity
ゲートウェイ集約Gateway Aggregation ゲートウェイを使用して、複数の個々の要求を 1 つの要求に集約します。Use a gateway to aggregate multiple individual requests into a single request. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
ゲートウェイ オフロードGateway Offloading 共有または専用のサービス機能の負荷をゲートウェイ プロキシにオフロードします。Offload shared or specialized service functionality to a gateway proxy. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
ゲートウェイ ルーティングGateway Routing 単一のエンドポイントを使用して複数のサービスに要求をルーティングします。Route requests to multiple services using a single endpoint. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
GeodeGeodes バックエンド サービスを一連の地理的ノードにデプロイします。各ノードが、任意のリージョンで任意のクライアント要求を処理できます。Deploy backend services into a set of geographical nodes, each of which can service any client request in any region. 信頼性Reliability,
オペレーショナル エクセレンスOperational Excellence
正常性エンドポイント監視Health Endpoint Monitoring 公開されたエンドポイントを通じて外部ツールが定期的にアクセスできる機能チェックをアプリケーションに実装します。Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals. 信頼性Reliability,
オペレーショナル エクセレンスOperational Excellence
テーブルのインデックス作成Index Table クエリによって頻繁に参照されるデータ ストア内のフィールドにインデックスを作成します。Create indexes over the fields in data stores that are frequently referenced by queries. データ管理Data Management,
パフォーマンス効率Performance Efficiency
リーダー選定Leader Election 1 つのインスタンスを、他のインスタンスの管理を担当するリーダーとして選定することで、分散アプリケーション内で連携するタスク インスタンスのコレクションによって実行されるアクションを調整します。Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances. 設計と実装Design and Implementation,
信頼性Reliability
具体化されたビューMaterialized View データの形式が必要なクエリ操作に適していない場合に、1 つ以上のデータ ストアのデータの事前設定されたビューを生成します。Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations. データ管理Data Management,
オペレーショナル エクセレンスOperational Excellence
パイプとフィルターPipes and Filters 複雑な処理を実行するタスクを、再利用できる一連の独立した要素に分解します。Break down a task that performs complex processing into a series of separate elements that can be reused. 設計と実装Design and Implementation,
メッセージングMessaging
優先順位キューPriority Queue サービスに送信される要求に優先順位を設定し、優先順位の高い要求から順番に受信および処理されるようにします。Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority. メッセージングMessaging,
パフォーマンス効率Performance Efficiency
パブリッシャー/サブスクライバーPublisher/Subscriber 送信側と受信側を結合せずに、アプリケーションから関心を持っている複数のコンシューマーに対して非同期的にイベントを通知できるようにします。Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers. メッセージングMessaging
キュー ベースの負荷平準化Queue-Based Load Leveling タスクとそのタスクが呼び出すサービスとの間でバッファーとして機能するキューを使用して、断続的な大きい負荷を平準化します。Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads. 信頼性Reliability,
メッセージングMessaging,
回復性Resiliency,
パフォーマンス効率Performance Efficiency
RetryRetry 予測される一時的な障害をアプリケーションが処理できるようにします。アプリケーションがサービスまたはネットワーク リソースに接続しようとする際に、失敗した操作を透過的に再試行します。Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed. 信頼性Reliability
Scheduler エージェント スーパーバイザーScheduler Agent Supervisor 分散された一連のサービスやその他のリモート リソースにわたる一連のアクションを調整します。Coordinate a set of actions across a distributed set of services and other remote resources. メッセージングMessaging,
信頼性Reliability
シーケンシャルなコンボイSequential Convoy 他のメッセージ グループの処理をブロックせずに、関連する一連のメッセージを定義された順序で処理します。Process a set of related messages in a defined order, without blocking processing of other groups of messages. メッセージングMessaging
シャーディングSharding データ ストアを水平方向のパーティションまたはシャードのセットに分割します。Divide a data store into a set of horizontal partitions or shards. データ管理Data Management,
パフォーマンス効率Performance Efficiency
SidecarSidecar アプリケーションのコンポーネントを別のプロセスまたはコンテナーにデプロイして、分離性とカプセル化を実現します。Deploy components of an application into a separate process or container to provide isolation and encapsulation. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
静的コンテンツ ホスティングStatic Content Hosting 静的コンテンツを、クライアントに直接配信できるクラウド ベースのストレージ サービスにデプロイします。Deploy static content to a cloud-based storage service that can deliver them directly to the client. 設計と実装Design and Implementation,
データ管理Data Management,
パフォーマンス効率Performance Efficiency
ストラングラー フィグStrangler Fig 機能の特定の部分を新しいアプリケーションやサービスに徐々に置き換えることで、レガシ システムを段階的に移行します。Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services. 設計と実装Design and Implementation,
オペレーショナル エクセレンスOperational Excellence
調整Throttling アプリケーションのインスタンス、個々のテナント、またはサービス全体によって使用されるリソースの使用量を制御します。Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service. 信頼性Reliability,
パフォーマンス効率Performance Efficiency
バレット キーValet Key 特定のリソースまたはサービスへの限定的な直接アクセスをクライアントに提供する、トークンまたはキーを使用します。Use a token or key that provides clients with restricted direct access to a specific resource or service. データ管理Data Management,
SecuritySecurity