モダンアプリケーションにおける代表的な設計パターン
Author : 福井 厚
みなさん、こんにちは。AWSソリューションアーキテクトの福井です。
今回、AWSの新しいウェブマガジンの創刊に合わせて私が執筆したホワイトペーパー「AWS モダンアプリケーション開発 – AWS におけるクラウドネイティブ モダンアプリケーション開発と設計パターン」について代表的なパターンと合わせて解説します。
このホワイトペーパーは 5 つの章から構成されています。まずは各章で書かれていることを紹介させてください。
「はじめに」の章では、なぜモダンアプリケーションが重要なのかを説明しています。そしてモダンアプリケーションによって我々が「イノベーションのフライホイール」と呼んでいる実験、フィードバック、新たなアイデアの創出というイノベーションのループを回すことが重要であることを説明しています。
「モダンアプリケーション開発」の章では、モダンアプリケーションの特徴とモダンアプリケーション開発における 6 つのベストプラクティスを紹介しています。またベストプラクティスを実践する際に関連する AWS の各サービスについても触れているのでそちらも参考にできます。これらのベストプラクティスは同時にモダンアプリケーション開発のチェックリストとして使えるようにもなっています。
「AWS での CI/CD」の章では、モダンアプリケーション開発のプラクティスの中でも重要な継続的インテグレーション/継続的デリバリー (CI/CD) について取り上げています。併せてデプロイ先のパターンごとにどのような AWS サービスが利用できるかも解説しています。
そして今回の記事と関連する「モダンアプリケーションの設計パターン」の章では、マイクロサービスアーキテクチャにおいて良く利用される 8 つのデザイン (設計) パターンを取り上げています。それらのデザインパターンを AWS で実装する際に関連する AWS の各サービスも紹介しています。
この記事では、その代表的な一部をご紹介していきます。
モダンアプリケーションにおける代表的な設計パターン
モダンアプリケーション開発のベストプラクティスの 1 つは、アプリケーションの設計と実装に今回ご紹介するようなパターンを使うことです。アプリケーションのビルディングブロックとして AWS のサービスをご利用いただくことで、実装の労力が大幅に減らすことができ、信頼性と可用性が向上します。こうしたベネフィットによって、デベロッパーの皆様は、アプリケーションに価値をもたらすビジネスロジックに注力することができます。
AWS のサービスを使用したマイクロサービスアーキテクチャの実装
さて、今回はホワイトペーパーの中から 2 つの一般的なパターンについて紹介します。
1. API ゲートウェイパターン
API ゲートウェイパターンは、バックエンドサービスへの呼び出しが多数ある場合や、クライアントインターフェイスまたはデバイスタイプによって提供コンテンツが違う場合に使用できます。API ゲートウェイによって、さまざまなバックエンドサービスを統一された API の後ろで統合し、それぞれのデバイスに必要なコンテンツを提供できます。
図 1 – サービスとモバイルデバイスやコンピュータブラウザの間での通信例
(API ゲートウェイを不使用)
図 2 – サービスとモバイルデバイスやコンピュータブラウザの間での通信例
(API ゲートウェイを使用)
AWS クラウドで API ゲートウェイパターンを使用する場合、バックエンドのエンドポイントとの統合は Amazon API Gateway で行うことができます。また、Amazon API Gateway によって、任意の規模で REST API や WebSocket API の作成、発行、保守、モニタリング、保護を行うことができます。
Amazon API Gateway は本番グレードの API に必要な他の多くの機能を備えています。その機能には、スロットリング、キャッシュ、ログ記録、API トークン、Amazon Cognito に統合された認証や認可、カスタムオーソライザー、他の AWS のサービス向けリクエストのプロキシなどがあります。
Amazon API Gateway によるプロキシリクエストの送信先として重要な AWS のサービスの 1 つが、AWS Lambda です。Lambda は自由なウェブサービスを作成するための基盤になります。Lambda を使用することにより、サーバーインフラストラクチャの管理は不要になります。
Amazon API Gateway は AWS によって管理されるため、ユーザーによる運用や保守は必要ありません。Amazon API Gateway を使うことで安全性、信頼性、可用性が向上するため、デベロッパーの皆様はアプリケーションの重要な機能に対してより多くの時間を費やすことができるようになります。
図 3 – サービスとモバイルデバイスやコンピュータブラウザの間での通信例
(Amazon API Gateway を使用)
(画像をクリックすると拡大します)
2. サービスディスカバリーとサービスレジストリ
システムに複数のマイクロサービスが含まれている場合、各サービスが依存先のサービスの場所を見つけられることが必要です。マイクロサービスにはスケーラビリティや伸縮性が求められます。コンポーネントに障害が発生した場合は、新しいインスタンスやコンテナをオンラインにして、常に可用性を確保する必要があります。このため、マイクロサービス内のインスタンスやコンテナの IP アドレスは、絶えず変更される可能性があります。サービスのインスタンスそれぞれについても、可用性を継続的にモニタリングする必要があります。
ロードバランサーを使用すると、可用性の高い安定したエンドポイントを実現できます。これは通常、パブリック側のウェブエンドポイントに最適です。ただし、ロードバランサー用のコンピューティングリソースを追加する必要があり、レイテンシーも発生します。クライアントや、マイクロサービス間の呼び出しを管理できるのであれば、「サービスディスカバリーパターン」を使用する方が効率的な場合があります。このパターンは、クライアント側での負荷分散と考えることもできます。
サービスディスカバリーパターンでは、検出される側のサービスについての情報が登録されていることが必要です。「サービスレジストリ」は、個々のコンテナやインスタンスの起動時に、呼び出されるサービスがそのサービス自体の情報を一元的に保存できる場所です。
図 4 – サービスレジストリパターンの例
図 5 – サービスディスカバリーパターンの例
AWS クラウドでは、サービスレジストリとサービスディスカバリーパターンの実装に AWS Cloud Map をご使用いただけます。AWS Cloud Map はフルマネージドサービスです。このサービスを使用すると、クライアントが DNS を使用してサービスインスタンスの IP アドレスとポートの組み合わせを検索し、HTTP ベースのサービス検出 API 経由で URL や Amazon リソースネーム (ARN) などの抽象エンドポイントを動的に取得することが可能になります。
図 6 – AWS Cloud Map を使用したサービスレジストリとサービスディスカバリーパターンの例
(画像をクリックすると拡大します)
このホワイトペーパーでは他にもいくつかのデザインパターンを紹介し、AWS でそれらのデザインパターンをどのように実装することができるかについて解説しています。このホワイトペーパーの内容にご興味がお持ちでしたら、ぜひホワイトペーパー「AWS モダンアプリケーション開発 – AWS におけるクラウドネイティブ モダンアプリケーション開発と設計パターン」をダウンロードしてご参照ください。
筆者紹介
福井 厚
アマゾン ウェブ サービス ジャパン合同会社
AWSシニアソリューションアーキテクト
モダンアプリケーション開発スペシャリスト
PC メーカーでサポートエンジニアとして OS 及び言語担当、ソフトウェアハウスでデベロッパー、SI ベンダーで SE、アーキテクト、開発系コンサルティングファームでコンサルタントを経験後、2015 年 7 月よりアマゾン ウェブ サービス ジャパン合同会社でソリューション アーキテクトとして活動。現在は、モダンアプリケーション開発スペシャリストとして AWS におけるクラウドネイティブなアプリケーションのモダナイゼーションの推進に従事するとともに、サーバーレス、コンテナ、モバイルなど AWS 上でのソフトウェア開発に関する技術支援を中心に活動している。
AWS を無料でお試しいただけます