Java 用于在SOA环境中实现请求-响应类型应用程序的框架/协议/工具

Java 用于在SOA环境中实现请求-响应类型应用程序的框架/协议/工具,java,web-services,rest,soa,distributed-computing,Java,Web Services,Rest,Soa,Distributed Computing,我正在构建一个web应用程序,希望在其中将代码分发到不同的层,如UI、业务逻辑和数据库。以下是我想要的功能,它们解释了我的使用场景: 实时高性能请求-响应类型应用程序 将应用程序划分为不同的层,如UI、业务逻辑和数据库——每一层都在计算机集群上工作 这些层应该支持负载平衡和故障切换功能,最好对其他交互层透明 未来与各种语言的互操作性将是另一个可取的特性 这些层将驻留在我的组织内部,也就是说,我目前不打算与外部组织服务交互 我尝试了RMI,但缺点是Java锁定,不支持负载平衡和故障转移功能。我

我正在构建一个web应用程序,希望在其中将代码分发到不同的层,如UI、业务逻辑和数据库。以下是我想要的功能,它们解释了我的使用场景:

  • 实时高性能请求-响应类型应用程序
  • 将应用程序划分为不同的层,如UI、业务逻辑和数据库——每一层都在计算机集群上工作
  • 这些层应该支持负载平衡和故障切换功能,最好对其他交互层透明
  • 未来与各种语言的互操作性将是另一个可取的特性
  • 这些层将驻留在我的组织内部,也就是说,我目前不打算与外部组织服务交互
我尝试了RMI,但缺点是Java锁定,不支持负载平衡和故障转移功能。我考虑过JMS,但意识到,尽管负载平衡、MOM故障切换等功能非常诱人,但对我来说,它似乎不适合实时请求-响应类型的应用程序(如果你认为我错了,请纠正我)

请向我推荐最适合这个用例场景的好的、流行的、合适的框架

更新:

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

实时和分布式是成反比的

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

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


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

实时和分布式是成反比的

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

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


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

让我们深入了解您的体系结构需求:

  • 实时高性能请求-响应类型应用程序

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

    • 您使用的层越多,应用程序的延迟可能就越大,数据库几乎是所有体系结构中可伸缩性最低的项目,那么您必须尝试避免为每个请求命中它,您肯定需要一个强大的缓存
  • 各层应支持负载平衡和故障切换功能,最好对其他交互层透明:

    • 为了提高可扩展性和故障切换,您必须寻求解决方案,因为服务器之间的会话状态同步非常昂贵,并且当单个服务器崩溃时,具有粘性会话的负载平衡器将成为一个问题
    • HTTP负载平衡器可以非常透明
  • 未来与各种语言的互操作性将是另一个可取的特性

    • SOAP有更多在所有语言中都不受支持的奇特特性,如果您使用REST,您在这里可能会更安全。REST接口通常比SOAP的WSDL更易于设计,对特定技术的依赖性也更小
  • 这些层将驻留在我的组织内部,也就是说,我目前不打算与外部组织服务交互

    • 如果您认为您将与服务存储库之外的其他服务进行交互,那么您必须知道,如果您不使用标准,您可能需要一种网关层来进行消息转换

  • 让我们深入了解您的体系结构需求:

  • 实时高性能请求-响应类型应用程序

    • 如果你可能正在尝试