我正在开发一个系统,该系统具有可以操作它的 RESTful Web 服务(该服务允许所有 CURD 操作),以及一个显示系统数据的 Web 客户端(大部分客户端是用 jQuery 编写的)。在标准操作场景中,我的系统有一个主服务器和至少一个备份服务器,因此至少有两个 RESTful Web 服务。
所以我的问题是在我的主服务器崩溃的情况下,我怎样才能让一个正在查看主服务器的客户端现在正在查看备份服务器而无需任何用户操作?
我正在开发一个系统,该系统具有可以操作它的 RESTful Web 服务(该服务允许所有 CURD 操作),以及一个显示系统数据的 Web 客户端(大部分客户端是用 jQuery 编写的)。在标准操作场景中,我的系统有一个主服务器和至少一个备份服务器,因此至少有两个 RESTful Web 服务。
所以我的问题是在我的主服务器崩溃的情况下,我怎样才能让一个正在查看主服务器的客户端现在正在查看备份服务器而无需任何用户操作?
您最好的选择是让客户端完全不做任何事情来处理服务器故障。这不是客户的责任,也不应该是。代理服务器和负载平衡器等服务器端技术最适合处理服务器故障。
最常见的方法是摆脱“一个主服务器”的思维方式,而是创建一个服务器集群,每个服务器都可以处理您的任何 REST 请求。如果您的 REST 请求是无状态的(它们应该是)并且可以路由到集群中的任意服务器,那么可以通过在集群前面使用负载均衡器来处理服务器的故障。
如果负载均衡器检测到服务器已死机,它只会将其拉出轮换状态。此模型还有助于扩展性,因为您可以通过简单地在该层中启动更多服务器并让它们在负载均衡器中自我注册来扩展您的 REST 服务器层。
您还可以使用 DNS 使客户端免受服务器故障的影响。只需将 DNS 记录点更改为当前活动的服务器,并在主服务器出现故障时对其进行修改。然而,TTL必须非常低,以允许该技术在任何合理的时间内工作。DNS 更适合用于处理完整的数据中心故障而不是节点故障,但它是一种选择,尽管它相当严重。