1. Consul 的 Raft+Gossip 协议与健康检查机制(TCP/HTTP/Script/TTL)
请说明 Consul 的 Raft 一致性协议与 Gossip 协议的分工,以及健康检查机制(TCP/HTTP/Script/TTL)的实现方式?
- Raft 用于服务数据一致性
- Gossip 用于成员发现与故障检测
- 健康检查类型(TCP/HTTP/Script/TTL)
Consul 采用双协议:Raft 协议用于服务注册数据的强一致性(CP),保证服务目录在集群节点间一致;Gossip 协议(Serf)用于节点成员发现、故障检测与集群信息传播,通过随机节点之间的心跳广播实现快速故障感知。健康检查支持多种类型:TCP 检查(探测 TCP 端口连通性)、HTTP 检查(请求 HTTP 端点判断返回码)、Script 检查(执行本地脚本判断)、TTL 检查(服务主动上报心跳,超时未上报即判定不健康)。检查结果影响服务的可用状态,服务不可用时从服务目录中标记为不健康,注册中心会将其摘除或标记。健康检查由 consul agent 在本地执行,结果汇总到服务目录。
Raft 保证服务数据一致,Gossip 保证故障快速检测,两者互补。健康检查是服务发现"剔除坏实例"的关键机制,TTL 检查适合主动心跳,TCP/HTTP 检查适合被动探测,应根据服务特性选择。