3

NServiceBusSagasをRESTAPIと統合/相互作用するための最も賢明なアプローチは何ですか?

シナリオは次のとおりです。

  • 負荷分散されたRESTAPIがあります。負荷に応じて、ノードを追加できます。
  • REST APIは、DomainServicesAPIのラッパーです。これは、APIを直接使用できることを意味します。
  • ワークフローにSagasを使用し、スケールアウトするためにNServiceBusDistributorを実装したいと思います。

問題は、SagasのREST APIを使用する場合、実際の処理はAPIファームで行われるということです。これは、ある意味でディストリビューターパターンを実装する目的を無効にします。

一方、Sagasから直接DomainServives APIを使用すると、ワーカーノード内でローカルに処理できます。このアプローチでは、APIアセンブリを複数の場所で維持する必要がありますが、スループットが高くなる可能性があります。

私は最善のアプローチを理解しようとしています。個人的には、API(すぐに利用できる場合)を使用したいのですが、これによりシステムに雑然としたものが導入され、処理中と比較して完了までに時間がかかる可能性があります。

典型的なシーケンスは、オンライン広告の公開に似ている可能性があります。

  • 広告主は、Webアプリケーションを介して新しい広告リクエストを送信します。
  • Webアプリケーションは、関連するAPIエンドポイントを呼び出し、コマンドメッセージを送信します。
  • コマンドメッセージは、新しい公開アドバタイズメント佐賀インスタンスを開始します。
  • Sagaは、呼び出し元のアクセス許可を検証するコマンドを送信します(処理中/処理中のAPI呼び出し)
  • Sagaは、アドバタイズメントデータを検証するコマンドを送信します(処理中/処理中のAPI呼び出し)
  • 佐賀は詐欺サービス(サードパーティサービス)にコマンドを送信します
  • コンテンツと不正の検証が成功したら、
  • 佐賀は課金システムにコマンドを送信します。
  • SagaはAPI呼び出しを呼び出して、追加の詳細を保存します。(インプロセス/アウトプロセスAPI呼び出し)

そして、これはアドバタイズメントの有効期限が切れるまで続き、再試行と失敗の条件パスがいくつかあります。

4

2 に答える 2

2

何度か設計を繰り返した後、次のガイドラインを作成しました。

  1. RESTAPIレイヤーを統合プラットフォームとして扱います。
  2. APIエンドポイントがかなり複雑なマイクロワークフローを抽象化できると仮定します。マイクロワークフローは、単一のバースト(中断不可)で実行され、短い時間(<1秒)で-で完了する操作です。
  3. APIファームは多くの同時リクエストを処理でき、簡単にスケールアウトできると想定します。
  4. ターゲット操作がかなり単純な場合は、非同期メッセージベースの呼び出しよりも同期呼び出しを優先します。
  5. 非同期処理が必要な場合は、単一のメッセージハンドラーを使用し、ハンドラーからAPIを呼び出します。これにより、作業がAPIファームに委任されます。これにより、ディストリビューターや追加のハードウェアリソースも不要になります。
  6. ビジネスワークフローに複数のトランザクション、報酬ロジック、履歴書が含まれている場合を除いて、佐賀県は避けてください。テストの結果、Sagasは負荷がかかった状態ではうまく機能しないことがわかりました。
  7. DomainServicesをメッセージハンドラーから直接消費することは避けてください。これはローカルで作業を行うまでであり、ビジネスロジックを配布することで展開の手間もかかります。

考えを聞いてうれしいです。

于 2012-11-20T05:29:33.300 に答える
0

ワークフローを管理するためにSagasが必要になることを確認できます。私はあなたのドメインが共通のデータベースに接続していることを確信しています。それが当てはまる場合は、ドメインを直接使用して、シリアル化/ネットワークのオーバーヘッドを取り除く方が高速です。また、データベースレベルでトランザクションを簡単に管理する機能も失われます。

ドメインを直接呼び出していると仮定すると、パフォーマンスはドメインのパフォーマンスの問題になります。データベースの最適化、分散トランザクションコストの削減、データのシャーディングなどの手順を実行できます。ディストリビューターを使用して複数のSaga処理ノードを作成することになるかもしれませんが、設計が完了したら、さらにテストを行う必要があるようです。選ばれました。

一般的に、REST APIを使用してコマンドをリソースとしてモデル化し(POSTを介して)、メッセージングに直接アクセスできないクライアントからのNSBとの対話を可能にします。これは、WebアプリからNSBに物事を取り込むための潜在的なソリューションです。

于 2012-09-17T13:24:47.923 に答える