0

我正在构建一个 Web 应用程序,我想在其中将代码分发到 UI、业务逻辑和数据库等各个层。这是我想要的功能,可以解释我的使用场景:

  • 实时高性能请求-响应型应用程序
  • 应用程序被划分为不同的层,如 UI、业务逻辑和数据库——每一层都在一组计算机上工作
  • 这些层应支持负载平衡和故障转移功能,最好对其他交互层透明。
  • 未来与各种语言的互操作性将是一个额外的可取特性
  • 这些层将驻留在我的组织内部,即我目前不打算与外部组织服务交互。

我尝试了 RMI,但缺点是 Java 锁定并且不支持负载平衡和故障转移功能。我考虑过 JMS,但意识到即使负载平衡、MOM 的故障转移等功能非常诱人,对我来说,它似乎并不适合实时请求-响应类型的应用程序(如果你认为我错了,请纠正我)。

请向我推荐最适合此用例场景的流行、合适的框架。

更新:
探索 SOA,我遇到了两个突出的选项 SOAP 和 REST。正如我所提到的,我必须在我的应用程序的模块/层之间内部使用的通信方法方面做出选择。在寻找快速请求响应和高可扩展性、负载平衡、故障转移方案时,它们之间是否有明显/流行的选择?我不打算将这篇文章转换为 REST 与 SOAP 的讨论,但如果快速 lite 比较在这种情况下会有所帮助。如果我缺少的 SOA 中有任何第三种选择,我也愿意接受它。来自现实世界部署场景的一些示例也将有所帮助。

4

2 回答 2

2

实时和分布式有点成反比。

是的,基于 JMS 的解决方案更适合异步性,而不适合实时性。

对于您所设想的分布式 SOA 服务(是的 Web 服务)解决方案的那种实现,似乎很合适。服务在负载平衡的集群环境中运行,提供高可用性。取决于你需要多少实时。

也就是说,如果您认为不需要外部交互,那么运行直接部署,将 ui-service-dao/dal 层部署为应用服务器上的一个捆绑包,更加实时。您仍然可以使用支持会话故障转移的集群节点实现负载平衡和故障转移。这可能不提供互操作性,但是当您真正需要它时,您可以为此提供一个包装器。

于 2012-08-29T02:22:06.693 回答
1

让我们深入了解您的架构要求:

  1. 实时高性能请求-响应型应用程序

    • 如果您可能试图实现几乎为零的应用程序延迟,那么您必须缓存Web 层附近的几乎所有内容,例如memcached,并异步延迟或进行更新。
    • 还可以考虑使用 REST,它比 SOAP 需要更少的开销,并且您可以使用 JSON 作为文档格式,它也比 XML 更紧凑,降低了网络吞吐量要求。
  2. 应用程序被划分为不同的层,如 UI、业务逻辑和数据库——每一层都在一个计算机集群上工作:

    • 您使用的层数越多,您的应用程序可能具有的延迟越多,数据库是几乎所有架构中可扩展性最小的项目,那么您必须尽量避免每次请求都命中它,您肯定需要强大的缓存。
  3. 这些层应支持负载平衡和故障转移功能,最好对其他交互层透明:

    • 为了提高可扩展性和故障转移,您必须寻求服务无状态,因为服务器之间的会话状态同步非常昂贵,并且具有粘性会话的负载均衡器在单个服务器崩溃时将成为问题。
    • HTTP 负载平衡器可以非常透明。
  4. 未来与各种语言的互操作性将是一个额外的可取特性

    • SOAP 有更多花哨的功能,但并非所有语言都支持,如果您使用 REST,您可能会在这里更安全。与 SOAP 的 WSDL 相比,REST 接口通常更易于设计并且对特定技术的依赖更少。
  5. 这些层将驻留在我的组织内部,即我目前不打算与外部组织服务交互。

    • 如果您认为您将与服务存储库之外的其他服务进行交互,那么您必须知道,如果您不使用标准,您可能需要一种可以进行消息转换的网关层。
于 2012-08-29T11:34:11.427 回答