【问题标题】:How to temporarily fail/disable REST APIs at runtime?如何在运行时暂时失败/禁用 REST API?
【发布时间】:2020-08-14 10:11:00
【问题描述】:

我正在开发一个 REST 服务,它主要提供 2 个 API:PUT 请求和 GET 请求。 在灾难恢复期间,服务将处于无法接受新的 PUT 请求但仍能够为 GET 请求提供响应的状态。我正在寻找如何在运行时暂时禁用/失败传入的 PUT API 调用(通过返回 500 或 200 以外的任何值),同时服务正在积极进行灾难恢复。该服务在负载均衡器后面的一组主机上运行,​​并启用了自动缩放。需要在运行该服务的所有主机上临时禁用 PUT API 请求。

我看到这篇关于在运行时更新配置的帖子:java update properties file run time,但看起来这需要手动更新每个主机上的属性文件,如果我们有大量主机正在运行,这可能不是最佳选择服务。

想知道是否有其他方法可以实现这一目标。提前致谢!

【问题讨论】:

  • 你能在负载均衡器中阻止 PUT 请求吗?

标签: java rest properties load-balancing apache-commons-config


【解决方案1】:

大多数情况下,负载平衡器放置在防火墙后面。如果您有权访问防火墙,则可以在开始灾难恢复之前设置任务,以便在防火墙中设置规则并阻止使用防火墙与目标服务或方法的任何连接。 DR完成后,设置删除规则并允许连接的任务。

【讨论】:

    【解决方案2】:

    这是 Redis 或任何其他消息代理的经典用例。

    因此,您可以在 Redis 服务中创建通道。如果您的 API 进入灾难恢复,某些东西会发布一条消息。 API 的所有实例都订阅该频道并接收消息,并将其缓存在某处。在路由中添加一个中间件,检查每个请求的缓存值,如果应用程序处于灾难恢复状态,则返回错误。然后,当您的应用程序不再处于灾难恢复状态时,向 Redis 通道发送一条消息,导致所有服务器从缓存中清除该值。

    这种解决方案快速、干净、简单且可靠。更改应用程序配置并不是您想在运行时尝试做的事情。配置是为了稳定。这不是状态。

    【讨论】:

      猜你喜欢
      • 2012-12-25
      • 1970-01-01
      • 1970-01-01
      • 2017-10-26
      • 2015-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-03
      相关资源
      最近更新 更多