Akka Stream and Playframework



クリエイティブ・コモンズ・ライセンス
  • 3月からDwangoでScala書いてる(7ヶ月くらい)
  • 最近はakkaとakka-remoteを少し仕事で使ってる
  • そのうち発表したい・・・

前提知識


  • 現時点(2014/9/28)で
  • のplayframeworkの最新安定版は2.3.4
  • 2.4.0-M1がでている

現状のPlay2.3


“Split Netty server code into separate subproject“



akka-stream, netty以外の実装も書きやすくなるかもしれない? (例えばservlet)

“Experimental Akka HTTP server backend and Reactive Streams integration“


  • play2.4では、akka-streamが使えるようになる
  • 今までのNettyがあくまでもデフォルト

現時点のplay2.4のSNAPSHOTでakka-streamを使う方法


まずplayをpublishLocal


sbt \
  -Dplay.version=2.4-20140928 \
  -Dscala.version=2.11.2 publishLocal

https://github.com/playframework/playframework/blob/0d4c9b73396d57/documentation/manual/experimental/AkkaHttpServer.md


libraryDependencies +=
  "com.typesafe.play" %% "play-akka-http-server-experimental" % "%PLAY_VERSION%"
run -Dserver.provider=play.core.server.akkahttp.AkkaHttpServerProvider

(今後変更の可能性あり)

ベンチマークしてみた


  • https://github.com/xuwei-k/akka-stream-vs-netty
  • 最新のplay2.4をビルドしてpublishLocal(2.4.0-M1にはまだakka-streamのコミット入ってないので)
  • 数MBのデータを送信 => そのまま返す
  • それを100回くらい繰り返し
  • 並列にリクエストするのと、1回ずつリクエストするのをやった

結果


  • 別にあまり差がでなかった・・・
  • ベンチマークの方法が悪い?もっと色々な方法試す必要あり?
  • とりあえず、明らかに速くなったり遅くなったりすることはなさそう
  • お客様の中に誰かベンチマーク得意な方いらっしゃいませんか・・