如何在运行时暂时失败/禁用REST API?

问题描述

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

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

想知道是否还有其他方法可以实现这一目标。预先感谢!

解决方法

通常,Load-Balancer放在防火墙后面。如果可以访问防火墙,则可以在开始灾难恢复之前设置任务,以在防火墙中设置规则并使用防火墙阻止与目标服务或方法的任何连接。完成灾难恢复后,设置任务以删除规则并允许连接。

,

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

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

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