在多个实例上处理 Web 服务 运行 的故障

Dealing with failures of a web service running on multiple instances

我正在构建一个将调用具有 2 个相同实例的 Web 服务的应用程序,每个实例 运行 在不同的服务器上,具有自己的 IP。

应用程序可以随时调用任何服务实例,但有时可能难以从其中一个实例获得响应(因为网络故障或实例有问题)。

让应用自动停止使用有问题的实例的推荐方法是什么?

实例再次上线后如何恢复使用?

是否有标准库或工具来帮助这种情况?

使用负载均衡器。

您的应用程序必须连接到 LB 而不是直接连接到网络服务器。 LB 维护它们配置的每个服务器的状态(通过超时或显式 http 状态调用)。它们会自动禁用来自断开连接的服务器的流量,并在实例恢复后启用它。

稍后您可以根据您的要求(手动或自动缩放)添加或删除实例,而无需对您的应用程序进行任何更改。

HAProxy 和 Nginx 被广泛用于互联网规模的负载均衡。云提供商也将此作为一项服务提供,如果您在云上,则可以使用它们(例如 AWS 具有弹性负载平衡,Google 云具有负载平衡)。