web-dev-qa-db-ja.com

Scalaミドルウェアの選択の違いは何ですか?

注:残念ながら、この質問は閉じられましたが、私は試しています他の誰かが同じ質問をした場合に備えてそれを維持するため。

私は、モバイルデバイスと既存のWebサービスの間に位置するScalaでサービスを開発するための優れたソリューションを探していました。

実行可能なオプションの現在のリストは次のとおりです。

おそらくそこにはもっと多くのオプションがあります。どちらを使用するかをどのように決定しますか?良いScalaミドルウェアの選択の特徴(駄洒落を許してください;-)は何ですか。 TypeSafe Scalaスタックの一部であるため、一方ではAkkaを選びたいと思いますが、他方では、Finagleのようなものには豊富なライブラリのセットがあり、配管が非常に簡単です。スプレーは見た目が良く、使いやすいです。

アドバイス、洞察、経験をいただければ幸いです。そこにいる誰かが、共有しても構わないこれらのいくつかの経験を持っているに違いないと確信しています。

更新:

この質問が再開されることを望んでいます。この質問に対する良い答えは、新しいスケーラターが関連する落とし穴を回避するのに役立ちます。

更新2:

これらは、この質問をして以来の私自身の経験です。

Finagle-私はプロジェクトにFinagleを使用しましたが、それは堅実です。

Spray-私の最新のプロジェクトではSprayを使用していて、とても満足しています。最新のリリースはAkka2上に構築されており、Spray-canライブラリを使用して直接実行できるため、Webサーバーが不要になります。スプレーはフレームワークではなくライブラリのセットであり、非常にモジュール化されています。 スプレーについて学ぶ:AkkaビデオのREST は素晴らしい概要を示し、 Cakesolutionsのこのブログ は本当に素晴らしい開発アプローチとアーキテクチャを示しています。

更新3:

人生はかなり速く動きます。たまに立ち止まって見回さないと、見逃してしまうかもしれません。 -フェリス・ビュエラー

最近では、選択が簡単になっています。私の謙虚な意見では、スプレーは戦いに勝ちました。次のAkkaHTTPになるために Akkaに統合されています です。私は現在、複数のプロジェクトでスプレーを使用していますが、これまでに出会った中で最もサポートされている素晴らしいソフトウェアであると正直に言うことができます。

これは最初の質問には答えませんが、少なくとも、ほとんどの場合、スプレーが最良の選択であると思われる理由をある程度示しています。非常に柔軟性があり、ブロッキングがなく、非常に安定しています。クライアント側とサーバー側の両方のライブラリと優れたテストキットがあります。また、パフォーマンスに関するアイデアを得るために、これらの統計を見てください: Web Framework Benchmarks

63
Jack

私はずっと前に個人的にスプレーから始めて、Scalaのためにそこにある他のすべてを試しました。 Scala、spray、akka、shapeless、scalazには確かに少し学習曲線がありますが、テクノロジーをどのように使用するかを掘り下げて実際に学習し始めると、それらは理にかなっており、特にこの種のメリットがすぐにわかりました。私が今している仕事の。

個人的には、両方のサーバー、REST API、httpクライアント、およびその他の必要なものを構築するために、スプレーに耐えられるものは何もないと思います。私がスプレーで気に入っているのは、それらがakkaを念頭に置いて構築されていることです。私が最初にそれを使い始めたとき、それは本当に初期のプロジェクトだったかもしれませんが、アーキテクチャは理にかなっています。それらの人は、アクターモデルを使用し、ブロッキング操作を行わないことの利点を活用するという点で、自分たちが何をしているのかを知っていました。

俳優は少し慣れるのに時間がかかるかもしれませんが、私は彼らが好きです。これまでのように頑丈なハードウェアを必要としないため、システムは非常にスケーラブルで安価に実行できます。さらに、sprayにはスプレールーティングDSLがあるため、ルールに従っている限り、RESTAPIの作成は比較的簡単です...ブロックしないでください。もちろん、これは、ブロックモデルに戻るため、Apache commonshttpクライアントを使用してAPIまたはアクターからクライアント要求を行わないことを意味します。

これまでのところ、スプレー、タイプセーフ、およびakkaに非常に満足しています。彼らのモデルは、何かが起こった場合に自動的に復旧する非常に回復力のあるシステムを構築するのに自然に役立ち、あなたはフェイルファストアプローチを取ります。私がスプレーで持っている1つの牛肉(そしてそれはスプレーのせいではありません)はいまいましいIDEルーティングDSLのサポートです。私はEclipseを絶対に軽蔑し、常にIDEAユーザー。Scalaプラグインを使い始めたとき、すべてが問題ないように見えました。その後、ルーティングDSLは自然に大きな獣に進化しました。方法についての何かIDEA =そのコードを解析して、スプレールーティングや形のないものに遭遇したときはいつでも、そのコードをたわごとにします。それは使用できなくなるまでです(2〜3文字を入力し、制御を取り戻すには5分待つ必要があります)。

したがって、スプレールーティングや重いシェイプレスコードの場合は、ensime、ensime-sbt、scala-mode2を使用してemacsを起動します。ここで、アステュアナクスの品質を備え、より非ブロッキングアーキテクチャを使用して構築されたCassandraライブラリのみを取得できた場合。

2

ここ あなたがリストしたすべての選択肢の簡単な説明とともにscalaリソースの素晴らしいリストを見つけることができます。

私自身の経験から、私はScalatraを使用しています。これは小さく、シンプルで、uriマッピングやWebサービスの呼び出しなどに効果的です。

0
aglavina