Scala中间件选择有什么区别?

时间:2012-01-13 08:59:08

标签: scala akka spray finagle

注意: 不幸的是,这个问题已经关闭,但是如果其他人提出同样的问题,我会尝试维护它。

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

目前可行的选项列表是:

可能还有更多选择。如何决定使用哪一个?什么是一个好的Scala中间件选择的特征(借口双关语;-)。一方面,我想去Akka,因为它是TypeSafe Scala堆栈的一部分,但另一方面,像Finagle这样的东西有一组丰富的库,使管道变得如此简单。喷雾看起来很好用,很简单。

任何建议,见解或经验都将不胜感激。我相信那里的某些人必须有一些经验,他们不介意分享。

更新

我很乐意重新开启这个问题。这个问题的一个很好的答案将有助于新的Scalateers避免相关的陷阱。

更新2:

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

Finagle - 我用Finagle进行了一个项目,它坚如磐石。

Spray - 在我的最新项目中,我正在使用Spray,我非常高兴。最新版本基于Akka 2构建,您可以使用Spray-can库直接运行它,无需Web服务器。 Spray是一组库,而不是框架,非常模块化。 Learn about Spray: REST on Akka video提供了很好的概述,this blog at Cakesolutions显示了一个非常好的开发方法和架构。

更新3:

生活变得非常快。如果你不停下来,偶尔环顾四周,你可能会错过它。 - Ferris Bueller

这些天选择变得更加简单。在我的拙见中,Spray赢得了这场战斗。正在integrated into Akka成为下一个Akka HTTP。我现在一直在使用Spray进行多个项目,并且可以诚实地说它是我遇到的奇妙和最好的支持软件。

这不能回答最初的问题,但至少可以说明为什么Spray在大多数情况下似乎是最佳选择。它非常灵活,无阻塞且非常稳定。它有客户端和服务器端库以及一个很棒的测试工具包。另外,请查看这些统计信息以了解效果:Web Framework Benchmarks

2 个答案:

答案 0 :(得分:2)

我个人很久以前开始使用喷雾剂,并尝试了Scala的所有其他功能。虽然Scala,喷雾,akka,无形和scalaz肯定有一点学习曲线,一旦你开始深入挖掘并真正学习如何使用这些技术,它们就有意义了,我立即看到了这种优点,特别是那种我正在做的工作。

就我个人而言,我认为没有什么能真正起到建立服务器,休息api,http客户端以及其他任何你想要的东西的作用。我喜欢喷雾的是他们用akka建造的。当我第一次开始使用它时,它可能是一个非常早期的项目,但架构是有道理的。这些人知道他们在利用演员模型的好处而没有任何阻止操作方面做了什么。

虽然演员可能会习惯,但我确实喜欢它们。它们使我的系统具有可扩展性和运行成本,因为我不像过去那样需要强大的硬件。另外,喷雾具有喷雾路由DSL,因此只要遵守规则,制作休息api就相对简单了......不要阻止。这当然意味着不要去apache commons http客户端来向api或者演员提出客户请求,因为你将回到阻止模型。

到目前为止,我对喷雾,类型安全和akka非常满意。他们的模型自然有助于构建非常有弹性的系统,如果发生任何事情,可以自行恢复,并采用快速失败的方法。我用喷雾的那种牛肉(它不是喷雾的错误)是对路由DSL的该死的IDE支持。我绝对鄙视Eclipse,并且一直是IDEA用户。当我开始使用Scala插件时,一切似乎都没问题。然后我的路由dsl自然地演变成更大的野兽。关于IDEA解析代码的方式让它在任何时候遇到喷涂路线或无形的任何东西时都会穿上裤子。它到了无法使用的地步(我输2-3个字母,必须等待5分钟才能重新获得控制权)。

因此,对于任何喷涂路由或重型无形代码,我使用ensime,ensime-sbt和scala-mode2启动emacs。现在,如果我只能获得一个具有astyanax质量的Cassandra库,并使用更加无阻塞的架构构建。

答案 1 :(得分:0)

Here您可以找到一个很棒的scala资源列表,其中列出了您列出的所有替代方案。

根据我自己的经验,我使用Scalatra,它对于诸如uri映射和调用Web服务之类的东西来说非常简单,有效。