【问题标题】:Architecting RESTful app ... out of ... Java Web app架构 RESTful 应用程序...出... Java Web 应用程序
【发布时间】:2015-01-27 11:02:42
【问题描述】:

我们当前的 Web 应用程序架构包括以下内容:

Java 6、JBOss 5、MySQL 5.6

表示层(ZK 框架)

委托 + 服务 + DAO 层(Spring 和 Hibernate)

打包:包含上述所有层的单个 War 文件

业务需求:

使用 HTML5 和原生 iOS 库为上述 Web 应用程序的几个模块创建移动应用程序。移动应用程序将能够执行 CRUD、下载/上传文件和发送电子邮件。

问题:

我们正在为上述业务需求确定架构。请记住以下属性

  • 数据逻辑共享(使用 Hibernate 在 DAO 层实现)

  • 业务逻辑共享(使用Spring在Service层实现)

  • QoS - 性能、可扩展性

我们的一些想法:

  1. 在 Web 应用程序中创建一个单独的委托层并将其公开为 REST API。底层、服务对象和DAO层可以直接使用。

    • 需要扩展应用程序,以处理 Web 应用程序和移动应用程序的负载!
  2. 为通用功能创建一个通用项目 (Jar),并将其与 2 个不同的项目共享,一个用于 Web 应用程序,另一个用于移动应用程序。

    • Hibernate 是否可以与 2 个应用程序共享同一个数据库,而不会出现任何并发问题?

我非常感谢您对上述内容的任何建议/意见。

谢谢

【问题讨论】:

    标签: java spring hibernate architecture restful-architecture


    【解决方案1】:

    在我看来,您应该考虑使用 MQ 系统(例如 RabbitMQ)并将您的应用分成 3 层:

    1. 前端 - 接受客户端请求(一个用于浏览器,第二个用于移动应用等)并将它们传输到 MQ。
    2. 中级(传输)- MQ 系统。传输消息。
    3. 后端 - 接受来自 MQ 的入站消息,处理请求并返回答案。

    这是您在第二个选项中描述的内容。但我认为最好有中间层(MQ)以避免耦合。

    我认为 Hibernate 需要配置分布式二级缓存(例如 EhCache),以使后端具有可扩展性。
    使用这种架构,您可以通过添加后端服务器并在 MQ 的队列中订阅它来简单地扩展应用程序的吞吐量。

    【讨论】:

    • 非常感谢您的回复,从根本上来说,我明白表示层和服务层之间的解耦需要将业务/服务层提供给不同的前端。但是,我阅读了一些关于 MQ 及其用法的资料,并找到了这篇很好的文章,它解释了 MQ 与 REST。基于这些信息,我倾向于认为在我们的场景中,将中间层实现为 REST API 是合适的。 stackoverflow.com/questions/19246704/…
    • @BAhmed786 选择权在你。感谢您提供有用的链接。
    猜你喜欢
    • 1970-01-01
    • 2015-11-14
    • 2014-07-05
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 2010-12-23
    • 2015-01-04
    相关资源
    最近更新 更多