微服务架构概述?

2025年 阅读约 15 分钟 面试指南 · Spring Cloud

深入解析微服务架构:单体 vs 微服务对比、服务拆分原则、CAP理论在微服务中的体现、服务治理核心组件、Spring Cloud 全家桶,附面试模拟问答。

一句话总结

微服务是将单体应用拆分为一组独立部署、独立开发、独立扩展的小服务。每个服务围绕业务能力构建,拥有独立数据库,通过轻量级通信机制(HTTP/RPC)协作。Spring Cloud 提供一站式解决方案:注册中心(Nacos/Eureka)、配置中心(Nacos Config)、网关(Gateway)、远程调用(Feign)、熔断降级(Sentinel)、链路追踪(Sleuth)。核心挑战:服务发现、配置管理、分布式事务、链路追踪。

初级理解

单体 vs 微服务

对比维度单体架构微服务架构
部署整体打包部署每个服务独立部署
扩展整体扩展(资源浪费)按需扩展(精准)
开发统一技术栈每个服务可不同技术栈
数据库共享数据库每个服务独立数据库
故障隔离一个模块故障影响全局故障隔离,不影响其他服务
复杂度开发简单,运维简单分布式系统复杂度

中级深入

服务拆分原则

# 拆分原则 # 1. 单一职责:一个服务只做一件事 # 2. 高内聚低耦合:服务内部紧密,服务间松散 # 3. 按业务领域拆分(DDD 限界上下文) # 4. 数据独立:每个服务有自己的数据库 # 5. 团队对齐:一个团队负责一个/多个服务 # 拆分示例(电商系统) # 用户服务(user-service):注册、登录、用户信息 # 商品服务(product-service):商品管理、分类、库存 # 订单服务(order-service):下单、订单管理 # 支付服务(pay-service):支付、退款 # 物流服务(logistics-service):发货、物流跟踪 # 拆分粒度 # 太小:服务太多,运维复杂,调用链长 # 太大:退化为单体,失去微服务优势 # 原则:先粗后细,逐步拆分

Spring Cloud 核心组件

组件作用Spring Cloud 实现
注册中心服务注册与发现Nacos、Eureka、Consul
配置中心集中配置管理Nacos Config、Spring Cloud Config
网关统一入口、路由转发Gateway、Zuul
远程调用服务间通信Feign/OpenFeign、RestTemplate
负载均衡请求分发Ribbon、LoadBalancer
熔断降级故障容错Sentinel、Hystrix
链路追踪调用链分析Sleuth + Zipkin

高级拓展

CAP 理论在微服务中的体现

# CAP 理论 # C(Consistency):一致性,所有节点同一时刻数据相同 # A(Availability):可用性,每个请求都能得到响应 # P(Partition Tolerance):分区容错性,网络分区时系统仍能工作 # 微服务中 P 是必须的(网络不可靠) # 所以只能在 C 和 A 之间权衡 # 注册中心的选择 # Eureka:AP(优先可用性) # - 节点平等,网络分区时仍可注册和查询 # - 可能拿到旧数据(最终一致性) # Zookeeper:CP(优先一致性) # - Leader 选举期间不可用 # Nacos:AP/CP 可切换 # - 默认 AP,可配置为 CP

服务间通信方式

# 同步通信(HTTP/RPC) # REST API(Feign):简单、跨语言、调试方便 # Dubbo(RPC):高性能、长连接、二进制协议 # gRPC:高性能、Protocol Buffers、双向流 # 异步通信(消息队列) # 场景:下单后发短信、扣库存 # 优点:解耦、削峰、最终一致性 # 缺点:延迟、复杂度增加 # 选择建议 # 查询类:同步 REST # 命令类(需要即时结果):同步 REST # 通知类(不需要即时结果):异步 MQ

实战场景

场景:微服务项目结构

# 典型微服务项目结构 mall-project/ ├── mall-gateway/ # 网关服务 ├── mall-common/ # 公共模块(工具类、统一返回) ├── mall-user/ # 用户服务 │ ├── user-api/ # Feign 接口定义 │ └── user-service/ # 服务实现 ├── mall-product/ # 商品服务 ├── mall-order/ # 订单服务 └── mall-pay/ # 支付服务 # 每个服务独立数据库 # mall_user、mall_product、mall_order、mall_pay

面试模拟

面试官:微服务和单体架构有什么区别?

你:单体是整体打包部署,微服务是独立部署的小服务。微服务优势:独立扩展、故障隔离、技术栈灵活;挑战:分布式复杂度、数据一致性、运维成本高。不是所有项目都需要微服务,小项目用单体更合适。

面试官:服务拆分的原则是什么?

你:单一职责、高内聚低耦合、按业务领域拆分(DDD)、数据独立。拆分粒度要适中,先粗后细逐步演进。拆分过细会导致服务爆炸和调用链过长。