パターンの概要

Webまたはモバイル・アプリケーションを、様々なアプリケーション・チームが個別にテスト、デプロイおよび所有できる一連のマイクロサービスとして構築します。サービスをREST APIとして公開し、APIを使用して他のマイクロサービスと通信します。

Webまたはモバイル・アプリの最も重要な要件は次のとおりです。

  • ブラウザやモバイル・デバイスなど、様々なクライアントをサポートする必要があります。
  • 安全である必要があります
  • 24時間365日の可用性を実現する必要があります。
  • 需要のスパイクに対応するために拡張する必要があります。
  • 低ネットワーク・レイテンシを処理する必要があります。
  • 更新または変更時にダウンタイムがゼロである必要があります

Oracle Cloud Infrastructure(OCI)は、最も要求の厳しいWebおよびモバイル・アプリケーション向けに、スケーラブルで安全で信頼性が高く、高パフォーマンスのインフラストラクチャを提供します。このドキュメントでは、Webまたはモバイル・アプリケーションを設計するための設計原則を示し、それらの原則に基づいてアーキテクチャを参照します。

設計上の原則

軽量なオープンソース・フレームワークと成熟したプログラミング言語を使用

Graal Development Kit for Micronaut (Helidon)を使用して、アプリケーションを構築します。どちらも、ロギング、テレメトリ、セキュリティ、構成などの機能と、REST APIの構築などの一般的なパターンを提供します。

Javaを使用: プラットフォームに依存しないポータブル言語であり、何百万もの開発者がスケーラブルで回復力があり、セキュアなアプリケーションを構築するために使用する豊富なライブラリ・セットを備えています。

APIを使用して通信するサービスとしてアプリを構築

アプリケーションを、様々なアプリケーション・チームによって個別にテスト、デプロイおよび所有できる一連のマイクロサービスとして構築します。サービスおよび明確に定義されたREST APIを公開し、それらのAPIを使用して他のサービスと通信します。OCI API Gatewayをすべてのクライアントの単一エントリ・ポイントとして使用し、APIリクエストを適切なサービスにルーティングします。

OCI Service Meshを使用して、Oracle Container Engine for Kubernetes (OKE)クラスタでホストされているサービス間の通信を簡素化および保護します。OCI Service Meshでは、アプリケーション・ポッドでサイドカーとして実行されるプロキシ・コンポーネントによって生成されるメトリックおよびログを介して、サービス間のすべてのネットワーク・トラフィックを監視することもできます。

ビルド、テストおよびデプロイメントの自動化

コードを頻繁に配信し、ダウンタイムを最小限に抑える方法でアプリケーションをデプロイします。OCI DevOpsを使用して、アプリケーションの開発、構築、パッケージ化、テストおよびデプロイを行う一貫性のある自動化された方法を確立します。Oracle Cloud Infrastructure Resource Managerを使用して、APIゲートウェイ、ロード・バランサ、データベース、Kubernetesクラスタ、その他のサービスなどのインフラストラクチャ要素を確実にプロビジョニングします。

フルマネージド・サービスを使用して、アプリ開発、ランタイム、データ管理の複雑さを排除

Oracle Container Engine for Kubernetes (OKE)、Oracle Cloud Infrastructure Object StorageOracle Autonomous Databaseなどのフルマネージド・サービスを使用します。これらのサービスは、アプリケーションの需要の変化に対応するために、可用性とスケーラビリティを最大化します。フルマネージド・サービスにより、アプリケーションの可用性を確保し、アプリケーションのインフラストラクチャをホストするデータ・センターで障害が発生した場合にそれを保護します。

アプリケーション層をステートレスに保持

可能な場合は、アプリケーションの中間層コンポーネントをステートレスに保ちます。必要に応じて、Oracle Autonomous Databaseを使用してアプリケーションの状態を格納し、一貫性、耐久性および高速リカバリ性を確保します。

すべてのデータに対するフル機能のサポートを備えたコンバージド・データベースの使用

アプリケーションでは、表形式(リレーショナル)、非構造化、XML、JSON、空間、グラフなどの様々な形式でデータを使用できます。従来、この多様性には、リレーショナル・データ用のリレーショナル・データベース、非構造化データ用のドキュメント・ストア、階層リンク・データ用のグラフ・データベースなど、データ形式ごとに異なる種類のデータベースが必要でした。ただし、複数のデータベースを使用すると、操作の複雑さが増し、データの不整合が発生することがよくあります。かわりに、単一のマルチモデルOracle Autonomous Databaseを使用して、複数のタイプのデータおよびフォーマットを格納、索引付けおよび検索します。

インストゥルメントのエンドツーエンド・モニタリングおよびトレース

開発チームは、所有するサービスとアプリを可視化するための独自の可観測性ツールを開発したいと考えています。このアプリには、さまざまなアプリやビジネスチームが所有する何百ものサービスが含まれている場合があります。各チームが独自のツールを構築するのではなく、Oracle Cloud Observability and Management Platformを使用してソリューションを一元化します。スタック全体のすべてのレイヤーを監視して、アプリの問題を見つけて修正します。

自動化されたデータ・レプリケーションと障害回復により、単一障害点を排除

アプリの自己回復性、障害からの回復、ダウンタイムとデータ損失の最小化が必要です。次の方法で冗長性を実装することで、単一障害点を排除します。

  • OKEでは、複数可用性ドメイン・リージョンに、各ノードを個別の可用性ドメインに配置して、少なくとも3つのノードを持つノード・プールを設定します。
  • 単一の可用性ドメイン・リージョンで、OKEのノード・プールを3つ以上のノード(各ノードは別々のフォルト・ドメイン内)で設定します。
  • OKEでの冗長性のために、単一のパブリック・ロード・バランサおよび複数のイングレス・コントローラを備えた複数のプライベート・ロード・バランサを使用します。
  • パイロット・ディザスタ・リカバリ・トポロジを設計して、アプリケーションがホストされているプライマリ・リージョンに障害が発生した場合に、アプリケーションを再起動し、ワークロードをスタンバイ・リージョンに迅速にリストアします。
  • リージョンの障害からリカバリするために、アプリケーションをスタンバイ・リージョンにデプロイするようにCI/CDパイプラインを構成します。
  • ブロック・ストレージ・ボリューム・レプリケーションとオブジェクト・ストレージ・レプリケーションを使用して、リージョン間でブロック・ストレージ・ボリュームをレプリケートします。
  • プライマリ・リージョンに障害が発生した場合、Oracle Cloud Infrastructure Resource Managerを使用して、スタンバイ・リージョンに必要なインフラストラクチャをプロビジョニングします。
  • Autonomous Data Guardを使用して最大限の可用性を実現するようにOracle Autonomous Databaseを設定し、運用のダウンタイムとデータ損失を最小限に抑えます。

さらに、レジリエンシをテストして、断続的に発生する異常な状況でアプリがどのように動作するかを確認します。たとえば、カオス・テストにChaos Monkeyフレームワークを採用できます。また、スロットル、回路遮断器、および再試行メカニズムを使用して、回復力のあるアプリケーションを実装します。

アプリケーション・ライフサイクルを保護するための多層防御アプローチの実装

悪意のあるエンティティによる攻撃から保護するための十分なセキュリティを備えたアプリケーションを設計する必要があります。アプリケーション、クライアント側のコードおよびサードパーティのコードを確認して、疑わしい動作を確認します。フィルタリング・ルールを使用し、Web Application Firewall (WAF)を使用してDDoS保護を設定し、不要なトラフィックからアプリケーションを保護します。

パスワードや認証/認可トークンなどの機密情報をOracle Cloud Infrastructure Vaultに格納します。etcdでKubernetesシークレットの暗号化を設定します。攻撃者が信頼できるエンティティに偽装することをより困難にするために、アプリが使用する証明書で短い存続期間をローテーションおよび設定します。

最小権限の原則に従って、ユーザーおよびサービス・アカウントがタスクの実行に必要な最小限の権限のみを持っていることを確認します。Oracle Cloud Infrastructure Identity and Access Management (IAM)を使用して、アプリケーションおよびそのコンポーネントにアクセスできるユーザーを制御します。IAMでマルチファクタ認証を使用して、管理者がアプリケーションとそのコンポーネントへのアクセスを制限するための強力な認証を適用します。

アーキテクチャ

このアーキテクチャ・パターンは、OKE上のKubernetesクラスタにコンテナとしてデプロイされたマイクロサービスで構成されるWebまたはモバイル・アプリケーションにお薦めします。データの永続性は、Oracle Autonomous Databaseを使用して実現されます。このアプリのメディア・ファイルとイメージ・ファイルは、Object Storageに格納されます。

次のダイアグラムにこのアーキテクチャを示します。



アーキテクチャ-maf-web-mobile-oracle.zip

このアーキテクチャには次のコンポーネントがあります。

  • Web Application Firewall (WAF)

    WAFは、悪意のある不要なインターネット・トラフィックからアプリケーションを保護します。インターネットに直接接続されているエンドポイントを保護し、すべてのアプリケーションに対して一貫性のあるルール適用を提供できます。

  • Oracle Cloud Infrastructure APIゲートウェイ

    OCI APIゲートウェイは、OKEの保護されたRESTful APIエンドポイント、およびOracle Cloud Infrastructureで実行されているその他のサービスまたはエンドポイントを提供する完全管理のリージョナルAPIゲートウェイ・サービスです。このアーキテクチャでは、リクエストはプライベート・ロード・バランサにルーティングされ、OKEで実行されているサービスにリクエストを転送します。

  • Oracle Cloud Infrastructure Identity and Access Management (OCI IAM)

    OCI IAMは、堅牢な多要素認証、ソーシャル・ログイン、エンドユーザーへの自己登録、アイデンティティ管理、シングル・サインオン、およびアプリケーションのアイデンティティ・ガバナンスを提供します。

  • ロード・バランサ

    ロード・バランシング・サービスは、アーキテクチャ内のコンテナ化されたマイクロサービスのOKEノードなど、仮想クラウド・ネットワークからアクセス可能な複数のサーバーに、単一のエントリ・ポイントから自動トラフィック分散を提供します。

  • Oracle Autonomous Database

    Oracle Autonomous Databaseは、柔軟にスケーリングされ、高速問合せパフォーマンスを提供するフルマネージド・データベース環境であり、データベース管理は必要ありません。ハードウェアの構成や管理、ソフトウェアのインストールは必要ありません。

  • Object storage

    オブジェクト・ストレージでは、データベースのバックアップ、分析データ、イメージやビデオなどのリッチ・コンテンツなど、あらゆるコンテンツ・タイプの構造化データおよび非構造化データにすばやくアクセスできます。迅速、即時、頻繁にアクセスする必要のあるホット・ストレージには、標準ストレージを使用します。長期間保持し、ほとんどまたはめったにアクセスしないコールド・ストレージには、アーカイブ・ストレージを使用します。

    このアーキテクチャでは、アプリケーションのメディア・アセットは、標準ストレージ・クラスのバケット内のオブジェクト・ストレージに格納されます。

  • Container Engine for Kubernetes (OK)

    OKEは、フルマネージドのスケーラブルで可用性の高いサービスであり、コンテナ化されたアプリケーションをクラウドにデプロイします。アプリケーションに必要なコンピュート・リソースを指定し、OKEによって既存のテナンシ内のOCIにプロビジョニングされます。Container Engineは、Kubernetesを使用して、ホストのクラスタ間でコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。

  • Service mesh

    Oracle Cloud Infrastructure (OCI)サービス・メッシュは、サービス間通信のためにOCIによって管理されるアプリケーション・インフラストラクチャ・レイヤーです。可観測性、セキュリティおよびトラフィック管理の標準を定義することで、クラウド・ネイティブ・アプリケーションの開発およびデプロイメントを合理化します。サービス・メッシュは、アプリケーションの認識を必要とせずに、アプリケーション・コードとともに顧客のポッドにデプロイされる軽量プロキシの配列として実装されます。

代替

マイクロサービスを使用することは、モバイル・アプリやWebアプリを作成する唯一の方法ではありません。この代替アーキテクチャ・パターンは、ロード・バランサ、自動スケーリングWeb/アプリケーション層および高可用性データベースで構成される3層トポロジを示しています。

すべてのリソースは、OCIリージョンの単一の可用性ドメインにデプロイされます。層は、単一の仮想クラウド・ネットワーク(VCN)内の個別のサブネットに分離されます。セキュリティ・リストは、各層のリソースとの間のネットワーク・トラフィックを規制するファイアウォールとして機能します。各サブネットにアタッチされたルート表には、VCN外部の宛先にトラフィックを転送するルールが含まれます。

シングルページ・アーキテクチャ、プログレッシブWebアプリケーション(PWA)、JAMStackなどの他の代替アーキテクチャは考慮できますが、ここには表示されません。

次の図は、この代替アーキテクチャを示しています。



Architecture-maf-web-mobile-alternative-oracle.zip

ユースケースの例

このユースケースでは、GPUをオンラインで販売する店舗の顧客注文システムについて説明します。

次の図に、このユースケースのアーキテクチャを示します。



Architecture-maf-web-mobile-example-oracle.zip

パブリック・インターネットからのトラフィックは、Web Application Firewall (WAF)を介してDNSサービスによってインターネット・ゲートウェイにルーティングされ、ロード・バランサを介して受信リクエストをイングレス(Nginx)マイクロサービスに転送します。このアプリは、フロントエンド・サービス、注文サービス、メッセージング・サービスおよび在庫サービスで構成されます。これらのサービスはすべてコンテナ化され、OKEクラスタにあります。これらの各サービスは、REST APIを使用してインタフェースを公開します。データはAutonomous Databasesに格納されます。

顧客は、Webアプリケーションまたはモバイル・デバイス上のアプリからフロントエンド・サービスを使用してGPUを注文します。OrdersサービスとInventory Serviceは、NATSオープン・ソース・メッセージング・サービスを使用して相互に通信します。Ordersサービスは、Ordersプラガブル・データベース(PDB)でオーダー・データの読取りと書込みを行います。Inventoryサービスは、Inventory PDBのインベントリ・データの読取りと書込みを行います。オーダー・サービスは、通知サービスを使用して通知を送信し、顧客にEメールまたはSlackを介してオーダー・ステータスを通知できるようにします。顧客はフロントエンドからオーダー・ステータスを取得できます。フロントエンドでは、オーダー・サービスのREST APIを使用してオーダーを検索します。

デプロイ

Universal Health Organization (UHO)は、最新のアプリケーション開発フレームワークの原則に準拠したサンプル・アプリケーションです。特に、Webまたはモバイル、メッセージングおよびイベントドリブン・アーキテクチャ・パターンの要素を実装し、GitHubで使用できます。
  1. GitHubに移動します。
  2. リポジトリをローカル・コンピュータにクローニングまたはダウンロードします。
  3. READMEドキュメントの指示に従います。

変更ログ

このログには、重要な変更が一覧表示されます。

承認

  • 著者: Raghavendra Prasad、Sajan Parihar
  • 貢献者: Hassan Ajan、Matthias Brantner、James Emerson、Harshad Kasture、Parvez Syed Mohamed、Jeff Schering、Joshua Stanley