0

私は型破りな問題に行き詰まっていることに気づきました。マルチスレッド システムから情報を収集するコンポーネントを Java で作成する予定です。前進するのに役立つ情報やアドバイスをいただければ幸いです。詳細は次のとおりです。

-システムには、互いに情報を交換する多くのサブシステムが含まれています (たとえば、1 つのコンポーネントが他のコンポーネントを実行して、ログ記録やデータの計算を行うことができます)。

- システムで実行される各操作は、一連のコマンドのようなものであり、いくつかのコンポーネントを連続して実行することにつながります。

-システムは多数のリクエストを取得し、操作にはIDがないため、どの操作がどのチェーンに属しているかを追跡するのは困難です(チェーンのすべてのステップで操作の時間を取得する必要があります)

私が対処しなければならない問題: -操作上の ID の欠如 -サブシステム間で最終的に ID を交換する -コードの変更を最小限に抑える (これは巨大なシステムです) -最終的には、この種の問題 (または少なくともいくつかの) に対する既存のオープンソース ソリューションを見つけるその一部)

これは、単一の操作による私のコンポーネントの結果の例です。

検索番号 60

コンポーネント 1 45 秒 コンポーネント 6 2 秒 コンポーネント 4 32 秒 コンポーネント 2 4 秒

45、2、32、4 は各コンポーネントで費やされた時間を表します

誰かが同様の問題を解決していることに気付いた場合、またはロギング/情報収集の分野での経験がある場合は、あなたのアドバイスが大いに役立ちます。

編集: AspectJ でコンポーネントを作成しました。これは、すべてのメソッドの「周り」の時間を測定し、各サブシステムからの結果をまとめて収集できます。主な問題は、どのログがどのリクエストに属しているかを識別できないことです (たとえば、特定の「検索番号 60」または「追加番号 5」リクエスト)。問題は、ソースコードを大幅に変更せずに制御フローで転送できるリクエスト ID を作成する効果的な方法 (および転送方法) はありますか?

4

1 に答える 1

0

操作が単一の JVM 内にある場合は、システム ハッシュコード ( System.identityHashcode()を介して取得) を使用してオブジェクトを追跡できる可能性があります。システムがマルチプロセスまたは分散している場合、このアプローチではうまくいきません。

アスペクト指向プログラミングを使用して、既存のコードを変更せずにインストルメンテーション コードを織り込むことができる場合があります。

于 2012-07-22T21:26:23.080 に答える