Consul面试题:标准回答与原理跳转
本页只保留面试回答与精确原理入口,详细流程、Demo和Runbook见Consul主线。
高频问题
| 问题 | 标准回答 | 原理页 |
|---|---|---|
| Consul是什么 | Consul是服务网络控制面,提供Agent、Catalog、Health、DNS/HTTP发现、KV、Session、多DC和Connect Service Mesh。 | 定位、架构 |
| Client Agent和Server区别 | Client靠近业务服务,负责本地注册、检查、DNS/API和转发;Server参与Raft并保存Catalog、KV、ACL、Session等一致状态。 | Agent架构 |
| Gossip和Raft区别 | LAN/WAN Gossip最终传播成员和故障信息;Raft在单DC Server集群中多数派提交Catalog、KV等一致状态。members Alive不代表Raft有Leader。 | Gossip与Raft、Raft |
| SWIM怎样检测故障 | Agent直接Ping,失败后请求其他成员间接Ping,仍失败先进入Suspect并传播,怀疑窗口内可用incarnation反驳,最后才判Dead,降低单次丢包误判。 | SWIM与Serf |
| 服务注册怎么走 | Provider向本地Agent注册Service和Check,Agent同步到Server,Leader经Raft提交Catalog,Check状态更新后DNS/Health API才可返回健康实例。 | 注册流程 |
| Catalog和Health API区别 | Catalog返回已注册实例,不等于健康;Health API同时返回Checks并可passing=true过滤,Agent Services只表示本机注册。 | Catalog与Health |
| TTL Check和Session TTL一样吗 | 不一样。TTL Check要求应用定期更新健康状态;Session将Node、Checks、TTL和KV所有权组合,用于锁/选主,失效行为可release或delete。 | TTL Check、Session |
| DNS下线后为什么仍调用旧实例 | Consul Agent、递归DNS、OS、JVM和连接池都有缓存/长连接,Health变化不会瞬间清除所有层。 | DNS缓存、陈旧地址Runbook |
| Blocking Query怎么工作 | 首次查询得到X-Consul-Index=R,下一次带index=R和wait;状态不变时Server挂起,变化或超时后返回新快照和Index。 | Blocking Query |
| KV CAS怎么做 | cas=0表示Key不存在才创建,cas=N表示ModifyIndex等于N才更新;false是明确冲突,应重读合并。 | KV CAS |
| Session锁怎么实现 | 创建Session后PUT KV并带acquire=sessionId,成功时KV绑定Session并推进LockIndex;失败者用Blocking Query等待,释放用release或Session失效。 | 锁流程 |
| Lock Delay能代替Fencing吗 | 不能。Lock Delay只延迟新Session获得同Key,旧客户端之后仍可能恢复写外部资源;数据库必须比较单调LockIndex等Token。 | Lock Delay、Fencing |
| Consul多DC是一个Raft集群吗 | 不是。每个DC有独立Server Raft和Catalog,传统模式通过WAN Federation互联,较新版本可用Peering;跨DC查询和数据面仍受网络分区影响。 | 多数据中心 |
| Consul Connect是什么 | Connect通过服务身份、CA证书、sidecar/Envoy、mTLS和Intentions实现Service Mesh控制面与数据面。 | Connect、边界 |
| 无Leader怎么排查 | members只看Gossip;还要查Raft peers、Quorum、8300网络、RPC TLS、Server磁盘、CPU/GC和是否同时重启多数Server。 | 无Leader Runbook |
项目回答模板
我们把Consul用于VM服务发现和健康治理。Provider向本地Agent注册Service和HTTP/gRPC Check,Consumer通过Health API Blocking Query维护不可变地址快照,记录X-Consul-Index避免固定轮询。LAN Gossip负责成员探测,Server Raft负责Catalog一致提交。DNS场景治理JVM缓存和长连接。低频选主使用Session/KV acquire,但外部任务表校验LockIndex Fencing并保持幂等。生产启用TLS、ACL默认拒绝和Gossip加密,监控Raft Leader、Gossip Flap、Check状态、Blocking Query和证书轮换。
本章小结
Consul面试应沿“Agent → Gossip → Raft → Catalog/Health → DNS/Blocking Query → Session/Lock → Fencing → Multi-DC → Connect”回答,并说明每层失败窗口。
