10

私はPlayフレームワークとAkkaを使ったプログラミングにかなり慣れていませんが、それらについてはしばらく読んでいます。現在、デフォルト/基本のPlay環境で概念実証アプリケーションを開始しています。私の質問は、PlayのWebサービスクライアントAPI(http://www.playframework.org/documentation/2.0.1/ScalaWS)に由来します。

このアプリケーションは基本的に、リモートのSOAPWebサービスへの呼び出しを可能な限りスケーラブルでパフォーマンスの高い方法で仲介する必要があります。ブラウザはJSONでajax呼び出しを行い、PlayアプリはそれらをSOAP / XMLに変換する必要があり、その逆も同様です。

コントローラーを介してPlayWebサービスクライアントを直接使用した場合、これらの呼び出しは非同期である可能性があります。これは、現在実行しているもの(ブロッキング)よりもはるかに優れています。ただし、これが高負荷でどのように動作するかはわかりません。同時実行/スレッド管理は、主に基盤となるNettyサーバーに任されますか?調整する方法はありますか?

別の方法は、コントローラーからAkkaアクターシステムを使用することです。ここで、ルーティングポリシー、プールサイズ、フォールトトレランスなどを制御できます。このアプローチを採用する場合でも、Playの非同期WSクライアントを使用することは理にかなっていますか?もしそうなら、このアプローチ(先物を構成する)は推奨されるパターンでしょうか?

Akkaアプローチをより魅力的にしていると思われる別の要因は、このアプリケーションが最終的に他のいくつかの責任を持つことです。そのため、このActorSystemに許可されるリソースを制御/調整し、アプリ全体がSOAPサービスによってドラッグダウンされるリスクを減らすことができます。

4

1 に答える 1

5

あなたが詳述している2つのオプションはうまくいくでしょう:

  • WS用のplayAPIを使用して、リクエスト/レスポンスを非同期で処理します
  • Akkaを使用して同じことを行い、アクターでWS呼び出しを同期的に管理します

まず、正しい解決策も間違った解決策もありません。

遊び!WS APIソリューションは、実装とテストが最も簡単です。コミュニティの多くの人々がそれに依存しています(私はそうします)。

一方、Akkaソリューションのセットアップはそれほど重くはありませんが、将来的には柔軟性が高まります。あなたは単に非同期プレイを使うことができます!ブロックし、非同期計算のpromiseを処理します。プレイプロミスとakkafutureの間にも暗黙の変換があります。最後に、アクターを監視するために、Typesafeコンソールを確認できます。

重要なのがパフォーマンスである場合、時期尚早の最適化は多くの場合、より多くの(そして不必要な)複雑さにつながります。私に関する限り、私はAPI WSから始め、将来必要に応じてAkkaソリューションに移行します。

于 2012-06-27T10:05:44.980 に答える