web-dev-qa-db-ja.com

AkkaはPlayでどのように使用されますか?

Playのホームページ 言う:

Akkaをベースに構築されたPlayは、拡張性の高いアプリケーションに対して、予測可能で最小限のリソース消費(CPU、メモリ、スレッド)を提供します。

AkkaがPlayでどのように、どこで使用されているのか、またAkkaの上にPlayをビルドした結果はどうなっているのかを正確に知りたいと思います。

55

Play 2.では、Playはアクターを通過するすべてのリクエストを委任しました。 Akkaの将来のAPIやその他の部分に大きく依存していました。

Play 2.1では、Akkaの将来のAPIのScala 2.10への移行)で、PlayはAkkaにあまり依存せずに開始しました。Akkaからすべての実行コンテキストを取得し、 Akkaとの統合ですが、それはその程度です。

Play 2.では、特にWebSocketを中心に、Akkaの統合を支援する新しい機能を追加しています。

Play 2.4では、Playは新しいakka-http(以前はスプレーと呼ばれていました)に移植されます。この時点で、PlayはAkkaで可能な限り構築されます。

結果は何ですか? Akkaは、並行性の処理を簡単にするプログラミングのパラダイムを提供します。また、分散プログラミングの優れた抽象化も提供します。分散プログラミングで最も難しいのは、障害(常に発生する)を適切に処理することです。ほとんどのツールは障害をあなたから隠そうとすることでこれに対処しようとしますが、残念ながら何かを隠してもそれは消えません。実際、特定の種類の障害に対処しようとすると、それらが隠されているため、あなたからあなたの邪魔をします。 Akkaはあなたの顔に失敗をプッシュするので、コーディングしているとき、あなたはあなたのアプリケーションが失敗にどのように対応するかについて考えることを強いられます。したがって、障害に耐えられるようにアプリケーションを設計/コーディングする必要があります。また、階層的な方法でそれらに対処するためのツールも提供され、どのレベルの障害をどのレベルで処理し、どのように障害に対応するかを指定できます(ダイ、最大n回再試行など) 。

では、これはPlayにどのように役立ちますか?より良い質問は、Playユーザーにどのように役立つかです。 AkkaはPlay自体を実装するのに役立ちますが、Akkaなしで実装することは可能です(実際、NettyはPlay 2.4で変更される重荷の大部分を現在実行しています)。重要なのは、PlayがAkkaとシームレスに統合され、アクターによるHTTPリクエストの処理、障害の処理などが容易になることです。これにより、スケーラブルで復元力のある方法でアプリケーションを設計できるため、Playユーザーに役立ちます。

UPDATE:上記は3年前に書かれたもので、それ以来多くのことが変更されています。 Play 2.4はakka-httpの実験的サポートを提供しましたが、PlayはまだデフォルトでNettyを使用します。

Play 2.5では、反復APIを廃止し、Akkaストリームに切り替えました。これは、すべての非同期IOがAkkaストリームを通過していたことを意味します。まもなく(Play 2.6以降かどうかはわかりません)、Playはスイッチをフリックしてakka-httpをデフォルトのバッキング実装にします。サーバーの(まだWSクライアントではない)。

UPDATE 2:Play 2.6は、akka-httpをHTTPサーバーのデフォルトのバックエンド実装にします(Nettyは、オプション)。

92
James Roper