【问题标题】:Using webservices to connect front-end and back-end, a good idea?使用 webservices 连接前端和后端,好主意吗?
【发布时间】:2011-01-09 03:22:05
【问题描述】:
这个项目在一个 JVM 上运行前端 Web 服务器,在另一个 JVM 上运行后端。为了让 Web 在后端调用任何 biz-logic 方法,它必须通过 Web 服务 (JAX-WS) 进行调用。
我可以理解,对于需要与其他系统集成的应用程序部分,通过使用 web 服务分发服务是一个好主意,但我还没有看到一个系统 每个 biz-logic 调用作为 Web 服务公开。
性能?交易?总的来说是个好主意?
【问题讨论】:
标签:
java
architecture
enterprise
【解决方案1】:
我是 KISS 原则(保持简单愚蠢)的忠实拥护者。在 JVM 之间拆分应用程序并创建 WS 接口层需要有一个令人信服的理由。可能的原因包括需要以不同于业务层的方式扩展表示层。 JVM 调优差异,例如不同的垃圾收集算法。或者需要一个 DMZ。
如果不存在令人信服的理由,那么分离会增加不必要的复杂性,这很可能会导致从开发到运营的麻烦。
将业务逻辑暴露给其他应用程序的需求并不代表在 JVM 之间拆分层的令人信服的理由。业务逻辑仍然可以通过 WS 公开给外部应用程序,而您的表示层物理上驻留在同一个 JVM 中,并通过业务服务的 POJO 实现直接引用业务层。虽然 POJO 实现会有一个 Web 服务包装器,将业务服务公开为 Web 服务。
【解决方案2】:
一般来说,如果您的“后端”(我称它们为“服务”)打算被其他应用程序重用,那么这种方法是一个好主意。
请注意,Web 服务只是系统之间的实际传输/消息接口。这里还有很多其他选项可以处理两者之间的接口——Java RMI、Spring 远程处理、REST 等。设计良好的服务解决方案将不知道您使用哪种消息传递技术(并且应该能够支持多个) .
【解决方案3】:
您拆分应用程序的想法并不少见。当您的大部分服务都打算被重用时,最好将它们部署为单独的应用程序并将其解耦,以便其他系统可以轻松访问它们。它肯定会对性能产生一些影响,但从技术上讲,它不应该对事务产生任何影响(除非您需要在可以使用 WS-Reliability 的服务调用之间进行事务)。