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

时间:2012-08-28 14:45:14

标签: java web-services rest soa distributed-computing

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

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

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

请建议我在这个用例场景中最适合的流行的,合适的框架。

更新
探索SOA,我遇到了两个突出的选项SOAP和REST。正如我所提到的,我必须选择一种通信方法,以便在我的应用程序中的模块/层之间进行内部使用。在寻找快速请求响应和高可扩展性,负载平衡,故障转移方案时,是否有明显/受欢迎的选择?我不打算将此帖子转换为REST与SOAP讨论,但如果快速精简比较可以在这种情况下提供帮助。如果在SOA中我缺少任何第三种替代方案,我也是开放的。实际部署方案中的一些示例也会有所帮助。

2 个答案:

答案 0 :(得分:2)

实时和分布有点成反比。

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

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

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

答案 1 :(得分:1)

让我们深入了解建筑要求:

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

    • 如果你可能试图将应用程序延迟几乎调到零,那么你必须缓存 amost所有靠近网络层的内容,例如 memcached ,并推迟或异步更新
    • 还考虑使用REST,它比SOAP要求更少的开销,并且您可以使用JSON作为文档格式,这也比XML更紧凑,从而降低了网络吞吐量要求。
  2. 应用程序分为各种层,如UI,业务逻辑和数据库 - 每个层在一组计算机上工作:

    • 您使用的层越多,应用程序可能具有的延迟越多,数据库是几乎每个架构中可扩展性最低的项,那么您必须尝试避免针对每个请求点击它< / strong>,你肯定需要一个强大的缓存。
  3. 这些层应该支持负载平衡和故障转移功能,最好对其他交互层透明:

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

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

    • 如果您认为自己将与服务存储库之外的其他服务进行交互,则必须知道如果不使用标准,则可能需要一种可以进行邮件转换的网关层。