loader

Nerio News Magazine brings you trusted, timely and thought-provoking stories from around the globe.

Follow Us

微服务 25 问:拆分边界、运行时治理与数据架构

Share This Article:

25 问按治理生命周期组织:拆分与边界(限界上下文/康威定律/回退单体)、通信与发现(注册中心语义/重试预算)、运行时治理(熔断三态/舱壁/灰度)、数据架构(每库独立/CQRS/事件版本化)。

微服务 25 问:拆分边界、运行时治理与数据架构
关键词微服务面试、服务拆分、服务治理、熔断降级、灰度发布、CQRS

微服务面试的陷阱在于:背得出「拆分原则、注册发现、熔断限流」这些名词,却答不好「为什么这么拆、拆错了怎么办」。这份 25 问按治理生命周期组织——从拆分、通信,到运行时治理,最后到数据架构,每问给出答题骨架。

一、拆分与边界(6 问)

1. 微服务拆分的依据是什么?

围绕业务能力(限界上下文)拆,而不是按技术层拆。可操作的判据:独立的数据所有权、独立的变更节奏、独立的扩缩容需求。三者满足两条才值得拆。

2. 服务拆太细有什么代价?

分布式事务、网络开销、运维复杂度、排查难度全部上升。面试观点:先拆「粗粒度的服务」,等团队规模和变更节奏逼你再拆——过度拆分比单体更难回退。

3. 什么是康威定律对架构的影响?

系统结构会趋同于组织沟通结构。想拆出清晰的服务边界,先让团队边界清晰(一个服务一个 owner)。这问考察架构的社会学视角。

4. 什么情况下应该回退到单体?

团队小(< 10 人)、业务早期边界不明、运维能力不足。Modular Monolith(模块化单体)+ 后续按模块拆出,是更稳的路径。

5. 服务间怎么避免「隐式耦合」?

共享数据库是最大的反模式;契约先行(OpenAPI/protobuf);只通过接口交互,禁止绕过服务直连它的存储。

6. API 版本化策略?

向后兼容优先(加字段不删字段);破坏性变更走新版本(URL/Header 版本)+ 双跑期 + 下线公告。加分点:提到消费者驱动契约测试。

微服务治理的四个层次

二、通信与发现(6 问)

7. 同步 RPC 与异步消息怎么选?

需要立即得到结果的读操作用 RPC;状态变更、事件广播、削峰用消息。原则:能用事件解耦的不要用同步调用串起来。

8. 服务注册与发现的完整流程?

服务启动注册(心跳续期)→ 注册中心(Nacos/Consul/ETCD)→ 消费方订阅推送变更 → 客户端负载均衡。加分点:说明注册中心挂了服务仍可靠本地缓存运行——注册中心是「最终一致的路由表」不是关键路径。

9. 负载均衡策略有哪些?怎么选?

轮询/加权轮询(静态均衡)、最少连接/最少 RT(动态)、一致性哈希(会话亲和)。有状态或缓存场景用哈希,普通服务用动态策略。

10. 重试的正确姿势?

只重试幂等操作;指数退避 + 抖动;重试预算(如重试不超过总请求 10%)防重试风暴;超时要逐层递减。

11. 网关在微服务架构里的位置与职责?

统一入口:鉴权、限流、路由、灰度、协议转换。原则是「薄网关」——业务逻辑下沉到服务,编排型 BFF 单独成层。

12. 消息丢失与重复怎么处理?

丢失:生产确认 + 持久化 + 消费手动 ack 三段保证;重复:消费端幂等(唯一键/状态机)。「至少一次投递 + 消费幂等」是标准组合拳。

三、运行时治理(7 问)

13. 配置中心解决什么问题?动态配置的边界?

环境隔离、版本回滚、灰度发布、动态调参(限流阈值/开关)。边界:敏感信息走密钥管理,不适合「明文塞配置中心」。

14. 熔断器的三态模型?

关闭(正常)→ 打开(错误率/慢调用超阈值,直接失败)→ 半开(放少量探测流量)→ 恢复关闭。加分点:熔断维度是「依赖 + 方法」级,不是服务级一刀切。

15. 舱壁隔离是什么?

把资源(线程池/信号量/连接池)按依赖隔离,一个下游挂掉不占光全局资源。它是雪崩传导的物理隔断。

16. 灰度发布的完整链路?

流量标记 → 网关按规则路由到灰度实例 → 数据兼容(新旧版本同库共存)→ 监控对比 → 全量。难点在数据结构变更的双写迁移。

17. 分布式链路追踪的关键设计?

TraceID 全链路透传、Span 记录父子关系与耗时、采样策略(头部采样保成本、尾部采样保问题请求)。OpenTelemetry 是当前事实标准。

18. 服务的健康检查怎么做才可靠?

存活探针(进程在不在)与就绪探针(能不能干活)分开;就绪检查要覆盖真实依赖(DB 连接池可用),否则流量会打到「活着但干不了活」的实例。

19. 服务优雅上下线怎么做?

上线:先注册后放流量(预热期低权重);下线:先摘流量 → 等在途请求完成 → 再停进程。MQ 消费者下线要等本地队列消费完。

四、数据架构(6 问)

20. 「每个服务自己的数据库」怎么落地?

物理上独立 schema/实例,跨服务数据获取走 API 或事件同步的本地副本(读模型)。禁止跨库 JOIN——需要 JOIN 说明边界拆错了。

21. 跨服务查询(列表页要聚合多服务数据)怎么办?

CQRS:事件驱动的读模型/物化视图,查询侧冗余聚合;或 BFF 编排聚合(实时但链路长)。高频查询场景选读模型。

22. 分布式事务在微服务里的默认选择?

事件驱动的最终一致(本地消息表/事务消息 + 消费幂等 + 对账兜底)。强一致只在资金核心链路用 TCC。参考分布式事务专篇的对比表。

23. 数据库变更怎么跨服务协调?

演进式设计:兼容式变更(加列不删列)→ 双写 → 切读 → 清理,每步可回滚。配合 Flyway/Liquibase 版本化管理 schema。

24. 事件设计的版本化怎么处理?

事件是长期契约:只加字段不改语义;大版本变更发新 topic 双跑迁移;消费方对未知字段必须容忍(向前兼容)。

25. 微服务架构下怎么做容量规划?

按链路模型推每层 QPS → 单服务压测拿单机水位 → 计算实例数与中间件配额 → 全链路压测验证。可展开讲影子库与预案演练,体现完整方法论。

标签

#微服务#后端面试#服务治理#架构设计

Related Post

发表回复

Your email address will not be published.