0

スレッドを利用するサードパーティ API があります。Play フレームワークを使用してコーディングしており、Akka を利用して ASYC 機能を実装し、リアルタイムの結果を達成したいと考えています。しかし、スレッドを使用する API と Akka を統合することが理にかなっているのかどうかはわかりません。次のシナリオを検討してください。

  1. ソケットを使用してサードパーティ API をクエリし、ティッカー シンボルを使用して株価を返す
  2. サードパーティはメッセージを受信し、スレッドを使用してコマンドを実行し、その他の必要なことを行います。私はそれがどのように機能するかについて本当に心配していません。スレッドを利用していることを指摘するだけです。
  3. サードパーティ API がデータを吐き出し始める
  4. プロセスデータが返されました。データが特定のユース ケースと一致する場合は、データベースに保存してブラウザにプッシュします。

このユース ケースで Akka が価値を生み出すことができる場所を教えてください。本当にありがとう

4

2 に答える 2

1

Akka は非同期処理用に設計されています。したがって、サードパーティ API との通信が非同期の非ブロッキング IO を介して行われる場合にのみ適合します。これにより、サードパーティ側のスレッドの詳細からアプリケーションが分離されます。

アップデート

その質問は Play にあると思います! バージョン 1.x。Play 2.0 はすでに内部の Akka Actor システムを使用してリクエスト処理を処理しているためです。

あなたはすでにそれを知っているはずです

Play は非常に短いリクエストで動作するように設計されています。固定スレッド プールを使用して、HTTP コネクタによってキューに入れられた要求を処理します。最適な結果を得るには、スレッド プールをできるだけ小さくする必要があります。通常、プロセッサ数 + 1 の最適値を使用して、デフォルトのプール サイズを設定します。

したがって、リモート (または潜在的に長続きする) 通信では、負荷がかかっているときの play の小さなスレッド プールの枯渇を防ぐために、非同期のノンブロッキングの方法で正しく行うか、別のスレッドで実行する必要があります。サードパーティ API がロックを使用するかどうかに関係なく。

また、Play には非同期処理のサポートが組み込まれていることにも注意してください。この場合、akka の代わりに使用できます。を返す非同期ソケットioライブラリを使用して、Futureそれを変換します。Play のWeb サービス クライアントでの方法と同様です。Promiseawait()

Java ソケット nio に関する関連する質問。

さらに、パフォーマンスをさらに向上させるために、取得した株価情報をキャッシュすることをお勧めします。Guava Cacheは良い候補です。更新モードでは、同期 API を使用した場合でも、更新された見積もりの​​定期的なバックグラウンド リクエストを実行するために使用することもできます。

于 2012-10-19T06:02:04.670 に答える