Files
examination/topics/interview-prep/distributed-microservice/short_answer.json
T
wonder 0f68a64829
Deploy Examination / deploy (push) Successful in 10s
feat: add interview-prep topic group with 250 questions (6 subtopics, 5 question types)
Subtopics:
- distributed-microservice: 45 questions (分布式微服务架构)
- message-queue: 45 questions (消息队列)
- k8s-observability: 45 questions (K8s与可观测性)
- go-java-concurrency: 45 questions (Go/Java并发模型)
- database-advanced: 35 questions (数据库进阶)
- ai-engineering: 35 questions (AI工程实践)

Question types: single_choice, true_false, fill_blank, short_answer, code_reading
2026-09-09 16:36:27 +08:00

156 lines
17 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"topic": "distributed-microservice",
"type": "short_answer",
"schema_version": "1.0.0",
"generated": "2026-09-09T00:00:00+08:00",
"questions": [
{
"id": "sa-001",
"type": "short_answer",
"difficulty": 3,
"tags": [
"microservice",
"service-discovery"
],
"question": "请对比 Consul、Nacos、Etcd 和 ZooKeeper 四种服务注册与发现工具,从 CAP 定理的视角分析它们的一致性模型差异,并说明各自的健康检查机制有何不同。",
"answer": "从 CAP 定理角度:\n1. ZooKeeper 是 CP 系统,基于 ZAB 协议保证强一致性,任何写操作需要过半节点确认(Leader 选举期间不可用),在网络分区时牺牲可用性。\n2. Consul 是 CP 系统,基于 Raft 协议,强一致性写入需 Leader 确认,但支持多数据中心。\n3. Etcd 同样是 CP 系统,基于 Raft 协议,提供线性一致性读写。\n4. Nacos 支持 AP 和 CP 两种模式切换:临时实例(ephemeral)采用 AP 模式(Distro 协议),持久实例采用 CP 模式(Raft),可根据场景灵活选择。\n\n健康检查差异:\n- Consul:支持 HTTP、TCP、gRPC、Script、TTL 多种方式,支持主动和被动健康检查。\n- Nacos:临时实例通过客户端心跳(默认5秒)维持,持久实例通过服务端主动探测(TCP/HTTP/MySQL)。\n- Etcd:本身不提供内建健康检查,需借助外部组件(如 Kubernetes 的 Readiness Probe)。\n- ZooKeeper:基于 Session 和临时节点(Ephemeral Node)机制,客户端断连后临时节点自动删除,类似心跳检测。",
"keywords": [
"CP",
"AP",
"Raft",
"ZAB",
"Distro",
"心跳",
"临时节点",
"健康检查",
"Raft协议",
"Nacos双模式"
],
"scoring_rubric": "满分10分。CP/AP定理分类正确(3分):ZK/Consul/Etcd为CP、Nacos支持AP+CP各得满分;一致性协议准确(3分):提及Raft/ZAB/Distro;健康检查机制描述(4分):至少描述3种工具的健康检查方式且准确。",
"explanation": "这道题考察对分布式系统基础理论(CAP)与主流注册中心实现细节的理解。核心区别在于:CP 系统在网络分区时牺牲可用性保证一致性,而 Nacos 的双模式设计是其差异化优势。健康检查机制直接影响服务的上下线时效和故障检测灵敏度,是生产环境中的关键配置项。",
"source": null,
"related": []
},
{
"id": "sa-002",
"type": "short_answer",
"difficulty": 3,
"tags": [
"microservice",
"load-balancing",
"rate-limiting"
],
"question": "在一个高并发的微服务场景中,某核心接口 QPS 达到 5000,后端部署了 8 个实例。请分别设计负载均衡策略和限流方案,并说明为什么选择这些策略,以及如何处理实例故障时的流量转移。",
"answer": "负载均衡策略设计:\n1. 采用一致性哈希作为基础策略,以请求参数(如用户ID)作为哈希键,确保同一用户的请求路由到同一实例,提升本地缓存命中率。\n2. 引入虚拟节点解决节点数少时的数据倾斜问题。\n3. 结合加权轮询:根据各实例的实时负载(CPU、内存、RT)动态调整权重,实现柔性负载均衡。\n4. 客户端负载均衡(如 Spring Cloud LoadBalancer/Ribbon)减少网络跳数,服务端负载均衡(如 Nginx/Envoy)便于统一管控。\n\n限流方案设计:\n1. 总入口层:采用滑动窗口计数器(Sentinel),对整个接口设置 6000 QPS 的总限流阈值(留 20% 余量)。\n2. 单实例:每个实例分配 750 QPS 的令牌桶限流(0.2秒预热),应对瞬时突发流量。\n3. 分布式限流:使用 Redis + Lua 脚本实现全局限流,原子操作保证并发安全;或使用 Sentinel 集群限流模式。\n4. 多级限流:网关层(Sentinel/Gateway)粗粒度 + 服务层(RateLimiter)细粒度。\n\n实例故障处理:\n1. 一致性哈希环上故障节点的流量自动顺时针转移到下一个健康节点。\n2. 配合健康检查(3秒超时)快速摘除故障实例。\n3. 限流阈值动态调整:实例数减少时,按比例缩减各实例限流配额,防止过载。",
"keywords": [
"一致性哈希",
"虚拟节点",
"加权轮询",
"令牌桶",
"滑动窗口",
"Sentinel",
"Redis+Lua",
"客户端负载均衡",
"服务端负载均衡",
"健康检查"
],
"scoring_rubric": "满分12分。负载均衡策略设计合理(4分):一致性哈希+虚拟节点+动态权重至少提及2项;限流方案完整(4分):至少包含全局+单实例两层限流,令牌桶/滑动窗口/Sentinel选其二;故障转移处理(2分):哈希环流量漂移+健康检查摘除;方案合理性说明(2分):有清晰的选型理由。",
"explanation": "此题综合考察负载均衡与限流的实际工程设计能力。一致性哈希解决会话粘性问题,滑动窗口解决流量精确统计,令牌桶解决突发流量平滑,Sentinel 解决分布式统一管控。故障时的流量自动转移是高可用的关键保障。",
"source": null,
"related": []
},
{
"id": "sa-003",
"type": "short_answer",
"difficulty": 4,
"tags": [
"microservice",
"circuit-breaker",
"config-center"
],
"question": "请描述 Circuit Breaker(熔断器)模式的三态状态机(Closed、Open、Half-Open)的工作原理和状态流转条件,并对比 Hystrix、Sentinel 和 Resilience4j 三者的核心差异。如果将熔断器与配置中心(如 Nacos/Apollo)结合使用,如何实现熔断参数的动态下发和热更新?",
"answer": "一、熔断器三态状态机:\n1. Closed(关闭):正常状态,请求正常通过,熔断器持续统计失败率。当失败率超过阈值(如 50%)且在滑动窗口内的请求量达到最小请求数(如 20),状态切换为 Open。\n2. Open(打开):熔断状态,所有请求直接被拒绝(快速失败),返回降级响应(Fallback)。经过设定的超时时间(如 5 秒)后,自动进入 Half-Open。\n3. Half-Open(半开):试探状态,允许有限数量的请求通过。如果这些请求成功率恢复到阈值以上,回到 Closed;如果仍然失败,回到 Open。\n\n二、三者核心差异:\n- Hystrix(Netflix,已停更):基于 RxJava/线程池隔离,默认 10 秒滑动窗口,提供 Hystrix Dashboard 可视化。\n- Resilience4j(替代 Hystrix):基于装饰器模式,轻量级,支持 Circuit Breaker、RateLimiter、Retry、Bulkhead 等模块组合使用,函数式友好,线程开销低。\n- Sentinel(阿里):除了熔断外,还集成了流量控制、系统自适应保护、热点参数限流;支持实时监控 Dashboard 和动态规则推送,与 Spring Cloud / Dubbo 深度集成。\n\n三、与配置中心结合实现热更新:\n1. Nacos 方案:在 Nacos 中创建熔断规则配置(如 JSON 格式的 CircuitBreaker Rule),Sentinel 通过 Nacos DataSource 监听配置变更,实时拉取新规则并生效,无需重启。\n2. Apollo 方案:在 Apollo 配置中心维护熔断参数(失败率阈值、超时窗口等),Resilience4j 或 Sentinel 通过 @ApolloConfigListener 监听变更事件,动态重建 CircuitBreaker 实例。\n3. 核心原理:配置中心提供长轮询/WebSocket 通知机制,客户端监听器收到变更后原子地替换内存中的规则对象,实现秒级热更新。",
"keywords": [
"Closed",
"Open",
"Half-Open",
"失败率阈值",
"滑动窗口",
"快速失败",
"Fallback",
"Hystrix",
"Sentinel",
"Resilience4j",
"Nacos DataSource",
"ApolloConfigListener",
"热更新",
"动态规则推送"
],
"scoring_rubric": "满分15分。三态状态机描述完整准确(5分):三态定义各1分、流转条件各0.5分;三者对比准确(5分):各框架核心特征至少提到2点;配置中心热更新方案(5分):Nacos/Apollo至少描述一种完整链路,包含监听机制和生效原理。",
"explanation": "熔断器是微服务容错的核心机制,三态状态机保证了系统的优雅降级与自动恢复。Hystrix 已停更但概念经典,Sentinel 功能最全面,Resilience4j 最轻量。与配置中心结合实现参数热更新,是生产环境中快速调整容错策略、应对流量突变的关键能力。",
"source": null,
"related": []
},
{
"id": "sa-004",
"type": "short_answer",
"difficulty": 4,
"tags": [
"microservice",
"idempotent",
"distributed-lock"
],
"question": "在一个电商下单场景中,用户可能因网络重试导致重复提交订单。请设计一个完整的幂等控制方案,并说明如何结合分布式锁(Redis RedLock / ZooKeeper)保证并发下的幂等性。请比较 Redis RedLock 和 ZooKeeper 分布式锁的实现差异,包括锁续期和可重入性支持。",
"answer": "一、幂等控制方案设计:\n1. 幂等键(Idempotency Key):客户端在请求中携带唯一幂等键(如 UUID),服务端在处理前查询该键是否已存在。若存在则直接返回之前的结果;若不存在则执行业务逻辑并记录。\n2. Token 机制:调用方先调用获取 Token 接口获得一次性令牌,随请求一起提交。服务端在 Redis 中用 Lua 脚本原子性地检查并删除 Token,成功则处理业务,失败则拒绝重复请求。\n3. 去重表(数据库唯一索引):在订单表中设置 request_id UNIQUE 索引,重复插入时数据库抛出异常,应用层捕获后返回已有结果。\n4. 状态机幂等:通过订单状态流转(如 CREATED → PAID → SHIPPED),前置校验当前状态是否允许该操作,防止重复状态变更。\n\n二、与分布式锁结合:\n1. 加锁时机:在幂等键校验通过后、执行核心业务前,对业务主键(如商品ID+用户ID)加分布式锁。\n2. 处理流程:获取锁 → 二次检查幂等标记(Double Check)→ 执行业务 → 写入幂等标记 → 释放锁。\n\n三、Redis RedLock vs ZooKeeper 分布式锁:\n1. Redis RedLock:\n - 实现:基于 Redisson,向 N 个独立 Redis 节点(通常 5 个)依次请求加锁,超过半数(N/2+1)成功且总耗时小于锁有效期则获锁成功。\n - 锁续期:通过 WatchDog 机制(默认30秒),后台线程每10秒自动续期,业务完成后主动释放。\n - 可重入性:支持,基于 Hash 结构记录重入次数,同一线程可多次加锁。\n - 争议:Martin Kleppmann 指出 RedLock 在时钟跳跃等场景下的安全性问题,但实际生产中 Redisson 的 WatchDog 机制已大幅缓解。\n\n2. ZooKeeper 分布式锁:\n - 实现:基于临时顺序节点(Ephemeral Sequential),每个客户端创建 /lock/seq-xxx 节点,只锁定序号最小的节点;后续节点监听前一个节点的删除事件(避免惊群效应)。\n - 锁续期:基于 Session 心跳,客户端定期发送心跳维持 Session,Session 过期则临时节点自动删除,锁自动释放。\n - 可重入性:通过在节点中记录持有者标识(IP+线程ID+重入次数)实现可重入。\n - 优势:CP 保证,数据一致性更强;Session 机制天然支持锁自动释放,安全性高于 Redis。",
"keywords": [
"幂等键",
"Token机制",
"去重表",
"唯一索引",
"状态机",
"RedLock",
"WatchDog",
"可重入",
"临时顺序节点",
"Session心跳",
"Double Check",
"Lua脚本"
],
"scoring_rubric": "满分15分。幂等方案完整(5分):至少描述3种幂等手段且正确;分布式锁结合(3分):包含加锁+Double Check流程;RedLock描述(4分):半数节点+WatchDog续期+可重入;ZooKeeper描述(3分):临时顺序节点+Session续期+可重入。",
"explanation": "幂等控制是分布式系统的核心设计要求,尤其在支付、下单等涉及资金操作的场景。分布式锁是实现幂等的手段之一,但需配合幂等键/去重表双重保障。RedLock 追求性能但有一致性争议,ZooKeeper 追求一致性但性能较低,选型需根据业务场景权衡。",
"source": null,
"related": []
},
{
"id": "sa-005",
"type": "short_answer",
"difficulty": 5,
"tags": [
"microservice",
"distributed-transaction"
],
"question": "在一个涉及订单服务、库存服务、支付服务的电商场景中,下单操作需要同时完成:创建订单、扣减库存、发起支付。请对比 2PC、TCC、Saga 和本地消息表四种分布式事务方案的原理、优缺点,并说明你会选择哪种方案以及理由。",
"answer": "一、四种方案对比:\n\n1. 2PC(两阶段提交):\n - 原理:协调者(TM)向所有参与者(RM)发送 Prepare 请求,参与者执行本地事务但不提交并回复 Ready/Abort;若全部 Ready,则发送 Commit,否则发送 Rollback。\n - 优点:强一致性,数据可靠。\n - 缺点:同步阻塞(Prepare 后资源锁定)、协调者单点故障、数据不一致风险(Commit 阶段部分参与者提交失败)、性能差(不适合高并发)。\n\n2. TCC(Try-Confirm-Cancel):\n - 原理:Try 阶段预留资源(如冻结库存、冻结金额);Confirm 阶段确认提交(扣减冻结资源);Cancel 阶段回滚释放冻结资源。需要为每个操作实现三个接口。\n - 优点:不依赖数据库锁,性能优于 2PC;业务层控制,灵活度高。\n - 缺点:开发成本高(每个服务三个接口);Try 失败时需处理悬挂(空回滚)和幂等问题;资源锁定时间长。\n\n3. Saga:\n - 原理:将长事务拆分为一系列本地事务 T1→T2→T3...,每个 Ti 有对应的补偿事务 Ci。正向执行:T1→T2→T3;若 T3 失败,则逆向补偿:C2→C1。可通过编排(Orchestration)或协同(Choreography)模式实现。\n - 优点:无资源锁定,性能好;适合长流程业务。\n - 缺点:最终一致性,中间状态可能可见;补偿逻辑复杂(如补偿操作本身失败);缺乏隔离性(需要通过语义锁等方式补偿)。\n\n4. 本地消息表:\n - 原理:在订单服务本地事务中,同时写入业务数据和消息表(同一数据库事务保证原子性)。后台定时任务扫描消息表,将消息发送到 MQ,下游消费者处理后回调确认。消息表可定期清理。\n - 优点:实现简单,不依赖特殊中间件;利用数据库事务保证一致性;可靠投递。\n - 缺点:引入消息轮询的性能开销;消息表数据量大时需要分库分表;与业务耦合(消息表结构随业务变化)。\n\n二、方案选择:\n选择 Saga + 本地消息表的组合方案。理由:\n1. 电商下单是典型的长流程业务,涉及多个微服务调用,不适合 2PC 的同步阻塞模型。\n2. Saga 编排模式(如使用 Seata 的 Saga 模式或 Temporal)可以清晰定义正向流程和补偿流程,流程可视化,便于排查问题。\n3. 订单创建和库存扣减使用本地消息表保证最终一致性,支付结果通过回调确认。\n4. 对于库存扣减的中间状态可见问题,可在查询时通过订单状态过滤未完成的事务。\n5. TCC 开发成本过高,电商场景更看重交付速度和性能,不值得投入每个服务三个接口的开发量。",
"keywords": [
"2PC",
"TCC",
"Saga",
"本地消息表",
"最终一致性",
"补偿事务",
"Try-Confirm-Cancel",
"编排模式",
"协同模式",
"悬挂",
"空回滚",
"语义锁",
"Seata",
"中间状态"
],
"scoring_rubric": "满分18分。四种方案原理描述各2分(8分):每种方案至少正确描述核心流程;优缺点对比各1分(4分):每种至少提到一个优点和一个缺点;方案选择有理有据(4分):选择合理且理由充分,至少从性能/一致性/开发成本三个维度论证;补充中间状态处理方案(2分):提到语义锁或状态过滤。",
"explanation": "分布式事务是微服务架构中最复杂的难题之一,核心是在一致性、可用性、性能之间做权衡。2PC 保证强一致但性能差,TCC 灵活但开发成本高,Saga 适合长流程但只有最终一致性,本地消息表简单可靠但引入额外复杂度。实际选型需结合业务场景(实时性要求、并发量、团队能力)综合判断,不存在银弹方案。",
"source": null,
"related": []
}
]
}