接口高可用设计 - 降级
系列 - 接口高可用设计系列
目录
警告
本文最后更新于 2023-07-11,文中内容可能已过时。
介绍
降级是为了保护系统的一种手段。在系统负载过高或者遇到故障的情况下,通过降低部分服务质量或者直接停用某些服务,来保证核心服务的正常运行。
基本原理:
降级策略通常在系统负载过高或者遇到无法快速解决的故障时启用,其目的是保护系统的核心功能,确保其继续提供服务,而非全部瘫痪。在某些情况下,为了降低系统负载,会直接停用或限制某些接口或者url的功能。对于这部分收到的请求,系统会直接返回一个错误代码,如HTTP 503,这表示服务暂时不可用。这种方式虽然会对用户体验产生一些负面影响,但是比系统全面崩溃要好得多。
应用场景:
- 故障应急:在发生故障时,系统可能无法提供所有服务。这时,降级策略可以被用来停用部分非核心业务,保持核心业务的稳定运行。
- 高负载应对:在系统负载过高时,为了避免系统崩溃,可以暂时停用一些非核心业务,将资源集中在核心业务上,以保持系统的稳定运行。
举例来说,日志服务和版本升级服务通常被认为是非核心业务。在出现系统故障或者面临高负载的情况时,我们可以考虑暂时停用这些服务,减轻系统的负载,让系统有更多的资源去处理核心业务,如用户查询、交易处理等。
设计要点
- 独立的降级操作:降级操作通常需要能够独立于系统的主要功能进行,以防止在系统出现问题时影响降级的执行。这可以是通过设计独立的降级系统来实现,也可以是在原有系统中嵌入独立的降级功能。这样可以在不影响系统主要功能的前提下,灵活、及时地进行降级操作。
- 人工判断和执行,不过度依赖自动化工具:虽然自动化操作可以提高效率,但在进行降级决策时,人工的判断和执行通常更为可靠。这是因为降级决策通常涉及到哪些业务是核心业务,哪些业务可以降级,这需要根据具体情况做出合理的决策,而这些决策通常超出了自动化操作的能力。而且,在执行降级操作时,人工操作可以更为细致和准确,避免由于自动化操作的错误导致降级失败。
- 可控性:降级策略应易于操作,对业务影响可控。在设计时应尽可能减少降级对用户体验和业务流程的影响。
- 可逆性:降级操作完成后,系统应能在恢复正常后,迅速恢复到降级前的状态。
- 避免频繁降级:优雅降级是一种应对系统过载或故障的临时手段,它不应该被频繁触发。如果系统经常需要降级,可能表明存在系统设计或容量规划的问题。我们需要仔细分析并解决这些问题,而不是依赖降级来维持系统运行。
- 演练降级机制:为了确保在真正需要降级的时候,降级机制可以正常运行,我们需要定期对降级机制进行演练。演练可以帮助我们发现并解决降级机制的问题,也可以让团队成员熟悉降级操作,提高在真正的危机时的应对能力。
总结
降级实际上是一种提供有损服务的方式,通过减少工作量和丢弃不必要的请求,可以有效地保护系统在高负载或者故障情况下的稳定运行。