テスト ラボには次のアーキテクチャがあります。
N SOAP クライアントがさまざまな Web サービスにリクエストを送信します (クライアント側のテクノロジを制御することはできませんが、リクエストは常に HTTP 経由の SOAP XML です)。
すべての着信 SOAP 要求を処理し、それらを適切な WS にルーティングする 1 つのゲートウェイ。
問題:
私のサービスは、1 日に数百 (場合によっては数千) のリクエストを受け取ります。それらの多くは、情報を収集するだけの GET リクエストです。したがって、これらのリクエストの多くは似ていますが、違いは次のとおりです。
- 各リクエストを識別する Soap-Env\Header 内の 1 つの制御フィールド (リクエスト ID)。
- リクエスト作成のタイムスタンプを識別する Soap-Env\Body の 1 つの制御フィールド。
解決:
ゲートウェイにキャッシュ メカニズムを実装します。WS XPTO へのリクエストがゲートウェイで受信されると、キャッシング メカニズムがその WS のキャッシュされたリクエストと比較し、それらが等しい場合、宛先 WS へのクエリを回避して、キャッシュされたレスポンスがクライアントに返されます。
キャッシュ バックエンドに格納する前に、XML 要求文字列から 2 つの要求制御属性を削除することを検討しています。キャッシュされたリクエストと比較する前に、各受信リクエストに対して同じことを行うことができます。
要件:
- 実装には Java を使用します。
- WS ごとにキャッシュされた要求/応答を 1 つだけ維持する必要があります。
- バックエンドは、読み取り/書き込み応答時間が非常に高速でなければなりません。
- XML SOAP リクエストの比較はバックエンドで処理する必要があります。明らかに、パフォーマンスのために Java でリクエストを順次取得して比較することはできないからです。
質問:
この詳細な説明 (長文で申し訳ありません) を踏まえて、どのテクノロジが私のニーズ、特にバックエンドに最も適しているかを専門家から聞きたいと思います。NoSQL およびインメモリのキー値ストアを検討しましたが、そのうちの 1 つがすべてのニーズに対応できるとは確信できません。
- XML を通常の文字列 DB フィールドに保存してから、単純な WHERE クエリを作成する必要がありますか?
- XML リクエストを JSON ドキュメントに変換し、それを NoSQL DB に保存して、この方法でさらにクエリを実行し、リクエストを比較する必要がありますか?
- エントリを次のように保存するインメモリ データベース システムを選択する必要があります
(service_name, [request_XML, response_XML])
か?