--- tags: [test/review, architecture, arch/microservice, service-discovery] create time: 2026-08-09 12:00 --- # 服务注册与发现 — 测试题 ## 概述 本测试覆盖服务注册/注销/续约流程、Eureka/AP 取向、Nacos CP/AP 可切换、Consul 特性以及 CAP 理论在注册中心中的体现。共 10 道题目(6 选择 + 3 填空 + 1 简答)。 --- ## 一、选择题(6道,由浅入深) > **难度阶梯**: Q1-Q2 基础概念 → Q3-Q4 核心原理 → Q5-Q6 深入应用/边界场景 ### Q1(基础)— 考察定义层面 服务注册的标准三步走流程是: A. 注册 → 查询 → 注销 B. 注册 → 续约(心跳)→ 注销 C. 发现 → 健康检查 → 更新 D. 心跳 → 续约 → 下线 ### Q2(基础)→ Eureka 的自我保护机制在什么条件下会被触发? A. 15 分钟内超过 50% 实例未发送心跳 B. 15 分钟内超过 85% 实例未发送心跳 C. 所有实例同时宕机 D. 注册中心 CPU 使用率超过 90% ### Q3(进阶)— 核心原理 Nacos 在同一套代码中为什么能既支持 AP 又支持 CP 模式? A. 通过动态切换一致性协议实现,运行时修改配置即可 B. 两种模式使用不同的数据存储路径和服务类型 C. Nacos 有两个独立的二进制进程分别处理 AP 和 CP D. 基于 K8s Namespace 做逻辑隔离 ### Q4(进阶)— 比较/辨析 Consul 的三个独特优势不包括以下哪一项? A. Serf Gossip 协议的成员管理 B. 丰富的健康检查方式(TCP/HTTP/script/Docker/TTL) C. 内嵌 Raft 一致性的 KV 存储 D. 原生支持多级缓存(本地 + 远程) ### Q5(深入)— 场景推理 某金融系统对数据一致性要求极高,在选型服务注册中心时最应该考虑哪个因素? A. 需要高可用容忍短暂不一致 → 选 Eureka B. 需要强一致性 → 选 Nacos CP 模式或 Consul TCP 接口 C. DNS 接口最快 → 选 Consul DNS D. 客户端缓存最可靠 → 选 Eureka 并关闭自我保护 ### Q6(深入)— 源码级/边界场景 PACELC 理论对 CAP 做了哪些补充? A. PACELC 指出无分区时也需权衡延迟与一致性 B. PACELC 指出分区恢复后需先进行数据同步再服务 C. PACELC 引入了第三维度——性能,CAP 只有两个维度 D. PACELC 证明 CAP 定理在分布式系统中是错误的 --- ## 二、填空题(3道) ### F1 — 填空1 Eureka 的消费者会**缓存**服务列表,默认每 _____ 秒刷新一次。这样即使注册中心完全不可用,消费方依然能根据本地缓存继续通信。 > **提示**: 回顾原文 Eureka 小节中关于客户端缓存的描述。 ### F2 — 填空2 Consul 的 DNS 接口因为是 _____ 模式的——直接指向随机节点读取本地内存缓存,不经过 Raft 日志——所以速度极快但可能读到旧数据。 > **提示**: 回想 CAP/PACELC 表格中 Consul DNS 的行。 ### F3 — 填空3 Nacos 通过 _____ 实现环境隔离(dev/test/prod),每个命名空间有独立的服务和配置视图。底层基于 PostgreSQL 存储元数据。 > **提示**: Nacos 的环境隔离术语来自 Kubernetes。 --- ## 三、简答题(1道) ### S1 面试官问你:"Eureka 的自我保护机制在生产环境中什么时候该关?"请给出你的完整回答,包括: - 自我保护机制的作用是什么 - 关了会有什么风险 - 什么场景下可以关 - 如果不关应该如何监控 > **答题框架提示**: > 1. 解释机制的原理和风险 > 2. 分场景讨论 > 3. 给出具体的监控建议 --- ## 参考答案与解析 ### 选择题答案 | 题号 | 正确答案 | 解析 | |------|---------|------| | Q1 | B | 标准三步:① 注册服务(POST /register);② 心跳续约(维持 lastDirtyTimestamp);③ 主动注销(DELETE /deregister)。故障场景下感知延迟通常为续约超时周期(30~90 秒)。 | | Q2 | B | 15 分钟内超过 85% 实例未发心跳触发保护窗口锁定,不再剔除任何实例。宁可多调几次失败也不主动剔。 | | Q3 | B | 不同模式使用不同的存储路径和服务类型:CP 用 `nacos.v1.auth.user`(Raft),AP 用 `nacos.v1.instance`(Distro)。不是运行时切换而是物理隔离的路径。 | | Q4 | D | Consul 的优势是 Serf Gossip、丰富健康检查、KV 存储。多级缓存不是 Consul 的功能,那是 Redis/Caffeine 层的职责。 | | Q5 | B | 金融系统需要强一致性,应选 Nacos CP 模式(Raft)或 Consul TCP 接口(Raft Leader)。Eureka 最终一致不适合。DNS 可能 stale。关闭自我保护会增加雪崩风险。 | | Q6 | A | PACELC = PA(Partition tolerant, choose Availability)+ EC(Else, choose Between Consistency and Latency)。CAP 只讨论分区场景,PACELC 补充了无分区时的 L/C 权衡。 | ### 填空题答案 | 题号 | 答案 | 解析 | |------|------|------| | F1 | `30` | 消费者每 30 秒刷新一次本地缓存。结合 Eureka 的续约超时周期(通常 30~90 秒),故障检测延迟约在一个续约周期左右。 | | F2 | `AP` | Consul DNS API 直接读取随机节点的本地内存缓存,不走 Raft 日志,因此速度快但读到的可能是 stale data。如果需要强一致则走 TCP 端口。 | | F3 | `namespace` | Nacos 的 namespace 相当于 K8s 的 Namespace,实现 dev/test/prod 的物理隔离。每个 namespace 独立存储服务列表和配置数据。 | ### 简答题参考答案 S1:**参考答案要点**: 1. **机制作用**:自我保护防止因网络抖动大量实例被误判为宕机而批量剔除,避免雪崩式下线。 2. **关了的风险**:一旦关闭,心跳稍微延迟就会被剔除,一批实例被认为故障全部移除,调用方拿不到任何健康实例。 3. **适用场景**:金融类对一致性要求高的场景可以考虑关闭;普通互联网业务不建议关,误判的危害大于不调用的危害。 4. **监控建议**:生产环境必须监控 `eureka.server.selfPreservationThreshold` 指标,当该阈值被触发时告警通知运维介入检查。 **评分标准**:答出任意 2 个要点即可得满分;完全正确需覆盖全部要点。 ## 关联笔记 - [[负载均衡算法]] - [[限流熔断降级]] - [[配置中心设计]]