Jac*_*ack 63 scala akka spray finagle
注意: 不幸的是这个问题已经关闭,但是如果有其他人提出同样的问题,我正试图维护它.
我一直在寻找在Scala中开发服务的良好解决方案,该服务将位于移动设备和现有Web服务之间.
目前可行的选项清单是:
那里可能有更多的选择.如何决定使用哪一个?什么是一个好的Scala中间件选择的特征(借口双关语;-).一方面,我想去Akka,因为它是TypeSafe Scala堆栈的一部分,但另一方面,像Finagle这样的东西有一组丰富的库,使管道变得如此简单.喷雾看起来很好用,很简单.
任何建议,见解或经验将不胜感激.我相信那里的某些人必须有一些经验,他们不介意分享.
更新:
我很乐意重新开启这个问题.这个问题的一个很好的答案将有助于新的Scalateers避免相关的陷阱.
更新2:
这些是我自问这个问题后的经验:
Finagle - 我用Finagle进行了一个项目,它坚如磐石.
喷雾 - 在我的最新项目中,我正在使用Spray,我非常高兴.最新版本基于Akka 2构建,您可以使用Spray-can库直接运行它,无需Web服务器.Spray是一组库,而不是框架,非常模块化.在了解喷雾:在阿卡视频REST给出了一个很好的概述,而这个博客在Cakesolutions显示了一个非常好的发展方式和结构.
更新3:
生活移动得非常快.如果你不停下来,偶尔环顾四周,你可能会错过它.- Ferris Bueller
这些天选择变得更加简单.在我的拙见中,Spray赢得了这场战斗.它被整合到Akka中,成为下一个Akka HTTP.我现在一直在使用Spray进行多个项目,并且可以诚实地说它是我遇到的奇妙和最好的支持软件.
这不能回答最初的问题,但至少可以说明为什么Spray在大多数情况下似乎是最佳选择.它非常灵活,无阻塞且非常稳定.它有客户端和服务器端库以及一个很棒的测试工具包.另外,请查看这些统计信息以了解性能:Web框架基准测试
我个人很久以前就开始使用 Spray,并尝试了 Scala 的其他所有方法。虽然 Scala、spray、akka、shapeless 和 scalaz 确实有一定的学习曲线,但一旦你开始深入研究并真正学习如何使用这些技术,它们就很有意义,我立即看到了它们的好处,尤其是对于此类技术我现在正在做的工作。
就我个人而言,我认为没有什么可以真正经得起用于构建服务器、rest api、http 客户端以及您想要的任何其他内容的喷雾。我喜欢 Spray 的原因是它们在构建时就考虑到了 akka。当我第一次开始使用它时,这可能是一个非常早期的项目,但其架构很有意义。这些人知道他们在利用参与者模型的好处并且不进行任何阻塞操作方面正在做什么。
虽然演员可能需要一点时间来适应,但我确实喜欢他们。它们使我的系统非常可扩展且运行成本低廉,因为我不需要像过去那样强大的硬件。另外,spray 具有spray-routing DSL,因此只要遵循规则,制作rest api 就相对简单......不要阻塞。这当然意味着不要引入 apache commons http 客户端来从 api 或 actor 发出客户端请求,因为您将回到阻塞模型。
到目前为止,我对 Spray、Typesafe 和 Akka 非常满意。他们的模型很自然地适合构建非常有弹性的系统,如果发生任何事情并且您采取快速失败的方法,这些系统会自行恢复。我对 Spray 的一大不满(这不是 Spray 的错)是该死的 IDE 对路由 DSL 的支持。我绝对鄙视Eclipse,一直是IDEA用户。当我开始使用 Scala 插件时,一切似乎都很好。然后我的路由 dsl 自然地演变成更大的野兽。IDEA 解析代码的方式让它在遇到任何带有喷雾路由或无形的东西时都会尿裤子。已经到了无法使用的地步(我输入了 2-3 个字母,必须等待 5 分钟才能重新获得控制)。
因此,对于任何喷射路由或繁重的无形代码,我都会使用 ensime、ensime-sbt 和 scala-mode2 启动 emacs。现在,如果我能得到一个具有 astyanax 质量并使用更加非阻塞的架构构建的 Cassandra 库就好了。