← 每日面试题 学习看板

什么是微服务架构?优势?特点?

面试题/02架构设计题/01微服务/什么是微服务架构?优势?特点?.md

面试记录 2026-09-27

题目:什么是微服务架构?优势?特点?

难度:low

标签:arch/microservice, general/knowledge

评分:⭐⭐⭐☆☆(3/5)

我的回答

微服务架构是一个演变的过程。最初大家的架构基本上都是单体的,一个服务支撑所有的事情。但是发现单个的机器存在上限,然后就做了横向的扩容,做分布式,由多台机器同时提供服务,然后实现可以实现承担更多的流量,更高的并发。但是后来发现这种横向的并发存在一些问题。首先,所有的服务都集中到一起,我只想扩容某一点的时候,这时候并不容易。我只想扩容某一点,但是不想扩容其他的时候,无法直接进行,需要把整体的全部去聚合到一起,再扩一份出来。这造成了资源浪费。后续一方面为了更好的扩充资源,一方面为了有使用到不同语言的优势,做了微服务,将原有的服务拆分成多份,分别部署。比如 A 服务用部署 10 份,B 服务可能就部署 2 份,最终构建一组服务去进行对外提供能力;

微服的优势就是更好扩展,性能上其实也是更好的。但是延伸的问题就是它的复杂度太高了。如果区分不好,可能会产生,要么是大量的服务聚在一起,没有划分出合理的内容,要么就是拆分太细,导致资源的浪费。

点评

优点:

不足:

补充:

  1. 围绕业务能力构建服务
  2. 组织围绕服务(Conway's Law)
  3. 去中心化治理(技术选型自治)
  4. 去中心化数据管理(每个服务自己 DB)
  5. 基础设施自动化(CI/CD)
  6. 面向设计演进(设计失败、优雅废弃)
  7. 轻量通信(HTTP/gRPC/消息)

完整讲解

第一部分:知识重点剖析

核心考点定位:考察对微服务本质的理解,是否清楚演进动因、核心特征、优势代价的权衡,而非仅仅背一堆名词。

知识点拆解:

  1. 演进脉络:单体 → 垂直拆分(按功能层)→ SOA(企业服务总线) → 微服务(轻量通信 + DevOps)。微服务不是新技术,是新的组织与治理方式。
  2. 7 大核心特征(Martin Fowler):围绕业务组织、去中心化治理、去中心化数据、智能端点 + 轻量通信、基础设施自动化、设计失败(每个服务可以独立失败演进)、组合而非继承。
  3. 5 大优势:独立部署、故障隔离、按需扩展、团队独立、技术栈灵活。
  4. 5 大代价:分布式一致性、跨服务调用损耗、服务治理复杂度、可观测性挑战、分布式事务。
  5. 拆分边界:DDD 领域驱动设计,按业务限界上下文(Bounded Context)拆分,而不是按技术层(web/service/dao)拆。
递进:从"为什么拆"(单体瓶颈)→ "拆成什么样"(业务边界)→ "拆完要付出什么"(分布式复杂度)。

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. 什么时候不该用微服务?
  1. 拆分微服务有哪些原则?
  1. 微服务如何通信?同步 vs 异步怎么选?
  1. 康威定律是什么?为什么对微服务重要?

第三部分:面试者参考回答(300-600 字口语化)

面试官您好,微服务是从单体演进出来的架构风格。

演进过程是这样:最早单体一个大应用,简单好上手;单机有瓶颈,就把多个单体实例放多台机器做横向扩容;但整体部署导致无法按需扩缩容——用户服务要 20 副本,支付服务只要 2 副本,被迫一起扩,资源浪费;再往后按功能域拆分成多个独立部署的小服务,就是微服务。

特点上我记 7 条:围绕业务能力构建、去中心化治理、去中心化数据(每个服务自己的 DB)、智能端点 + 轻量通信(HTTP/gRPC/消息)、基础设施自动化(CI/CD)、可以设计失败、组合而非继承。

优势主要是:

  1. 独立部署——支付改了只发支付,不影响用户;
  2. 故障隔离——一个服务挂了不拖垮整个系统;
  3. 按需扩展——按业务量给服务单独扩缩容;
  4. 多团队并行——一个团队一个服务,符合康威定律;
  5. 技术栈灵活——支付可以用 Go,用户可以用 Java。

代价要正视:

  1. 分布式一致性——数据不在一起了,2PC/TCC/SAGA/本地消息表各种方案;
  2. 跨服务调用有网络开销,比内调用慢;
  3. 服务治理成本——注册中心、网关、熔断、限流、链路追踪都要搭;
  4. 排查复杂——一个请求跨 5 个服务,出问题很难定位。

实践上:团队小、业务没跑通,先做单体(Monolith First);只有当单体真的扛不住(比如团队大于 20 人、某个模块需要独立扩展),再按 DDD 的限界上下文拆分。拆得太细和没拆,都是坑。