主动式还是被动式健康检查:哪种更适合您?

NGINX | 2023年4月11日

正如定期体检是保持身体健康的重要一环,定期检查应用的运行状况对于确保性能可靠也至关重要。在对流量进行反向代理和负载均衡时,NGINX使用被动健康检查,自动将流量从不响应请求的服务器转移出去,帮助应用用户免受服务中断的影响。NGINX Plus还提供主动健康检查,通过发送专用探测请求,甚至可以在服务器无法处理请求之前检测到其运行状况异常。哪种健康检查更适合您的应用?本文将提供相关信息,帮助您做出决定。

什么是健康检查?

从最基本的意义上说,健康检查是一种用于确定服务器能否处理流量的方法。NGINX使用健康检查来监控由其反向代理或进行流量负载均衡的服务器,即所谓的上游服务器。

被动健康检查

被动健康检查在NGINX Open Source和NGINX Plus中均可用,其工作原理是观察服务器在处理连接和流量时的行为。它们有助于避免用户因服务器超时而遭遇服务中断,因为当NGINX发现某台服务器运行状况不佳时,会立即将请求转发到其他服务器,停止向该服务器发送请求,并将后续请求分配给上游组中其余运行状况良好的服务器。

请注意,只有当上游组中定义了多个成员时,被动健康检查才有效。如果仅定义了一台上游服务器,则该服务器永远不会被标记为不可用;当其运行状况不佳时,用户将遇到服务中断。

被动健康检查的工作原理

下面详细介绍被动健康检查的工作原理。如果对此不感兴趣,可直接跳至“主动健康检查”。

默认情况下,如果NGINX在与TCP/UDP(stream)服务器建立连接时遇到一次错误或超时,即会将该服务器视为运行状况不佳。

如果在与HTTP服务器建立连接、向其传递请求或读取响应标头时发生一次错误或超时(完全未收到响应也属于此类错误),NGINX会将该HTTP服务器视为不健康。可以使用proxy_next_upstream指令自定义HTTP代理的这些条件;以下协议也有对应的指令:FastCGI、gRPC、memcached、SCGI、TCP/UDP和uwsgi。

对于HTTP和TCP/UDP,NGINX默认等待10秒,然后再次尝试连接到运行状况不佳的服务器并向其发送请求。可以使用fail_timeout参数调整server[HTTP][Stream]指令中的这一时长。

可以使用max_fails参数,提高NGINX将服务器视为不健康状态所需发生的错误或超时次数,该参数属于server指令。在这种情况下,fail_timeout参数用于设置指定次数的错误或超时必须发生的时间段,以及NGINX将服务器标记为不健康状态后,等待多长时间再重试该服务器。

主动健康检查

主动健康检查是NGINX Plus独有的功能,通过定期向应用端点发送特殊请求,确认端点是否正常响应。主动健康检查与被动健康检查相互独立,是后者之外的补充。例如,NGINX Plus可能会定期向应用的Web服务器发送HTTP请求,确保服务器返回有效的响应代码和正确的内容。主动健康检查可以持续监控特定应用组件和进程的运行状况。它可以直接衡量应用可用性,但衡量结果取决于指定的健康检查能否代表应用的整体运行状况。

您可以自定义主动健康检查的多个方面;请参阅《主动健康检查用例》。

显示NGINX Open Source和NGINX Plus用于被动和主动健康检查的流量类型示意图

被动健康检查的使用场景

被动健康检查是必不可少的基础措施。对于应用开发、DevOps、DevSecOps和平台运维团队而言,将被动健康检查纳入生产基础设施监控方案是一项通行做法。默认情况下,NGINX会对负载均衡流量执行被动健康检查,包括HTTP、TCP和UDP配置。

被动健康检查的优势包括:

  • NGINX Open Source中提供
  • 默认对以下配置块中包含的服务器启用:upstream{} configuration block
  • 不会给上游服务器增加额外负载
  • 可配置指定时间段内的最少失败次数,具体说明请参阅被动健康检查的工作原理
  • 可配置的慢启动(NGINX Plus专属功能):当服务器恢复正常运行时,NGINX Plus会逐步增加转发到该服务器的流量,使其有时间完成“预热”

NGINX Open Source的优势包括零成本、可配置性,以及丰富的第三方模块库。由于源代码可用,开发人员可以修改和扩展其功能,以满足特定需求。

对于许多应用(及其开发者),被动健康检查已足够。例如,对于不直接面向客户且仅执行较小任务的微服务,主动健康检查可能没有必要。同样,如果应用可通过缓存降低出现延迟问题的可能性,或由内容分发网络(CDN)接管部分应用任务,也可能不需要主动健康检查。总而言之,以下情况更适合仅使用被动健康检查:

  • 监控HTTP流量
  • 将基础设施与应用分开监控
  • 监控可容忍延迟的应用
  • 监控对高性能要求不高的内部应用

主动健康检查的使用场景

对于关键任务型应用,主动健康检查通常至关重要,因为一旦出现问题,客户和关键流程会直接受到影响。对于此类应用,必须基本按照客户或应用使用者的实际使用方式进行测试,而这需要主动健康检查。主动健康检查类似于New Relic和AppDynamics等应用性能监控工具,后者使用带外检查来测量应用延迟和响应。对于主动健康检查,NGINX Plus提供了NGINX Open Source不具备的多项特性和功能:

  • 用于检查应用可用性的带外健康检查
  • 测试已配置的端点并检查是否返回特定响应
  • 测试与处理实际应用流量的端口不同的其他端口
  • 为运行状况检查保持HTTP连接,避免每次检查都建立新连接
  • 更精细地控制失败和通过条件
  • 可选择在任何新添加的服务器接收实际应用流量之前对其进行测试

借助主动健康检查,开发人员可以将NGINX Plus配置为自动检测后端服务器何时停机或出现问题,并将流量路由到健康的服务器,直至问题得到解决。主动健康检查具有更高的可配置性,因而可以执行更复杂的健康检查,并可能在应用问题影响实际用户之前将其发现。这有助于最大限度地缩短停机时间,并避免用户访问应用时发生中断。

如何配置健康检查

被动健康检查默认启用,但您可以自定义检查频率,以及服务被标记为不健康之前允许的失败次数,具体说明请参阅“被动健康检查的工作原理”。有关被动和主动健康检查的完整配置说明,请参阅相关文档:

结论:选择符合应用要求的健康检查

健康检查是确保任何生产应用顺畅运行并及时响应的重要环节。它们是及早发现问题和识别不断增加的延迟来源、避免最终用户受到影响的有效方式。对于许多应用,被动健康检查已足够。

对于更关键的应用,如果需要直接洞察用户层面的应用行为,主动健康检查更为合适。NGINX Open Source可免费使用,并提供可配置的被动健康检查。NGINX Plus提供高级主动健康检查功能和商业支持。

想试用NGINX Plus的主动健康检查功能?立即开始30天免费试用,或联系我们,讨论您的用例。


分享

相关博客文章

NGINX Plus R26 正式发布
NGINX | 2022/02/15

NGINX Plus R26 正式发布

NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
NGINX | 2022/02/10

使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击

gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
NGINX | 2021/09/13

Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划

了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。

NGINX Plus R19 正式发布
NGINX | 2019/09/03

NGINX Plus R19 正式发布

NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。

NGINX现已正式加入F5
NGINX | 2019/05/09

NGINX现已正式加入F5

NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。

使用NGINX和NGINX Plus实现高性能缓存
NGINX | 2016/08/24

使用NGINX和NGINX Plus实现高性能缓存

我将介绍NGINX在内容缓存和性能方面的工作原理,并分享一些控制NGINX内容缓存方式的技巧。