コンバージド・データベースとHelidonを使用したマイクロサービスのデプロイ

開発者は、主にマイクロサービス・アーキテクチャを使用して新しいデータ駆動型アプリケーションを構築しています。さらに、既存の顧客は、データベース・アクセス・パターンに疎結合およびバインド・コンテキストを導入することで、モノリスな設計をマイクロサービスに近代化しています。小規模なチームでDevOpsをより効率的にするために、ワークフローとデータ・フローを簡素化しようとしています。業界の現在のラムダおよびカッパ・アーキテクチャ・パターンは、複数のテクノロジ、データの複数のコピー、複数のセキュリティ・ホップ、およびチームに必要な複数のスキルによって複雑さを増します。コンバージド・データベースは、基礎となるアーキテクチャの複雑さを簡素化します。

アーキテクチャ

このアーキテクチャでは、クラウド・インフラストラクチャ、コンバージドOracle DatabaseおよびHelidonでマイクロサービスを使用するために必要なリソースおよびトポロジを示します。

コンバージドOracle Databaseは、最新のデータ型、主要なデータ・センター・コンポーネントおよび最新の開発パラダイムをネイティブにサポートする最適化されたデータベースです。たとえば、収束データベースでは、位置の把握、ドキュメント・ストア用のJSON、デバイス統合用のIoT、リアルタイム分析用のインメモリー・テクノロジおよび従来のリレーショナル・データがサポートされています。これらのすべてのデータ型をサポートすることで、コンバージド・データベースは、IoTからブロックチェーン、分析および機械学習まで、あらゆる種類のワークロードを実行できます。マイクロサービスを含む任意の開発パラダイムを処理することもできます。

マイクロサービス・アーキテクチャには、メッセージング層、アプリケーション層およびデータベース層の3つの主要な層があり、エンタープライズ・アプリケーションにアジリティ、水平スケールおよび堅牢性をもたらします。この参照アーキテクチャは、Oracle Databaseを永続性レイヤーとして使用して堅牢なマイクロサービスを構築するために、Oracle Gen 2クラウドで使用可能な標準ベースのコンポーネントをレイアウトします。

メッセージング層は、データベースに組み込まれたJava Message Service (JMS)トランザクション・メッセージング、Transactional Event Queues (TEQ)またはOracle Cloud Infrastructure StreamingサービスなどのKafkaベースのトランスポート・メカニズムです。

アプリケーション層は、Oracle Cloud Infrastructure Container Engine for Kubernetesによって管理されるdockerコンテナを使用して構築されます。各マイクロサービスは、独立したデータベースまたはデータベース内のスキーマ・レベルの分離に接続されたコンテナです。次にアプリケーションの例を示します。
  • イベントの監視およびアラート: GrafanaおよびPrometheus
  • 可観測性およびトレース: KialiおよびJaeger
  • 従来のアプリケーション: Java Enterprise EditionおよびOracle Weblogic
  • Java Microservices: Java、helidon.ioおよびOracle GraalVM Enterprise
  • 多言語マイクロサービス: node.jsおよびpython
  • Oracle Container Engine for Kubernetesでのサービス・メッシュ: Istio、KubernetesおよびDocker

データベース層は、2つのAutonomous Transaction Processingインスタンス(ATP-1およびATP-2)で構成されます。アーキテクチャでは、リレーショナル・データ、空間データ、ドキュメント、テキストおよびJSONデータをコンバージド・データベースで使用し、マイクロサービス用の組込みトランザクション・メッセージングを使用してワークフローを簡略化します。

次の図は、オンライン・モバイル食品配達アプリケーションのマイクロサービス・アーキテクチャの例です。

helidon_microservices_db_architecture.pngの説明が続きます
図helidon_microservices_db_architecture.pngの説明

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

  • ロード・バランサ

    Oracle Cloud Infrastructure Load Balancingサービスは、バックエンドの複数のサーバーに対して、単一のエントリ・ポイントから自動トラフィック分散を提供します。

  • Container Engine for Kubernetes

    Oracle Cloud Infrastructure Container Engine for Kubernetesは、完全に管理されたスケーラブルで可用性の高いサービスで、コンテナ化されたアプリケーションをクラウドにデプロイする際に使用できます。アプリケーションで必要なコンピュート・リソースをユーザーが指定すると、Container Engine for KubernetesがそれらをOracle Cloud Infrastructureの既存テナンシにプロビジョニングします。Container Engine for Kubernetesは、Kubernetesを使用して、ホストのクラスタ間でコンテナ化されたアプリケーションのデプロイメント、スケーリングおよび管理を自動化します。

  • Kubernetesのサービス・コネクタ

    OCI Service Broker for Kubernetesを使用して、Oracle Autonomous Transaction ProcessingデータベースをOracle Container Engine for Kubernetesに接続します。

    OCI Service Broker for Kubernetesは、Open Service Broker APIの実装です。OCI Service Broker for Kubernetesは特に、KubernetesクラスタからOracle Cloud Infrastructureサービスと対話するためのものです。次のOracle Cloud Infrastructureサービスにバインドする3つのサービス・ブローカ・アダプタが含まれています:オブジェクト・ストレージ、Autonomous Transaction Processing、Autonomous Data WarehouseおよびOracle Streaming Service。

    OCI Service Broker for Kubernetesを、Oracle Cloud Infrastructure Container Engine for Kubernetesで作成したクラスタに追加し、前述のOracle Cloud Infrastructureサービスと対話できます。OCI Service Broker for Kubernetesをクラスタに追加すると、クラスタ上でアプリケーションをデプロイまたはアンデプロイするたびに、Oracle Cloud Infrastructureサービスを手動でプロビジョニングおよびプロビジョニング解除する必要はありません。かわりに、kubectlを使用してOracle Cloud Infrastructureサービスと対話し、OCI Service Broker for Kubernetesによって実装されたOpen Service Broker APIを呼び出します。
  • レジストリ

    Oracle Cloud Infrastructure Registryは、本番ワークフローの開発を簡略化できる、Oracle管理のレジストリです。レジストリでは、Dockerイメージなどの開発アーティファクトを簡単に格納、共有および管理できます。Oracle Cloud Infrastructureの高可用性とスケーラブルなアーキテクチャにより、アプリケーションを確実にデプロイおよび管理できます。

  • オブジェクト・ストレージ

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

  • マイクロサービス

    Kialiで視覚化されたトレース情報を提供するために、Istio Service Meshを使用してマイクロサービスをプロキシに接続します。

    トレースにはJaegerを、Istioメッシュの可観測性にはKialiを使用します。

  • Helidon

    Helidon MicroProfile注釈を使用して、マイクロサービスのヘルスおよびライブ状態を監視します。

  • Autonomous Transaction Processing

    Oracle Autonomous Transaction Processingは、トランザクション処理ワークロード用に最適化された、自動運転、自己保護および自己修復が可能なデータベース・サービスです。ハードウェアを構成または管理する必要も、ソフトウェアをインストールする必要もありません。Oracle Cloud Infrastructureは、データベースの作成と、データベースのバックアップ、パッチ適用、アップグレードおよびチューニングを処理します。

次の図は、オンライン・モバイル食品配達アプリケーションのマイクロサービス・アーキテクチャのワークフローの例です。

microservices_converged_db.pngの説明が続きます
図microservices_converged_db.pngの説明

このアーキテクチャでは、次のステップが表示されます。

  1. 顧客はオンライン・レビューを検索して注文します。オーダー・サービス・マイクロサービスには、レビューの検索機能があります。検索レビュー・リクエストおよびオーダーは、ロード・バランサを介してオーダー・サービス・マイクロサービスに送信されます。オーダー・サービスはデータベースと通信します。
  2. テキストおよびJSONのデータ検索およびセンチメント分析は、レビューの検索機能に送信されます。
  3. 「オーダー・サービス」および「在庫チェック・サービス」マイクロサービスは、トランザクション・メッセージングを使用して相互に通信します。
  4. オーダー・サービスは、搬送要求の場所オーダーを搬送サービス・マイクロサービスに送信します。
  5. 単一または複数の配信の空間計算は、データベースから配信サービスのルート・マッピング機能に送信されます。
  6. Lowcodeの運用分析は、データベースから分析ダッシュボードに送信されます。

推奨

実際の要件は、ここで説明するアーキテクチャとは異なる場合があります。開始点として次の推奨事項を使用します。

  • 簡潔性

    このアーキテクチャにより、Oracleの統合データベースを使用してマイクロサービスの永続性レイヤーを簡単に設計する必要性が増幅されます。データベース・セキュリティ・モデルは、認証および認可セキュリティを取得するための適切な開始点です。また、データベースのバックアップおよび高可用性を使用すると、マイクロサービス開発が簡略化されます。

    アプリケーションを十分に理解することで、各マイクロサービスのデータ・アクセスが制御され、これらのサービスの多数の中で、バインド・コンテキストの設計と疎結合が行われます。スキーマ・レベルの分離から始めます。

    マイクロサービスの正しいサイズ設定は、データ依存関係をより管理しやすくするために重要です。

    コンバージド・データベース内に構築されたイベント・ドリブン・トランザクション・メッセージングを使用すると、正確に1回のメッセージングを保持しながら、マイクロサービス間の疎結合が可能になり、最終的にはマイクロサービス間で一貫性のあるトランザクション(sagasと呼ばれる)を効率的に実装できます。

  • 可観測性と管理性

    Helidon注釈による可観測性と管理性、およびトレース・ツールを使用すると、マイクロサービス・ベースのアプリケーションを大規模に自動化できます。これは、特にマイクロサービスの負荷が増加し、大規模なパフォーマンスと可用性を実現するために調整が必要な場合に、アプリケーション層とデータベース層の両方で適切に設計するための領域です。

  • 拡張性

    Oracle Cloud Infrastructure Container Engine for Kubernetesで管理されるマイクロサービスをコンテナ化すると、アプリケーション層を拡張できます。各マイクロサービスに独自のデータベースを持たせることは常に推奨されるわけではありませんが、コンバージド・データベースのアーキテクチャでは確実に可能です。多くの場合、マイクロサービス間のスキーマ・レベルの分離により、不要なデータ依存性から適切に分離されます。

  • SECURITY

    コンバージド・データベースは、アプリケーションがユーザー・レベルのロール、認証、認可およびデータ暗号化を提供するために使用できる高度なセキュリティを提供します。マイクロサービスのセキュアなアクセスは、永続性レイヤーのセキュリティとともにHelidonによっても提供されます。

  • スケール

    このアーキテクチャでは、マイクロサービス・インスタンスを管理するためにOracle Container Engine for Kubernetesを使用してマイクロサービス・インスタンスを追加し、サービスごとに複数のインスタンスをシームレスに使用できるようにロード・バランサを追加します。可用性およびスケーリングについては、マイクロサービスのこのパラダイムを使用して対処します。データベースでは、ほとんどのアプリケーションで動作する可能性のある特定のレベル(データベース・システムごとに2から48個のOracle Compute Unit (OCPU))への単純な自律型スケーリングが提供されます。

注意事項

この参照アーキテクチャをデプロイする場合は、次の点を考慮してください。

  • パフォーマンス

    マイクロサービスのインスタンスを追加してアプリケーションのパフォーマンスを水平方向にスケーリングし、Kubernetesで管理します。

    Oracle Autonomous Transaction Processingパフォーマンス・コンソールでデータベースの負荷を観察し、OCPUの数(ATP共有で最大48個)を増やすことで、データベースのパフォーマンスを拡張します。

  • セキュリティ

    マイクロサービスのセキュリティは、Helidon Microservicesによって提供されるセキュリティおよびOracle Databaseセキュリティ・モデル(認証、認可、リソースのアクセス制御)に従います。Oracleでは、アプリケーションでできるだけ多くのデータベース・メカニズムが使用されるようにすることをお薦めします。

  • 可用性

    高可用性には、アプリケーション・レイヤーとデータ・レイヤーの2つの部分があります。

    アプリケーションの可用性は、ステートレス・コンテナを持ち、Kubernetesによって再作成され、中間層のメタデータまたはデータベースから任意の状態をリカバリすることで実現されます。

    高可用性アーキテクチャには、Oracle Cloudの可用性ドメイン間またはリージョン間のPDBのフィジカル・スタンバイをお薦めします。他の推奨事項については、Oracle Databaseの高可用性パラメータを確認してください。

  • コスト

    クラウド経済性は、このマイクロサービス・リファレンス・アーキテクチャに適用されます。すべてのコンポーネントは、Oracle Cloud Infrastructureで管理対象サービスとして使用でき、ハードウェアのプロビジョニングに対して支払うのではなく、何を使用するかに対して支払います。

デプロイ

このリファレンス・アーキテクチャのTerraformコードは、GitHubで入手できます。Terraform CLIを使用して、GitHubからコンピュータにコードをダウンロードし、コードをカスタマイズし、アーキテクチャをデプロイできます。

変更ログ

このログには、重要な変更のみがリストされます。