Scala中间件选择有哪些区别?

64

注意: 很遗憾,此问题已关闭,但我将继续维护它,以备其他人出现相同的问题。

我一直在寻找一个良好的解决方案,用于开发一个Scala服务,它将位于移动设备和现有Web服务之间。

目前可行的选择列表如下:

可能还有更多的选择。如何决定使用哪个?一个好的Scala中间件选择应该具有哪些特点(请原谅双关语;-))。一方面,我想选择Akka,因为它是TypeSafe Scala堆栈的一部分,但另一方面,像Finagle这样的东西具有丰富的库和使编排变得很容易的功能。Spray看起来很好用。

任何建议、见解或经验都将不胜感激。我相信有人在这些中拥有一些经验,并乐于分享。

更新:

我希望重新打开这个问题。对这个问题的良好回答将帮助新的Scalateers避免相关陷阱。

更新2:

自从提出这个问题以来,这是我的经验:

Finagle - 我在一个项目中使用了Finagle,它非常稳定。

Spray - 在我的最新项目中,我正在使用Spray库,非常满意。最新版本基于Akka 2构建,可以直接使用Spray-can库运行,无需Web服务器。Spray是一组库,而不是框架,非常模块化。这个了解Spray:REST on Akka视频提供了很好的概述,而Cakesolutions的此博客展示了非常好的开发方法和架构。

更新3:

生活飞快过去。如果你不时停下来看看周围的环境,就可能错过了许多东西。——费里斯·布拉勒

现在选择变得更加简单。我谦虚地认为Spray已经赢得了这场争斗。它正在被集成到Akka中,成为下一个Akka HTTP。我现在已经在多个项目中使用了Spray,并且可以诚实地说,它是我遇到过的最棒且最受支持的软件。

这并没有回答最初的问题,但至少说明了为什么在大多数情况下Spray似乎是最好的选择。它非常灵活、非阻塞且非常稳定。它具有客户端和服务器端库以及一个出色的测试工具包。此外,查看这些性能统计数据,可以获得有关性能的概念:Web框架基准测试


感谢 @ErnestFriedman-Hill 添加 Finagle。如果可以的话,我很想请您解释一下为什么用户将这个问题标记为不具有建设性。我还没有在生产中使用上述任何系统,已经花了一周时间回顾它们以及其他系统,并且很想听取其他经验的见解。 - Jack
7
基本上因为StackOverflow不是设计用于讨论问题的。一个好的SO问题需要有一个具体、可验证的答案,这个答案不容置疑。你的问题很好,但它不是SO想要看到的。这里有三个FAQ中应该问的例子:“你最喜欢的______是什么?”“我用______做______,你用什么?”“我想知道其他人是否和我一样感觉。”你的问题似乎是这三种反例的混合体。 - Ernest Friedman-Hill
1
@ErnestFriedman-Hill 我可能错了,但也许这是一个可以验证答案的问题。当我问这个问题时,最终我使用了Finagle。项目结束得很好,运行得非常顺畅,但我仍然想知道基于Akka的服务是否更好。我仍然不知道答案,真的希望你们能考虑重新开放它。 - Jack
4
一个关于如何使这样的问题有些有效的提示是,可以问:“这些框架之间有什么区别?” - Adam Gent
2个回答

2
我个人很久以前就开始使用spray,并尝试了Scala中的所有其他技术。虽然Scala、spray、akka、shapeless和scalaz肯定有一些学习曲线,但一旦你开始深入学习如何使用这些技术,它们就很有意义了。特别是对于我现在正在做的工作,我立即看到了好处。
我个人认为没有什么比spray更适合构建服务器、rest api、http客户端和其他任何东西了。我喜欢spray的原因是他们考虑了akka的设计。当我第一次开始使用时,它可能是一个非常早期的项目,但架构很有意义。那些家伙知道如何利用使用actor模型和不进行任何阻塞操作的好处。
虽然actors可能需要一点时间来适应,但我喜欢它们。它们使我的系统非常可扩展和廉价,因为我不需要像过去那样强大的硬件。此外,spray具有spray-routing DSL,因此只要遵循规则(不要阻塞),制作rest api就相对简单。当然,这意味着不要从api或actors中拉取apache commons http客户端以进行客户端请求,因为您将返回到阻塞模型。
到目前为止,我对spray、typesafe和akka非常满意。他们的模型自然地借助于构建非常具有弹性的系统,如果发生任何事情,它们就会自行恢复并采取故障快速处理方法。我对spray的唯一不满(这不是spray的错)是路由DSL的IDE支持。我绝对讨厌Eclipse,一直都是IDEA用户。当我开始使用Scala插件时,一切似乎都很好。然后我的路由dsl自然演变成更大的野兽。关于IDEA解析该代码的方式,使其在遇到任何spray-routing或shapeless的内容时都会崩溃。它已经到了无法使用的地步(我打2-3个字母,就要等待5分钟才能重新控制)。
因此,对于任何spray-routing或重型shapeless代码,我启动带有ensime、ensime-sbt和scala-mode2的emacs。现在,如果我能够获得一个质量与astyanax相当且使用更非阻塞架构构建的Cassandra库,那就太好了。

这是一个旧答案。你拿到那个Cassandra库了吗? - Chetan Bhasin

0

这里你可以找到一个很棒的Scala资源列表,其中包含了你列出的所有备选项的简要描述。

从我的经验来看,我使用Scalatra,它非常小巧、简单且适用于像URI映射和调用Web服务等方面。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接