マイクロサービスの設計パターンDesign patterns for microservices

マイクロサービスの目標は、個別にデプロイできる小さい自律的なサービスにアプリケーションを分解して、アプリケーションのリリース速度を上げることです。The goal of microservices is to increase the velocity of application releases, by decomposing the application into small autonomous services that can be deployed independently. マイクロサービス アーキテクチャには、いくつかの課題もあります。A microservices architecture also brings some challenges. ここに示す設計パターンは、それらの課題の緩和に役立ちます。The design patterns shown here can help mitigate these challenges.

マイクロサービスの設計パターン

アンバサダーは、監視、ログ記録、ルーティング、セキュリティ (TLS など) といった一般的なクライアント接続のタスクを言語に関係ない方法でオフロードするのに役立ちます。Ambassador can be used to offload common client connectivity tasks such as monitoring, logging, routing, and security (such as TLS) in a language agnostic way. アンバサダー サービスは多くの場合、サイドカー (下記参照) としてデプロイされます。Ambassador services are often deployed as a sidecar (see below).

破損対策レイヤー は、新しいアプリケーションの設計がレガシ システムへの依存によって確実に制限されないようにするため、新しいアプリケーションとレガシ アプリケーションの間にファサードを実装します。Anti-corruption layer implements a façade between new and legacy applications, to ensure that the design of a new application is not limited by dependencies on legacy systems.

フロントエンド用バックエンドは、デスクトップやモバイルなど、クライアントのさまざまな種類に応じて独立したバックエンド サービスを作成します。Backends for Frontends creates separate backend services for different types of clients, such as desktop and mobile. そうすれば、さまざまな種類のクライアントの競合する要件を単一のバックエンド サービスで処理する必要がありません。That way, a single backend service doesn’t need to handle the conflicting requirements of various client types. このパターンを使用すると、クライアント固有の問題を切り離すことによって、各マイクロサービスのシンプルさを維持できます。This pattern can help keep each microservice simple, by separating client-specific concerns.

バルクヘッドは、接続プール、メモリ、CPU などの重要なリソースをワークロードまたはサービスごとに独立させます。Bulkhead isolates critical resources, such as connection pool, memory, and CPU, for each workload or service. バルクヘッドを使用すると、単一のワークロード (またはサービス) がすべてのリソースを消費して他のワークロードのリソースが枯渇することがなくなります。By using bulkheads, a single workload (or service) can’t consume all of the resources, starving others. このパターンでは、1 つのサービスによって発生した障害の連鎖を防ぐことによって、システムの回復性が向上します。This pattern increases the resiliency of the system by preventing cascading failures caused by one service.

ゲートウェイ集約では、複数の個々のマイクロサービスへの要求を単一の要求に集約し、コンシューマーとサービスの間のトラフィックを削減します。Gateway Aggregation aggregates requests to multiple individual microservices into a single request, reducing chattiness between consumers and services.

ゲートウェイ オフロードでは、SSL 証明書の使用などの共有サービス機能を各マイクロサービスから API ゲートウェイにオフロードすることができます。Gateway Offloading enables each microservice to offload shared service functionality, such as the use of SSL certificates, to an API gateway.

ゲートウェイ ルーティングでは、単一のエンドポイントを使用して要求を複数のマイクロサービスにルーティングします。これにより、コンシューマーは多数の個別エンドポイントを管理する必要がありません。Gateway Routing routes requests to multiple microservices using a single endpoint, so that consumers don't need to manage many separate endpoints.

サイドカーでは、アプリケーションのヘルパー コンポーネントを別のコンテナーまたはプロセスとしてデプロイし、分離性とカプセル化を実現します。Sidecar deploys helper components of an application as a separate container or process to provide isolation and encapsulation.

ストラングラーは、機能の特定の部分を新しいサービスに徐々に置き換えることで、アプリケーションの段階的なリファクタリングをサポートします。Strangler supports incremental refactoring of an application, by gradually replacing specific pieces of functionality with new services.

Azure アーキテクチャ センターでクラウド設計パターンの完全なカタログを見るには、クラウド設計パターンに関するページを参照してください。For the complete catalog of cloud design patterns on the Azure Architecture Center, see Cloud Design Patterns.