スケーラブルな注文処理

Azure Cosmos DB
Azure HDInsight

このサンプル シナリオは、オンライン注文処理のために拡張性と回復性の高いアーキテクチャを必要とする組織に関連します。 考えられる用途としては、eコマースと小売販売管理、受注処理、および在庫予約と追跡が挙げられます。

アーキテクチャ

スケーラブルな注文処理パイプラインのアーキテクチャの例の図。

このアーキテクチャの Visio ファイルをダウンロードします。

データフロー

このアーキテクチャは、注文処理パイプラインの主要コンポーネントの詳細を示しています。 このシナリオのデータ フローは次のとおりです。

  1. イベント メッセージが、顧客向けアプリケーションを介して (HTTP 経由で同期的に) システムに届きます。また、さまざまなバックエンド システムに (Apache Kafka 経由で非同期的に) 届きます。 これらのメッセージは、コマンド処理パイプラインに渡されます。
  2. 各イベント メッセージが取り込まれ、コマンド プロセッサ マイクロサービスによって定義された一連のコマンドのいずれかにマップされます。 コマンド プロセッサは、イベント ストリームのスナップショット データベースからのコマンド実行に関連する現在の状態を取得します。 その後、コマンドが実行され、そのコマンドの出力が新しいイベントとして生成されます。
  3. コマンドの出力として生成された各イベントが、Azure Cosmos DB を使用して、イベント ストリームのデータベースにコミットされます。
  4. イベント ストリームのデータベースにコミットされたデータベース挿入または更新ごとに、Azure Cosmos DB 変更フィードによってイベントが発生します。 そのシステムに関連するすべてのイベント トピックに、ダウンストリーム システムがサブスクライブできます。
  5. Azure Cosmos DB 変更フィードからのイベントもすべて、スナップショット イベント ストリームのマイクロサービスに送信されます。これにより、発生したイベントによるすべての状態の変更が計算されます。 その後、新しい状態が、Azure Cosmos DB に格納されているイベント ストリームのスナップショット データベースにコミットされます。 スナップショット データベースは、現在の状態のすべてのデータ要素に対して、待機時間の短いグローバル分散データ ソースを提供します。 イベント ストリームのデータベースは、アーキテクチャを介して渡されるすべてのイベント メッセージの完全なレコードを提供することで、堅牢なテスト、トラブルシューティング、およびディザスター リカバリーのシナリオを有効にします。

Components

  • Azure Cosmos DB は Microsoft のグローバル分散マルチモデル データベースです。これにより、ソリューションでは、スループットとストレージを、任意の数の地理的リージョンで柔軟かつ個別にスケーリングできるようになります。 このサービスは包括的なサービス レベル アグリーメント (SLA) により、スループット、待機時間、可用性、一貫性が保証されています。 このシナリオでは、イベント ストリーム ストレージおよびスナップショット ストレージに Azure Cosmos DB を使用し、Azure Cosmos DB の変更フィード機能を適用してデータの一貫性と障害からの復旧を実現します。
  • Azure HDInsight 上の Apache Kafka は、リアルタイムのストリーミング データ パイプラインとアプリケーションを構築するための、オープン ソースの分散ストリーム プラットフォームである Apache Kafka のマネージド サービス実装です。 Kafka は、名前付きデータ ストリームへの公開とサブスクライブのために、メッセージ キューと同様のメッセージ ブローカー機能も提供しています。 このシナリオでは、Kafka を使用して、注文処理パイプラインの受信およびダウンストリーム イベントを処理します。

シナリオの詳細

このシナリオのイベント ソーシング アプローチでは、マイクロサービスを介して実装される関数型プログラミング モデルが使用されています。 各マイクロサービスがストリーム プロセッサとして扱われ、すべてのビジネス ロジックがマイクロサービスを使って実装されます。 このアプローチにより、高可用性と回復性、geo レプリケーション、および高速なパフォーマンスが実現します。

Azure Cosmos DB や HDInsight などのマネージド Azure サービスを使用して、グローバルに分散されたクラウド規模のデータ ストレージと取得に関する Microsoft の専門知識を使用することで、コストを削減できます。 このシナリオは、特に e コマースまたは小売のシナリオに対応しています。データ サービスに関する他のニーズがある場合は、使用可能な Azure のフル マネージドのインテリジェント データベース サービスの一覧を確認する必要があります。

考えられるユース ケース

その他の関連するユース ケース:

  • eコマースまたは小売販売管理のバックエンド システム。
  • 小売または製造業向けの在庫管理システム。
  • 受注システム。
  • 注文処理パイプラインに関連する他の統合シナリオ。

考慮事項

以降の考慮事項には、ワークロードの品質向上に使用できる一連の基本原則である Azure "Well-Architected Framework" の要素が組み込まれています。 詳細については、「Microsoft Azure Well-Architected Framework」を参照してください。

リアルタイム メッセージ インジェスト、データ ストレージ、ストリーム処理、分析データのストレージ、および分析とレポート作成では、使用できるテクノロジ オプションが多数あります。

現在、マイクロサービスは、回復性優れ、単独でのデプロイが可能で、迅速に展開できるスケーラブルなクラウド アプリケーションを構築するための一般的なアーキテクチャ スタイルになっています。 マイクロサービスには、アプリケーションを設計およびビルドするのためのさまざまなアプローチが必要です。 マイクロサービス ベースのアーキテクチャの構築とガイダンスについては、「Azure でのマイクロサービスの設計」をご覧ください。

可用性

このシナリオのイベント ソーシング アプローチを使用すると、システム コンポーネントの疎結合が可能になり、それぞれ個別にデプロイできます。 Azure Cosmos DB は高可用性を提供し、組織が一貫性、可用性、およびパフォーマンスに関連したトレードオフを、すべて対応する保証を使用して管理するために役立ちます。 HDInsight 上の Apache Kafka もまた、高可用性を提供するように設計されています。

Azure Monitor には、さまざまな Azure サービスにわたって監視するための統合ユーザー インターフェイスが用意されています。 詳細については、Microsoft Azure での監視に関するページをご覧ください。 Event Hubs と Stream Analytics は両方とも、Azure Monitor に統合されています。

可用性に関するその他の考慮事項については、可用性のチェックリストを参照してください。

スケーラビリティ

HDInsight 上の Kafka を使用すると、Kafka クラスターのストレージとスケーラビリティを構成できます。 Azure Cosmos DB により、予測したとおりのパフォーマンスを迅速に確保し、アプリケーションの成長に合わせてシームレスにスケーリングできます。 このシナリオのイベント ソーシング マイクロサービス ベースのアーキテクチャでも、システムのスケーリングとその機能の拡張が行いやすくなります。

スケーラビリティに関するその他の考慮事項については、Azure アーキテクチャ センターの「パフォーマンス効率のチェックリスト」を参照してください。

セキュリティ

セキュリティは、重要なデータやシステムの意図的な攻撃や悪用に対する保証を提供します。 詳細については、「セキュリティの重要な要素の概要」を参照してください。

Azure Cosmos DB セキュリティ モデルでは、ユーザーを認証し、そのデータとリソースへのアクセスを提供しています。 詳しくは、「Azure Cosmos DB データベースのセキュリティ」をご覧ください。

セキュリティで保護されたソリューションの設計に関する一般的なガイダンスについては、「Azure のセキュリティのドキュメント」を参照してください。

回復性

このサンプル シナリオのイベント ソーシング アーキテクチャと関連テクノロジにより、障害発生時に高い回復性が実現します。 回復性に優れたソリューションの設計に関する一般的なガイダンスについては、回復性に優れた Azure 用アプリケーションの設計に関するページを参照してください。

コスト最適化

コストの最適化とは、不要な費用を削減し、運用効率を向上させる方法を検討することです。 詳しくは、コスト最適化の柱の概要に関する記事をご覧ください。

このシナリオの実行コストを調べることができるように、すべてのサービスがコスト計算ツールで事前構成されています。 特定のシナリオについて価格の変化を確認するには、予想されるデータ ボリュームに合わせて該当する変数を変更します。 このシナリオで価格の例に含まれるのは、Azure Cosmos DB 変更フィードから生成されたイベントを処理するための Azure Cosmos DB と Kafka クラスターのみです。 送信元システムと他のダウンストリーム システムのイベント プロセッサおよびマイクロサービスは含まれず、そのコストは、これらのサービスと、そのサービスを実装するために選択されたテクノロジの数量とスケールによって大きく異なります。

Azure Cosmos DB の通貨は要求ユニット (RU) です。 要求ユニットが使用されるので、読み取り/書き込み容量を予約したり、CPU、メモリ、IOPS をプロビジョニングしたりする必要はありません。 Azure Cosmos DB は、単純な読み取りと書き込みから複雑なグラフのクエリまで、さまざまな操作を行うための API を幅広くサポートしています。 すべての要求が同等とは限らないので、要求には、それを処理するために必要な計算量に基づいて、正規化された要求ユニットの量が割り当てられます。 ご自身のソリューションに必要な要求ユニット数は、データ要素のサイズと、秒あたりのデータベース読み取りおよび書き込み操作数に酔って異なります。 詳細については、「Azure Cosmos DB の要求ユニット」を参照してください。 これらの推定価格は、2 つの Azure リージョンで実行されている Azure Cosmos DB に基づきます。

想定するアクティビティの量に基づいて、次の 3 つのサンプル コスト プロファイルが用意されています。

  • Small: この価格の例は、Azure Cosmos DB と小規模 (D3 v2) Kafka クラスターの 1 TB のデータ ストアで予約された 5 RU に関連しています。
  • Medium: この価格の例は、Azure Cosmos DB と中規模 (D4 v2) Kafka クラスターの 10 TB のデータ ストアで予約された 50 RU に関連しています。
  • Large: この価格の例は、Azure Cosmos DB と大規模 (D5 v2) Kafka クラスターの 30 TB のデータ ストアで予約された 500 RU に関連しています。

共同作成者

この記事は、Microsoft によって保守されています。 当初の寄稿者は以下のとおりです。

プリンシパルの作成者:

  • Alex Buck | シニア コンテンツ開発者

次のステップ

このサンプル シナリオは、jet.com 社が、そのエンド ツー エンド注文処理パイプライン用に構築した、このアーキテクチャの大規模バージョンに基づいています。 詳細については、「jet.com 社のテクニカル カスタマー プロファイル」および「Build での jet.com 社のプレゼンテーション」を参照してください。

次の他のコンテンツを参照してください。

関連するアーキテクチャ コンテンツを参照してください。