我正在开发一个网关,它将位于移动 Web 应用程序和后端系统上的 Web 服务之间。此网关的目的是保护 Web 应用程序免受后端 Web 服务 api 的更改、引入并发、转换消息、缓冲等。
我提出的架构如下:
- 使用 PhoneGap 的平台独立移动 Web 应用程序(完成)
- Gateway 是一个使用 Scala 进行业务逻辑和 ZeroMQ 进行消息传递的 Web 服务(新)
- 后端是现有的 Web 服务(现有)
网关纯粹负责消息的传递、翻译、聚合等,此时不需要保持状态或进行用户身份验证——它只负责作为一个单一的接口,一方面知道如何与移动应用程序通信以及另一侧的一项或多项服务。
我强烈考虑使用 Scala 作为开发语言,因为它似乎非常适合这种类型的应用程序,但是对于这样的 Scala 服务,正确的架构是什么?我查看了诸如 Lift 和 Play 之类的框架,还考虑过做一个简单的基于“java”的 Web 服务,并且只使用 Scala 来实现我的业务逻辑。我坚信让事情尽可能简单。我对可能永远不会使用的框架中的复杂设置和数千行死代码保持警惕。另一方面,将自己限制在“扮演自己的角色”的解决方案中并创建大量工作并且必须维护可能已成为现有解决方案一部分的代码也不理想。
需要考虑的一些事项:我是架构师和开发人员,但我对 Scala 的了解仅限于“Scala 编程,第二版”的前半部分。另外,我的时间非常有限。不过,我想在第一时间把这件事做好。
我希望一些聪明的绅士或淑女能给我提供这种类型的解决方案的见解,也许一两个链接可以快速开始。我真的需要快速前进,但希望其他专业人士的经验或见解可以帮助我避免一路走来的陷阱。对开发环境和工具的任何见解也会有所帮助。我必须在 Mac 上开发(公司规则),但将部署在 Ubuntu 服务器上。我目前在安装 Eclipse 或 Idea 作为 IDE 和用于构建的 scala 编译器或 sbt 之间进行权衡。
更新
感谢以下所有可能的答案。我查看了每一个建议,它们都有优点。现在的问题是押在正确的马上。Spray 可能是解决问题的最简单方法,但我也找到了 Finagle。它似乎是我问题的绝佳解决方案。我有点担心它是建立在 Netty 而不是 Akka 之上的。有没有人看到任何问题。我希望让我的解决方案尽可能纯粹地使用 Scala,但 Finagle 似乎是其中最成熟的。有任何想法吗?