【问题标题】:Bus and REST services with fast response for decoupling?快速响应的总线和 REST 服务解耦?
【发布时间】:2012-02-28 14:48:09
【问题描述】:

拥有多个公开 REST API 的后端模块,其中一个模块需要通过其 API 调用其他模块并立即响应。

一种解决方案是直接从这个“顶级”模块调用 REST API。问题在于它会产生耦合,本身不支持扩展或故障转移。

一种总线(JMS、ESB)允许通过避免需要模块已知的端点来解耦模块。他们只与公交车“交谈”。

您将使用什么来通过总线实现快速响应(另一个限制是您没有多播,因为它可以部署在云中)?

仍然依赖 REST api 是否合理或者 JMS 侦听器会更好? 我想到了 JMS、Camel、ESB。您知道使用这种架构的公司吗?

ps:例如,一个模块可能是在 tomcat 实例上运行的 java 战争。

【问题讨论】:

    标签: java jakarta-ee architecture soa decoupling


    【解决方案1】:

    如果您的顶级模块“知道”调用其他模块,那么是的,您有一个耦合,这可能是不可取的。相反,如果您的顶级模块通过链接、表单和/或从中间模块的响应重定向到其他模块,那么您将拥有与 JMS 解决方案相同数量的耦合。

    您需要可扩展性和故障转移(不是之前)时,添加缓存反向代理,例如 F5Varnish。这将比任何基于 JMS 的解决方案更具可扩展性和弹性。

    更新

    在您想要聚合和/或转换来自其他模块的响应的情况下,您只需创建一个composed service。顶部模块调用中间模块,中间模块对后端模块进行一次或多次调用,组合结果并发送适当的响应。与基于 JMS 的定制解决方案相比,在每个跃点之间使用 HTTP 缓存(即 Top -> Varnish -> Middle -> Varnish -> Backend)是一种更简单、更有效的数据缓存方式。

    【讨论】:

    • 感谢这个有趣的答案。有时,尽管您希望聚合信息以“更好的形式”呈现它并为您的 Web 应用程序或任何客户端缓存它。在这种情况下,模块需要从其他人那里获取信息。我也对这个用例感兴趣。
    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-13
    • 2011-09-10
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    相关资源
    最近更新 更多