标准答案

  1. TCP keepalive 由操作系统在长时间空闲后探测连接是否仍存在,适合发现断网、NAT 清理或对端异常退出后的死连接。
  2. 应用心跳由协议或业务层主动发送,能够携带会话、订阅、版本或消费进度等语义,适合 WebSocket、消息连接和长连接服务。
  3. 负载均衡健康检查面向实例路由,通常区分存活和就绪:存活失败可能需要重启,就绪失败则应先停止接流量。
  4. 三者的超时和频率必须协调。过于频繁会增加无效流量,过于宽松会延长故障发现时间。
  5. 健康检查应尽量回答当前实例能否安全承接请求,不能把所有依赖都做成昂贵的同步探测。

题目解析

TCP 连接存在不等于业务可用。例如应用线程池耗尽时,内核仍可能响应 keepalive;反过来,应用心跳成功也不能替代负载均衡的实例摘除机制。

健康检查如果依赖数据库、第三方服务和重型计算,故障时可能形成放大流量或误杀健康实例。

常见误区

  • 认为打开 TCP keepalive 后就不需要应用层心跳。
  • 让健康检查接口执行完整业务流程或大量依赖查询。
  • 只设置一个存活检查,导致还没准备好的实例提前接入流量。

作者信息